使文本存在于PDF文档中,但不可见

时间:2017-08-15 03:02:38

标签: css pdf wkhtmltopdf

如何在HTML文档中包含文本,使其在PDF文档中“存在”(通过wkhtmltopdf生成),但在查看或打印时不可见?

约束:

  • 文本必须以正确的大小显示在正确的位置,因为目的是使用自动工具查找文本并在页面上发现其坐标和大小。

  • 解决方案必须只与文本有关,因为我试图保持这个简单的CSS样式。任何“将其隐藏在另一个元素之下”并不能解决问题,因为在这些坐标中可能没有任何其他元素。

  • 解决方案可能不依赖于页面上已有的内容;我无法检查页面上的背景元素,因为我无法动态地确定这些元素。该文本本身应该是不可见的。

  • 使用自动工具(例如pdfgrep)必须找到该文字,这意味着wkhtmltopdf必须将文字放在文档文件中。

    所以“display:none”样式或“opacity:0”不起作用,因为这使得PDF文档中的文本根本不存在。

所以我想要一个HTML文档,在文档中放置一个带有内联CSS样式的文本元素“FOO”,并通过wkhtmltopdf处理它;然后,pdfgrep FOO应该找到文本,文本位置和大小应该是正确的,但文本不应该以HTML格式显示,不会在查看PDF时显示,也不会在打印时显示。

3 个答案:

答案 0 :(得分:1)

如果样式为color: transparent;,则文本在页面上将完全透明,但在文档中查找该文本的任何工具都会正常显示。

答案 1 :(得分:1)

予。

PDF语法支持不同的“文本呈现模式”。这些使得PDF创建软件(或任何使用简单文本编辑器创作PDF的人)可以呈现任何文本,无论选择的字体如何,

  • 仅概述,
  • 仅填充,
  • 概述并填写,
  • 既没有填充也没有概述(不可见),
  • 加上一些处理裁剪的问题。

以下是PDF规范的说明:

Text rendering modes in PDF specification

但是,HTML或CSS(至少AFAIK)不支持此功能。因此,以类似方式完成任务的唯一选择是......

  • ...将HTML中的背景颜色设置为与文本颜色相同,
  • ...或将文字颜色设置为透明。

然后希望htmltopdf将其翻译成代表相同的PDF ...

II。

以下HTML代码(基本上使用 style="color:transparent" )适合我。您必须确定它是否完全满足您的要求:

<html>
<head></head>
<body>
    <div style="color:transparent; background:red; border: 1px dashed currentColor;">
          The color of this text is transparent/invisible. <br />
          The background of this text is red.

          <div style="background:blue; height:9px;"></div>

          Above this text is a blue box with a height of 9px. <br />
          This block is surrounded by a transparent border.
    </div>
</body>
</html>

然后,当打开PDF时,我无法读取任何文本行,但我可以选择/标记/突出显示它们。

运行时

 pdftotext -layout my.html -

我看到以下文字:

The color of this text is transparent/invisible.
The background of this text is red.
Above this text is a blue box with a height of 9px.
This block is surrounded by a transparent border.

答案 2 :(得分:0)

使用PDF的背景颜色(例如白色)制作文本。