使用Apple的PDFKit框架更改PDF格式的文本

时间:2018-01-14 01:27:50

标签: ios xcode macos pdf

我知道 Apple的PDFKit 我可以获得' string'返回表示页面上文本的NSString对象。 https://developer.apple.com/documentation/pdfkit/pdfpage?language=objc

有没有办法更改PDF中的文字?如果没有,您如何建议我去了解如何编辑PDF中的文本?谢谢!

1 个答案:

答案 0 :(得分:6)

要了解您的真实问题,您需要了解有关PDF如何工作的更多信息。 首先,PDF更像是(绘图,渲染)指令的容器而不是内容容器。

有两种PDF版本。标记和未标记。标记PDF本质上是一个普通的PDF文档+树状数据结构,它告诉您文档的哪些部分构成了哪些逻辑元素。

与包含逻辑结构的HTML相比,标签标记段落,列表中的项目符号,表格中的行等等。

如果你有一个未标记的文档,你基本上只剩下裸露的渲染指令

  

转到位置50,50   将字体设置为Arial
  将字体颜色设置为0,将颜色空间设置为灰色   绘制'H'的字形   去位置60,50   绘制'e'的字形

这样的说明被收集到对象中。对象可以收集到流中。流可以被压缩。指令和对象不需要以任何逻辑顺序出现。

拥有对象意味着您可以重复使用某些东西。就像在公司信笺的每一页上绘制图像一样。或者像'使用对象456中的字体'这样的说明。

为了能够处理这些对象,每个对象都有一个数字。对象的映射,它们的数量以及文件中的字节偏移量都存储在文档的后面。这称为XREF表。

  

外部参照
  152 42
  0000000016 00000 n
  0000001240 00000 n
  0000002133 00000 n
  0000002296 00000 n
  0000002344 00000 n
  0000002380 00000 n
  0000002551 00000 n

现在,回到你的问题。 假设您通过单词'cats'更改单词'dog'。

你遇到了几个问题:

  • 文档中的每个字节偏移突然错误,因为'cats'包含4个字节,'dog'包含3个字节。
  • 找不到任何对象,所有说明都出错了
  • 如果在任何时候您的替换导致文本偏离对齐太远,则需要再次执行布局。

为什么布局会出现问题?

请记住我之前所说的仅包含渲染说明的PDF。从原始指令重构诸如段落边界或表格,列表等内容是非常困难的。

特别是如果你想为其他脚本而不仅仅是拉丁文脚本(想象希伯来语或阿拉伯语)。或者,如果您的页面布局是非标准的(如科学文章,它出现在列而不是占据整个页面的行。)

结构识别实际上是正在进行的研究的主题。