gpt4 book ai didi

python - 在 PDF 中添加链接

转载 作者:行者123 更新时间:2023-12-04 16:10:08 27 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

5年前关闭。




Improve this question




我有几个用 Microsoft Word 生成的 PDF。我想要:

  • 使用正则表达式在 PDF 文本中查找匹配项。
  • 将匹配的文本转换为指向外部 URL 的链接。
  • 保存新版本的 PDF。

  • 如果我在 HTML 中执行此操作,它将如下所示:
    <!-- before: -->
    This is the text to match.

    <!-- after: -->
    This is the text to <a href="http://www.match.com/" target="_blank">match</a>.

    如何对 PDF 执行此操作?

    我更喜欢 Python,但我对其他选择持开放态度。

    编辑:我无权访问原始 Word 文档。我需要自己操作 PDF。我正在寻找一种使用 Python PDF 库(或其他语言中的类似库)的技术。

    编辑 2:我知道 PDF 的源代码不包含文字字符串。我想知道是否有一种方法可以执行以下操作:(1) 提取文本,(2) 查找匹配项,以及 (3) 对于每个匹配项,在原始 PDF 中的文本位置周围绘制一个可点击的框。我最接近的是 PyPDF2 的 addLink() ,但这会在 PDF 中添加内部链接,而不是指向外部 URL 的链接。

    最佳答案

    1. 'regex' 方法行不通!

    您“想要”的内容,(“使用正则表达式在 PDF 中查找匹配项”) 是不可能的! 简单明了的答案。

    原因:

    对于一般情况,您不能使用正则表达式来查找 PDF 文本中的“匹配项”。我什至不会在这里谈论 Unicode 字符......

    我只会考虑您问题中示例中的简单文本字符串: match

    在 PDF 源代码中,此字符串可能以不同的形式出现,具体取决于 PDF 生成软件以及使用字体编码的确切字体。以下列表不完整!

    (match) Tj                       # you are lucky
    <6d61746365> Tj # hex representation of characters
    <6d 61 74 63 65> Tj # hex representation of characters, v2
    <6d 61 7463 65> Tj # hex representation of characters, v3
    <6d>Tj <61> Tj<746365>Tj # hex representation of characters, v4
    .... # skipping version 5-500000000 of all...
    # ...possible hex representations
    (\155\141\164\143\150) Tj # octal representation of characters
    (m\141\164ch) Tj # octal/ascii mixed representation of chars
    (\155a\164ch) Tj # octal/ascii mixed representation of chars, v3
    <6d 61>Tj (\164c\150) Tj # hex/octal/ascii mix
    .... # skipping many more possibilities

    甚至,如果字符串应该使用的字体确实使用自定义编码(就像字体作为子集嵌入 PDF 的情况一样——仅包含在相应文本中使用的这些字形),它也会变得更加复杂。

    这可能意味着上面的 <6d61746365> Tj 可以变成带有自定义编码字体的 <2234567111> Tj,但它仍然会在 PDF 页面上显示 match

    2. 实现类似结果的变通方法可能有效
  • 您可以使用 pdftotext -layout some.pdf some.txt 创建一个包含 PDF 文本的文件。 (这不能可靠地工作。某些 PDF,例如那些缺少有效 /ToUnicode 表的 PDF,将无法轻松进行文本提取。)

    这可以引导您找到匹配的页码。

    使用(带有一些试错) pdftotext -f 33 -l 33 -layout -x NN -y MM -W NN -H MM 可以更准确地缩小第 33 页上的匹配位置。

    使用 pdftotext -layout -bbox -f 33 -l 33 将返回第 33 页上每个单词的边界框坐标。
  • 您也可以使用 TET 文本提取工具包来查找匹配单词的确切坐标。 TET 甚至可以为您提供单个字形的坐标。
  • 一旦确定了匹配的位置,您就可以使用 PDFlib 添加链接。
  • 关于python - 在 PDF 中添加链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28796832/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com