代码之家  ›  专栏  ›  技术社区  ›  Questioner

更新:如何在pdf文件中精确定位?

  •  0
  • Questioner  · 技术社区  · 6 年前

    也许这个问题看起来有点奇怪,但它有一个非常实用的用例。

    假设我们选择了pdf文件的任意一部分来生成校验和,例如在以下屏幕截图中选择的文本(突出显示的文本):

    enter image description here

    然后我们使用哈希函数从选定的文本生成一个校验和。 我们 传送 (而不是发送)整个pdf文件连同此校验和一起发送给接收者,以便 这个接收者不知道pdf文件的哪个部分已经被选择和散列。 这个接收者想验证这个校验和。因此,他们需要知道pdf文件的哪个部分已经被选择并散列。因此,我们需要找到一个解决方案,通过这个方案,接收器可以找到所选文本和散列文本的准确位置。

    因为散列函数 不可逆的 ,问题是:

    这个接收者如何在pdf文件中准确地找到选中的和散列的文本?

    例如,确定 准确位置 在pdf文件中选择并散列的文本?(它非常敏感,因为即使是错误的字符或空格也可能导致校验和验证失败。)

    有可靠的方法应对这一挑战吗?

    注1: 如果问题不够清楚,请让我详细解释一下。

    重要: 请注意,由于空间的限制,我们只能存储校验和值加上一些显示选定文本位置的有限数据,这意味着我们不能存储 整个选定文本 .

    用例: 我们打算由一个核查员核查文件中选定文本的完整性。校验和以及处理散列文本的信息将存储在区块链中,因此由于存储在区块链中的限制(代价高昂),我们不能将整个选定的散列文本存储在区块链中,而只能存储一些有用的信息按至选定和哈希文本的确切位置。验证器可以访问整个文档,但是他们不知道文档的哪个部分已被散列。他们需要知道它来验证校验和。

    假设一个校准器有一个证书(纸),他需要证明他是证书的所有者,他扫描证书(数字化成任何格式更好)。证书的颁发者已经选择了证书的一些敏感部分(例如所有者信息等),并将它们分别散列到每个选定的部分以生成校验和。当验证人(所有者)将证书交付给验证人时,验证人需要检查所有校验和。在此步骤中,需要知道证书的哪些部分已被散列。因此,我们需要将有用的数据附加到校验和中,通过校验和,验证器可以找到散列部分。

    请注意 所选文本不会被记录,但也会被选中以生成校验和。不过,验证程序需要知道此文本的内容才能验证校验和。问题是,由于数据在区块链中存储的局限性,我们无法存储整个散列文本,而且只能存储一些有用的信息,这些信息地址到散列文本的确切位置。

    更新: 这个问题与( FREE Tool for watching coordinates in PDF )在使用工具时,我们可以找到选定文本的精确(x,y)坐标。我还不确定这个工具是否能用于我的问题。

    1 回复  |  直到 6 年前
        1
  •  1
  •   dirkt    6 年前

    请注意,pdf文件不包含 文本 . 它包含一个对象树,其中一些是包含postscript的简化变体的流,包含 命令 告诉渲染器 字形 放置在何处(或其他用于呈现图形输出的命令)。

    我建议使用类似 mutool mupdf 包来解压缩一个小的pdf文档中的流,并在文本编辑器中打开它,亲自查看它的外观。

    因此,当您在呈现器中选择“文本”时,您将挂接到呈现器的进程中,该进程将标志符号放在页面上。现在,渲染器可以做出一些努力将字形重新转换为文本,这依赖于(1)在pdf中有相应的表,(2)假设生成pdf的应用程序是如何工作的(例如,它按照与原始文本相同的顺序排列字形)。如果散列此重新翻译的文本,则它始终取决于渲染器用于执行重新翻译的方法。

    因此,您的用例(不管它有什么好处)将需要发送方和接收方使用相同的呈现程序。

    另一方面,假设嵌入字体或相同字体,呈现是确定的(特别是在相同的呈现器中)。所以最简单的方法就是记录你在页面上的位置和页码,然后发送这些信息。

    编辑

    如果首先扫描纸质文档,并且需要标记多个矩形区域,请为图像选择某种格式,找到矩形的确切像素位置,将矩形内的像素提取为某种定义的格式(例如rgb 8+8+8),然后散列此数据。然后将矩形位置与散列一起发送。

    为了方便起见,您可以将多个扫描图像存储在pdf中,然后使用许多工具从pdf中提取它们,但如何存储图像并不重要,只要您同意某种格式(因为有损压缩可能会更改像素值)。

    这将要求您存档扫描的图像(PDF或任何其他形式)。