Adobe Acrobat 能够编辑 PDF 文件(即实际删除信息,而不是简单地在其上绘制黑框)。我想以编程方式使用此功能。要使用 GUI 进行密文编辑,请选择标记密文工具,将其绘制在要密文的文本上,然后应用密文。
是否有任何方法可以通过 AppleScript 或其他方式以编程方式执行此操作?
我知道要编辑的文本的 (X,y) 位置。
谢谢!
最佳答案
为了正确编辑 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
要正确编辑“Incorporated”,您需要确定它已被拆分为两个字符串,并调整其后面的字符串的位置,使其位于完全相同的位置。
字符串可以是 <DEADBEEF>
十六进制值而不是 (plain old ascii)
。
明白了吗?我在这里并没有涵盖所有的可能性,只是最常见的。
就像我说的:这非常困难。
<小时/>有一个名为 Appligent Redax 的 acrobat 插件(无连接),它允许您绘制注释(或通过模板、正则表达式等生成注释),然后运行其代码来处理密文。应该可以以编程方式创建它们的注释,甚至可能激活它们的插件:文档中的 JS 可以运行菜单项。
关于pdf - 如何以编程方式编辑 PDF 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6044591/