Adobe Acrobat能够编辑PDF文件(即实际删除信息,而不是简单地在其上面绘制黑盒子)。我想以编程方式使用此功能。要使用GUI进行编辑,请选择Mark for Redaction Tool,将其绘制到要编辑的文本上,然后选择Apply Redactions。
有没有办法通过AppleScript或其他方式以编程方式执行此操作?
我知道要编辑的文本的(X,y)位置。
谢谢!
答案 0 :(得分:4)
为了正确编辑PDF,您需要更改内容流。这很难。
如果您可以找到绘制要删除的文本的内容流部分,那么就在那里。
另一半正在弄清楚如何更改内容流,以便您不会修改文档的其余部分。如果下一个文本绘制操作符由“tm”命令(设置文本矩阵,它绝对定位下一段文本)继续,则很容易。如果不是......你必须计算你要替换的文本的确切宽度(几个不同的PDF库可以做到这一点),并改变绘图命令以跳过这么多东西。
例如:
BT /F1 10 Tf 1 0 0 1 30 720 Tm (Here's some text, and you only want to REDACT that upper case "redact" over there)Tj * (This text is positioned relative to the previous line)Tj 1 0 0 1 30 650 Tm (This text is positioned absolutely, starting at 30, 650)Tj
因此,您必须将第(...)Tj
行划分为(Here's some text, and you only want to)Tj
,N 0 Td
和(that upper case "redact" over there)Tj
...其中'N'正确调整位置以下文字绘图操作,使其完全落在同一点。因此,您需要使用字体资源/ F1(无论结果是什么)知道“REDACT”的精确宽度,大小为10磅。
为了让您的生活更精彩,您还必须担心语言错误。因此,您可以提供与文本内联的小间距调整:
(这取自PDF规范中绘制的第一个文本)
[(Adobe Sys)5(t)1(ems Inc)5(orporated)5( 20)5(08 \226 All rights)5( reser)-9(ved)]TJ
要正确编辑“已合并”,您需要确定它已被分割为两个字符串,并调整其后面的字符串的位置,使其完全相同。
字符串可以是<DEADBEEF>
十六进制值,而不是(plain old ascii)
。
明白了吗?我没有涵盖这里的所有可能性,只有最常见的可能性。
就像我说的:这很难。
有一个名为Appligent Redax的acrobat插件(没有连接)可以让你绘制注释(或通过模板,正则表达式等生成它们),然后运行它们的代码来处理编辑。应该可以以编程方式创建他们的注释,甚至可能激活他们的插件:文档中的 JS可以运行菜单项。
答案 1 :(得分:2)
这是一个介绍您需要做的事情的网页。正如其他人所提到的,你必须在Javascript中这样做,因为这就是Acrobat的本机脚本。
http://acrobatusers.com/tutorials/2008/07/auto_redaction_with_javascript
虽然我经常使用Acrobat,但令人惊讶的是我从未需要编写脚本。我检查了它的字典,看起来你必须编写Javascript文件,保存它然后用Applescript打开它,如果你想做的话(比如作为服务)。
tell application "Adobe Acrobat Professional"
do script "this.info.title;"
end tell
这是Adobe的Acrobat文档Javascript
答案 2 :(得分:1)
在Adobe Acrobat中,您可以通过使用可在许多不同事件上调用的ActionScript来实现此目的。
如果您希望在单独的应用程序中执行此操作,可以在各种平台中使用许多不同的工具来创建和操作PDF文档,尽管我还没有找到功能丰富的开源库,甚至可以来接近其中一些产品。
http://www.aspose.com/categories/.net-components/aspose.pdf-for-.net/default.aspx
http://www.aspose.com/categories/java-components/aspose.pdf-for-java/default.aspx
iText是我个人的最爱,值得每一分钱。
答案 3 :(得分:1)
您可以使用 GroupDocs.Redaction for .NET 来以编程方式编辑PDF文档中的文本。您可以对文本执行准确的词组区分大小写和正则表达式。这是执行准确的词组编辑的方法。
using (Document doc = Redactor.Load("D:\\candy.pdf"))
{
doc.RedactWith(new ExactPhraseRedaction("candy", new ReplacementOptions("[redacted]")));
// Save the document to "*_Redacted.*" file.
doc.Save(new SaveOptions() { AddSuffix = true, RasterizeToPDF = false });
}
披露:我是GroupDocs的开发人员布道者。