【问题标题】:Add comments to PDF files automagically with regular expressions [closed]使用正则表达式自动向 PDF 文件添加注释 [关闭]
【发布时间】:2011-05-24 13:04:41
【问题描述】:

几年来,我一直在为学术论文评分,我开始看到许多拼写和语法错误的模式。另外,我注意到经验不足的学者倾向于使用某些结构,这些结构会立即让更有经验的研究人员产生“气味”。

我想在 PDF 文件中自动识别和注释这些内容。有人知道我可以用来自动注释和评论 PDF 文件的脚本吗?也许这很简单,但我觉得我是第一个提出这个问题的人。

编程没问题。

【问题讨论】:

    标签: regex pdf annotations comments ghostscript


    【解决方案1】:

    要解决这个任务,你需要做 3 件事:

    1. 一个很好的文本提取工具,可以从 PDF 中获取内容(你基本上是在要求这个)。
    2. 了解您想使用哪些关键字来创建适当的文本注释/cmets 并触发 PDF 自动注释(您说您有这个)。
    3. 一种将 cmets 插入 PDF 的方法,最好是在正确的页面上,甚至是在页面上完全正确的位置(您要求这样做)。

    文本提取

    PDFlib 的 TET(文本提取工具包)可让您从任何 PDF 中提取文本。它是最强大的可用 PDF 文本提取工具,可让您通过命令行和脚本进行访问。它可以处理诸如连字以及不同的文本编码这样的怪事(来自文本提取的 p.o.v.)。更重要的是,它可以告诉您提取的任何字符或文本字符串在 PDF 页面上的确切页码和坐标。

    插入 PDF 注释

    在您解析文本并且您的逻辑决定为哪个页面添加哪个注释后,您可以使用 PDFlib 或 Ghostscript 将 cmets(“注释”)添加到原始 PDF。

    我不会在此处提供有关如何使用 PDFlib 向现有 PDF 添加注释的教程。但我会泄露一些关于 Ghostscript 如何做到这一点的内幕消息:

    使用 Ghostscript 为 PDF 添加注释

    要使用 Ghostscript 向现有 PDF 添加注释,首先创建一个名为 my-pdfmarks.txt(或您喜欢的任何名称)的文本文件。现在使用以下语法在该文本文件中输入注释的内容:

     [ /Title (Annotation experiments by -pipitas-)
       /Author (pipitas)
       /Subject (I'm trying to add annotations to existing PDFs with the help of Ghostscript...)
       /Keywords (comma, separated, keywords, spelling mistakes, grammar mistakes, raising "smells")
       /ModDate (D:20101219192842)
       /CreationDate (D:20101219092842)
       /Creator (pipitas' brainz)
       /Producer (Ghostscript under the direction of pipitas)
       /DOCINFO pdfmark
    
     [ /Contents (Smell: This statement was bloody well rebutted by decades of academic research...)
       /Rect [10 10 50 50]
       /Subtype /Text
       /Name Note
       /SrcPg 2
       /Open true
       /ModDate (D:20101220193344)
       /Title (A Comment on Page 2)
       /Color [.5 .5 0]
       /ANN pdfmark
    

    然后,运行 Ghostscript 命令,如下所示。我现在假设 Windows —— 对于 Linux/Unix/MacOSX,使用 gs 而不是 gswin32c.exe 作为可执行文件,并使用 \ 而不是 ^ 作为行继续标记:

    gs ^
      -o original-annotated.pdf ^
      -sDEVICE=pdfwrite ^
      -dPDFSETTINGS=/prepress ^
       original.pdf ^
       my-pdfmarks.txt
    

    瞧!您的输出 PDF 现在在第 2 页上有注释。

    现在你可能不明白你到底在做什么:

    • my-pdfmarks.txt 文件的第一部分处理 PDF 的元数据。如果您不想这样做,只需将其删除即可。
    • 第二部分在第 2 页 ('/SrcPg 2' ) 输出 PDF 的左下角,距离每个页面边框 10 个点 ('/Rect [10 10 50 50]'),使用偏绿色的 DeviceRGB 颜色 ('/Color [0.5 0.5 0]'),访问页面时默认打开('/Open true')。
    my-annotations.txt 文件中的

    可调整参数值(在每个关键字之后)都是如下:

    1. /DOCINFO pdfmark
    2. /Subtype /Text
    3. /Name /Note
    4. /ANN pdfmark

    例如,要使注释显示为纯红色,请使用/Color [1 0 0]

    为了完全理解 pdfmark 语法(并为您的程序添加更多调整),您需要在 Google 上搜索 Adob​​e 的 pdfmark 参考手册并阅读。

    既然您说“编程没问题”,您现在拥有所有构建块,可以使用您选择的任何脚本语言自动执行此操作。

    【讨论】:

    • 这完全成功了!太好了,我现在可以自动注释 pdf。我遇到的一些问题需要更多的工作:(1)TETml 可以以两种格式输出,即单词和行。单词用 X 和 Y 坐标注释,而线条是……不是。然而,在某些情况下(例如使用“it's”和“, which”)我需要知道一段文本的上下文。我仍然需要编写代码来连接这两种格式……呃。 (2) 我看到,如果一个学生经常犯一个错误,那么 cmets 也会变得有点重复。谢谢你!
    • 在使用我自己的工具两周后,我注意到系统中有很多故障(主要与 Ghostview 相关)。尤其是 MS Word 生成的 pdf 文件,但肯定不止这些,会生成一些奇怪的错误消息。我现在正在寻找一个新的 pdf 注释工具。
    • 我得到了一个没有文字的空矩形。如果我将 /Subtype 更改为 /FreeText 它可以工作。
    • 无论我做什么,ModDate 都不会显示在我的注释中。我在 Windows 10 上并使用 GS 9.27。我更愿意将它作为变量传递,但无论如何 - 它不会显示。
    • @BenRice:其他注释项(创作者、制作人……)是否显示?
    【解决方案2】:

    如果我是你,我会从支持你正在寻找的东西的 PDF Library SDK 开始:

    • 提取内容
    • 将 cmets 添加到文档中

    一个缺点是您必须申请,而 Adob​​e 可能会拒绝您的请求。

    编辑:

    PDFedit 似乎很有希望。它是一个开源 GUI 应用程序,可让您手动或通过scripting 修改 PDF。

    【讨论】:

    • 真的吗?这看起来很严重,难道没有一些很酷的开源工具包我可以使用吗? Adobe 是一只恐龙,我很想把我的迷你长矛扔给它……它是可编写脚本的吗?
    • 有很多库可以让您创建 PDF,但我不知道有任何开放的库可以让您阅读或修改 PDF。
    • 也许您可以定义您的学生必须以更开放的格式(如 ODF)向您发送论文。 OpenOffice.Org 和当前版本的 Microsoft Word 能够以这种格式保存,其结构是定义良好的 XML。
    • 有趣,但不是一个选择。许多学术论文以特定的会议格式(IEEE、ACM)发表。请注意,这些主要是其他学者,而不是学生。如果没有更多答案,我将探索 SDK 选项。谢谢!
    • PDFedit 可以解决问题!谢谢,会回来提供反馈。
    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2022-01-14
    • 2014-12-17
    • 2014-01-29
    • 2011-01-20
    相关资源
    最近更新 更多