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

标签 pdf applescript redaction

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/

相关文章:

java - 使用 itext 编辑 pdf 时出现异常

javascript - 使用 Javascript 生成 PDF 和 Excel(客户端)

javascript - 使用 AngularJS 如何检查文件夹中是否存在 PDF 文件?

MacOS 照片 - 使用 applescript 更新关键字及其所在相册的名称

applescript - Xcode 4 Applescript 构建和运行当前目标应用程序

sql - Oracle SQL - 编辑自由文本叙述中除最后四位数字之外的所有不同长度数字的多个出现

python - 使用格式为 PDF/X-1a 的 Python 将 HTML 转换为 PDF

php - 使用 PHP 检查 PDF 页数(在 Linux 中)

objective-c - Xcode cocoa applescript 应用程序中的日期命令存在问题

c# - 如何更改在 Adob​​e Acrobat 中创建的密文注释的密文文本