您如何以编程方式编辑PDF文件?

时间:2011-05-18 12:22:54

标签: pdf applescript redaction

Adob​​e Acrobat能够编辑PDF文件(即实际删除信息,而不是简单地在其上面绘制黑盒子)。我想以编程方式使用此功能。要使用GUI进行编辑,请选择Mark for Redaction Tool,将其绘制到要编辑的文本上,然后选择Apply Redactions。

有没有办法通过AppleScript或其他方式以编程方式执行此操作?

我知道要编辑的文本的(X,y)位置。

谢谢!

4 个答案:

答案 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)TjN 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

http://livedocs.adobe.com/acrobat_sdk/9.1/Acrobat9_1_HTMLHelp/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Acrobat9_HTMLHelp&file=JavaScript_SectionPage.70.1.html

答案 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

http://itextpdf.com/

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的开发人员布道者。