即使选中文本也不可见(在 Evince 中)

即使选中文本也不可见(在 Evince 中)

当你使用 OCR 工具处理图像时立方体,您将获得一个包含该图像和不可见文本的 PDF 文件。您看不到文本,但可以选择、搜索和复制它。当您在 OCR 生成的 PDF 文件中选择此类文本时,它看起来(在表明) 像这样。

由 tesseract 创建

您只能看到图像和文本的突出显示。选定的文本不会出现(仅显示其突出显示)。在表明这种文本的突出显示是透明的。当我尝试在 latex 中手动创建类似的东西时,例如使用包transparenttext rendering mode 3(参见下面的代码),我得到了不可见的文本,但突出显示看起来不同(在表明)。

乳胶结果

选中后,文本在突出显示中可见,并且突出显示不像 生成的文件那样透明tesseract。 似乎两个文件中的文本都被标记为不同的内容类型(或类似的东西),因此它们的突出显示不同。

总结

我怎样才能创建这样的文本tesseract:不可见、可搜索、可选择,并具有特殊突出显示(透明,不显示文本(在表明)),这样即使选择了文本,您也可以看到其后面的图像吗?

例子

\documentclass{article}
\usepackage{transparent}
\begin{document}
\fbox{Invisible 1: {\transparent{0}{invisible}}}

\fbox{Invisible 2: {\pdfliteral page{q 3 Tr}invisible\pdfliteral page{Q}}}
\end{document}

答案1

accsupp包允许排版文本与复制/粘贴文本不同。请参阅补充作为替代方案。

\documentclass{article}
\usepackage{accsupp}
\newcommand\nosee[1]{%
  \BeginAccSupp{method=escape,ActualText={\detokenize{#1}}}%
[\phantom{#1}]%
\EndAccSupp{}%
}
\begin{document}
Now you see me\nosee{, now you don't}.
\end{document}

PDF 视觉输出是

在此处输入图片描述

如果我按 Ctl-A、Ctl-C 复制整个文档内容并粘贴,则生成的文本是

Now you see me, now you don't .

后面这段文本是可搜索的。我现在分配了与不可见文本相等的括号空间。如果你在括号之间突出显示,文本是可标记的,但只有在全也就是说,要么突出显示整个隐藏文本,要么不突出显示任何文本。目前的方法不允许突出显示隐藏文本的一部分。

补充

在这里,我使用分别tokcycle处理\invisible输入流的每个标记\nosee,从而允许部分/连续文本突出显示。这里的缺点是环境适用于纯文本,任何宏都只会被分解为剪切/粘贴输出。

这种方法还有提供换行的额外优势。

不再需要对输出进行括号分隔...我改为\textunderscore对遇到的每个字符或空格输出白色。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{accsupp,xcolor,lmodern,tokcycle}
\newcommand\nosee[1]{%
  \sbox0{\detokenize{#1}}%
  \BeginAccSupp{method=escape,ActualText={\detokenize{#1}}}%
\makebox[\wd0]{\textcolor{white}{\textunderscore}}\allowbreak%
\EndAccSupp{}%
}
\tokcycleenvironment\invisible
{\addcytoks{\nosee{##1}}}
{\processtoks{##1}}
{\addcytoks{\nosee{##1}}}
{\addcytoks{\nosee{ }}}
\begin{document}
Now you see me\invisible , now you don't\endinvisible.
\end{document}

答案2

非常感谢 Nelson 在他的回答

正如 Nelson 所解释的那样,Evince 使用 Poppler 库来显示 pdf 文件。 改变在 Poppler 中,他提到的任何文本选择text rendering mode 3都会透明显示,该功能包含在 20.09.0 版本中。以前,任何选择都不会透明呈现,即使在 tesseract 创建的文件中也是如此。

对于我的问题中的示例,我使用了带有 Poppler 0.80.0 的 Ubuntu 19.10,目前我使用的是带有 Poppler 0.86.1 的 Ubuntu 20.04。在这两个版本中,使用 tesseract 创建的 pdf 文件中的选择都是透明显示的,但在我使用 的问题示例中却不是这样text rendering mode 3

在较旧的 Poppler 版本(在 Ubuntu 系统上)中,它已经(部分)正确显示的原因是由于早期的修补对于 Ubuntu,修复了 tesseract 中专用的 GlyphLessFont 的选择显示。这仅修复了 tesseract 生成的文件的显示,而其他文件text rendering mode 3仍然显示为不透明。

自 Ubuntu 版本 20.10 起,使用修复的 Poppler 版本 20.09.0,以便每个 pdf 文件中的文本选择都text rendering mode 3透明显示。


附加信息:

一个回答相关问题解释了不同的 OCR 程序如何将其 OCR 信息存储在 pdf 文件中。

答案3

该“透明度选择”功能是在 Poppler(Evince 和 Okular 使用的 pdf 库)中实现的。其动机是为了正确支持由 tesseract 创建的文档:请参阅原始问题实施承诺

作为你可以看到,当在“文本渲染模式 3”下绘制单词时,该单词将被视为不可见,这种特殊的“无绘制”模式源自 PDF 规范,正如在这个答案

Tr 3因此,PDF 制作软件使用什么插入文本在pdf中。

相关内容