gpt4 book ai didi

objective-c - CGPDFScannerScan 不触发回调函数

转载 作者:行者123 更新时间:2023-11-29 11:12:03 26 4
gpt4 key购买 nike

我使用 Quartz 解析 pdf 文件。

除了一个文件外,一切正常。回调函数根本不是调用。

我的运算符表已创建,我使用 CGPDFOperatorTableSetCallback 将运算符添加到其中。一切正常,只是没有调用回调。

你知道是什么导致了这种行为吗?

最佳答案

页面内容是一个大窗体 XObject。 Form XObjects 是自包含的图形对象,它们使用类似于页面的内容流。
您需要执行以下操作:在扫描的运算符列表中包含“Do”运算符。遇到它时,它的操作数是 XObject 的符号名称。从页面字典中获取“资源”字典。从“资源”字典中获取“XObject”字典。使用与“Do”运算符一起使用的符号名称,从“XObject”字典中获取您的 xobject。从 xobject 中获取“子类型”键的值。如果它是“图像”,则忽略 xobject,因为它是图像。如果它是“表单”,那么您就有一个表单 XObject。从 xobject 中获取流并像扫描页面内容流一样扫描它。您可以重复使用相同的扫描器类,您只需要保留上下文即可知道您正在扫描的对象。表单 XObjects 可以使用其他表单 XObjects,它们位于父表单 XObject 的“资源”字典中。
您的页面字典如下所示:

<<
/ArtBox[0.0 0.0 768.0 7066.0]
/BleedBox[0.0 0.0 768.0 7066.0]
/Contents 29 0 R
/CropBox[0.0 0.0 768.0 7066.0]
/Group 62 0 R
/MediaBox[0.0 0.0 768.0 7066.0]
/Parent 23 0 R
/Resources
<<
/ExtGState<</GS0 30 0 R>>
/XObject<</Fm0 61 0 R>>
>>
/Rotate 0
/TrimBox[0.0 0.0 768.0 7066.0]
/Type/Page
>>

“Fm0”是页面内容流中使用的表单 XObject 的名称,是“Do”运算符的操作数。它的资源字典如下所示:

/Resources
<<
/ColorSpace<</CS0 32 0 R>>
/ExtGState<</GS0 34 0 R/GS1 30 0 R>>
/Font<</T1_0 38 0 R/T1_1 40 0 R>>
/ProcSet[/PDF/Text]
/XObject<</Fm0 45 0 R/Fm1 48 0 R/Fm2 51 0 R/Fm3 54 0 R/Fm4 57 0 R/Fm5 60 0 R>>
>>

如您所见,它使用了几种其他形式的 XObject。

关于objective-c - CGPDFScannerScan 不触发回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11083261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com