使用正则表达式自动向 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 上搜索 Adobe 的 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 添加到文档中一个缺点是您必须申请,而 Adobe 可能会拒绝您的请求。
编辑:
PDFedit 似乎很有希望。它是一个开源 GUI 应用程序,可让您手动或通过scripting 修改 PDF。
【讨论】:
真的吗?这看起来很严重,难道没有一些很酷的开源工具包我可以使用吗? Adobe 是一只恐龙,我很想把我的迷你长矛扔给它……它是可编写脚本的吗? 有很多库可以让您创建 PDF,但我不知道有任何开放的库可以让您阅读或修改 PDF。 也许您可以定义您的学生必须以更开放的格式(如 ODF)向您发送论文。 OpenOffice.Org 和当前版本的 Microsoft Word 能够以这种格式保存,其结构是定义良好的 XML。 有趣,但不是一个选择。许多学术论文以特定的会议格式(IEEE、ACM)发表。请注意,这些主要是其他学者,而不是学生。如果没有更多答案,我将探索 SDK 选项。谢谢! PDFedit 可以解决问题!谢谢,会回来提供反馈。以上是关于使用正则表达式自动向 PDF 文件添加注释 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NLTK 正则表达式模式用 UP/DOWN 指标注释财经新闻?