Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用Apple';PDFKit框架_Ios_Xcode_Macos_Pdf - Fatal编程技术网

Ios 使用Apple';PDFKit框架

Ios 使用Apple';PDFKit框架,ios,xcode,macos,pdf,Ios,Xcode,Macos,Pdf,我知道,在苹果的PDFKit中,我可以得到“string”,它返回一个NSString对象,表示页面上的文本。 有没有办法更改PDF中的文本?如果没有,您建议我如何着手研究如何编辑PDF中的文本?谢谢大家! 要了解您真正的问题,您需要更多地了解PDF的工作原理。 首先,PDF更像是(绘图、渲染)指令的容器,而不是内容的容器 PDF有两种风格。有标记和无标记。带标签的PDF本质上是一个普通的PDF文档+一个树状数据结构,它告诉您文档的哪些部分构成了哪些逻辑元素 与包含逻辑结构的HTML类似,标记

我知道,在苹果的PDFKit中,我可以得到“string”,它返回一个NSString对象,表示页面上的文本。


有没有办法更改PDF中的文本?如果没有,您建议我如何着手研究如何编辑PDF中的文本?谢谢大家!

要了解您真正的问题,您需要更多地了解PDF的工作原理。 首先,PDF更像是(绘图、渲染)指令的容器,而不是内容的容器

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

与包含逻辑结构的HTML类似,标记标记段落、列表中的项目符号、表中的行等

如果您有一个未标记的文档,基本上只剩下简单的呈现说明

转到位置50,50
将字体设置为Arial
将字体颜色设置为0,颜色空间设置为灰度
为“H”绘制图示符
转到位置60、50
为“e”绘制图示符

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

拥有对象意味着你可以重复使用某些东西。就像在公司信笺的每一页上画一幅图像。或类似“使用对象456中的字体”的说明

为了能够处理这些对象,每个对象都有一个数字。文件中对象、对象编号和字节偏移量的映射存储在文档的后面。这称为外部参照表

外部参照
152 42
00000001600000N
000000 1240 00000n
000000 21330万n
000000 2296 00000n
000000 2344 00000n
000000 2380 00000n
000000 2551 00000 n

现在,回到你的问题上来。 假设你把一个单词“狗”改为一个单词“猫”

您会遇到几个问题:

  • 文档中的每个字节偏移量突然出错,因为“cats”包含4个字节,“dog”包含3个字节
  • 找不到对象,所有指令都出错
  • 如果在任何一点上,替换导致文本偏离对齐太远,则需要再次执行布局
为什么布局会有这样的问题?

还记得我之前说过的PDF只包含渲染说明吗。从原始指令中重建段落边界、表格、列表等内容非常困难

特别是,如果您想对其他脚本执行此操作,而不仅仅是拉丁脚本(想象一下希伯来语或阿拉伯语)。或者,如果您的页面布局是非标准的(比如一篇科学文章,它以列而不是占据整个页面的行的形式出现)

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

Swift 3和Objective C