gpt4 book ai didi

iphone - 如何使用 CGPDF 间接引用页面对象?

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

根据 Adob​​e 的“文档管理 - 可移植文档格式 - 第 1 部分:PDF 1.7” ( Pdf32000_2008.pdf ),第 12.3.2.1 节指出:

A destination defines a particular view of a document, consisting of the following items:

  • The page of the document that shall be displayed

  • The location of the document window on that page

  • The magnification (zoom) factor

示例:

[页面/XYZ左上缩放]

但是在我的代码中

CGPDFArrayGetObject(dArray, 0, &dObj)

是一个CGPDFDictionaryRef

93 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [71 717 190 734]
/Border [16 16 1]
/A << /Type /Action
/S /GoTo
/D [3 0 R /FitR –4 399 199 533]
>>
>>
endobj

如何从 /D [3 0 R/FitR –4 399 199 533] 获取 3 0 R

如何获得对页面对象(如 [page/XYZ left top Zoom] 的页面对象)的间接引用?

这是我的代码:

CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfRef, pageNum);
CGPDFDictionaryRef pageDictionary = CGPDFPageGetDictionary(pdfPage);
CGPDFArrayRef outputArray;
if(CGPDFDictionaryGetArray(pageDictionary, "Annots", &outputArray))
{
int arrayCount = 0;
arrayCount = CGPDFArrayGetCount(outputArray );
if(arrayCount>0)
{
for( int j = 0; j < arrayCount; ++j )
{
CGPDFObjectRef aDictObj;
if(CGPDFArrayGetObject(outputArray, j, &aDictObj))
{
CGPDFDictionaryRef annotDict;
if(CGPDFObjectGetValue(aDictObj, kCGPDFObjectTypeDictionary, &annotDict))
{
CGPDFDictionaryRef aDict;
if(CGPDFDictionaryGetDictionary(annotDict, "A", &aDict))//page 1 returns here
{
CGPDFArrayRef dArray;
if(CGPDFDictionaryGetArray(aDict, "D", &dArray))
{
CGPDFObjectRef dObj;
if(CGPDFArrayGetObject(dArray, 0, &dObj)){
CGPDFDictionaryRef annotDict;
if(CGPDFObjectGetValue(dObj, kCGPDFObjectTypeDictionary, &annotDict))
{

}
}
}
}
}
}
}
}
}
<小时/>

非常感谢您的重播~但是我有一个问题我在哪里可以知道这个对象编号是3?

CGPDFArrayGetObject(dArray, 0, &dObj)

获取CGPDFDictionaryRef,但我没有找到字段为“3 0 R”

还有一个问题,如果我知道是“3 0 R”

在您的 PDF 中搜索 3 0 obj 可以在哪里找到

谢谢您的回复,非常非常感谢...我希望再次得到您的答复!

最佳答案

首先,您引用了 PDF 引用文档第 366 页表 151 中的错误示例,因为它与您的情况不符:

[page /XYZ left top zoom]

与您的情况相符的真实示例是:

[page /FitR left bottom right top]

含义:

Display the page designated by page, with its contents magnified just enough to fit the rectangle specified by the coordinates left, bottom, right, and top entirely within the window both horizontally and vertically. If the required horizontal and vertical magnification factors are different, use the smaller of the two, centering the rectangle within the window in the other dimension.

因为您的案例被引用为:

[3 0 R /FitR –4 399 199 533]

现在,示例中称为 page 的内容在您的情况下变为 3 0 R。后者是对 3 号对象(第 0 代)的引用,您可以通过在 PDF 中搜索 3 0 obj 找到该对象。这是定义对象编号 3 的位置,该对象应该为您的目的地所查找的页面命名。

<小时/>

更新:如果您的真实文档确实包含代码段[3 0 R/FitR –4 399 199 533],那么同一文档还应该包含另一部分它将页面对象(间接引用)定义为 3 0 obj。这部分定义了页面对象,可以这样读:

 3 0 obj
<< /Type /Page
/Parent 11 0 R
/MediaBox [ 0 0 597.6 842.4 ]
/Contents 31 0 R
/Group <<
/Type /Group
/S /Transparency
/CS /DeviceRGB
>>
/Resources 23 0 R
>>
endobj

请注意,该对象如何再次引用其他三个对象:11 0 R31 0 R23 0 R。后两个指向对象 31 和 23,它们保存页面的内容 (31) 和资源 (23),例如字体,由它使用。第一个指向该页面的父对象 (11)。

注释 2:对象的编号不需要像 PDF 文件中出现的对象一样按顺序进行。 (几乎)唯一的条件是编号是唯一的。

关于iphone - 如何使用 CGPDF 间接引用页面对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6293789/

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