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

vy3*_*y32 6 pdf applescript redaction

Adobe Acrobat可以编辑PDF文件(即,实际上删除信息,而不是简单地在其顶部绘制黑框)。我想以编程方式使用此功能。要使用GUI进行编辑,请选择“标记为编辑工具”,将其绘制在要编辑的文本上,然后应用“应用编辑”。

是否可以通过AppleScript或其他方式以编程方式执行此操作?

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

谢谢!

Mar*_*rer 5

为了正确编辑 PDF,您需要更改内容流。这是非常困难的。

如果您可以找到绘制要删除的文本的内容流部分,那么您就成功了。

另一半是弄清楚如何更改内容流,这样您就不会修改文档的其余部分。如果下一个文本绘制操作符由“tm”命令进行(设置文本矩阵,它绝对定位下一段文本),这很容易。如果没有……您必须计算要替换的文本的确切宽度(几个不同的 PDF 库可以做到这一点),并更改绘图命令以跳过那么多内容。

例如:

BT
/F1 10 Tf
1 0 0 1 30 720 吨
(这里有一些文字,你只想编辑那边的大写“编辑”)Tj
*
(此文本相对于上一行定位)Tj
1 0 0 1 30 650 吨
(本文绝对定位,从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 可以运行菜单项。

  • 我不推荐 N 0 Td,因为 Td 运算符具有更改当前行的起始位置的副作用,因此像 T* 这样的运算符将不再正常运行(我是根据经验说的)。实现文本编辑的正确方法是“[-N]TJ”,而不是 N 0 Td。否则你是对的,这是很难做到的。对于 Type0 字体,文本甚至无法被人类阅读,因为使用了字形 ID,这不是一种有意义的编码。如果幸运的话,可以使用 ToUnicode CMap 来解码文本内容。在其他情况下,逻辑结构信息可能会有所帮助。 (2认同)

小智 2

您可以使用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 }); 
} 
Run Code Online (Sandbox Code Playgroud)

披露:我在 GroupDocs 担任开发人员传播者。