使用正则表达式自动向 PDF 文件添加注释 [关闭]

Posted

技术标签:

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

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

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

编程没问题。

【问题讨论】:

【参考方案1】:

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

    一个很好的文本提取工具,可以从 PDF 中获取内容(你基本上是在要求这个)。 了解您想使用哪些关键字来创建适当的文本注释/cmets 并触发 PDF 自动注释(您说您有这个)。 一种将 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 文件中的

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

    /DOCINFO pdfmark” “/Subtype /Text” “/Name /Note” “/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 可以解决问题!谢谢,会回来提供反馈。

以上是关于使用正则表达式自动向 PDF 文件添加注释 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用纯 C/C++ 向 PDF 添加注释 [关闭]

在 PDF 中添加链接 [关闭]

如何使用 NLTK 正则表达式模式用 UP/DOWN 指标注释财经新闻?

使用正则表达式从 txt 中提取数据 [关闭]

带有正则表达式的 Windows BATCH 过滤器 [关闭]

有没有办法在 Linux 上使用 QFileDialog 自动向文件添加扩展名