如何从iText 7中的PDF格式的轮廓/书签访问矩形,拟合类型,缩放,页码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从iText 7中的PDF格式的轮廓/书签访问矩形,拟合类型,缩放,页码相关的知识,希望对你有一定的参考价值。

我正在使用iText 7。

我试图使用iText访问PDF书签的属性(矩形,适合类型,缩放,页码)。

我遵循这个层次结构 - > PdfDocument - > GetOutlines(true) - >这给出了每个书签/大纲。我已遍历每个书签但我无法访问应包含矩形,适合类型,缩放和页码的视图目标属性。

我知道在创建新书签时我使用过PdfExplicitDestination.CreateXYZ但我无法从pdf文档访问视图目的地。

答案

您可以从PdfDestination检索的数据主要是非常原始的PDF。因此,目标不是您想要的格式,而是名称,字节字符串或数组。前两个选项是命名目标,即您必须在Dests名称树中查找目标数组。

IDictionary<String, PdfObject> names = document.GetCatalog().GetNameTree(PdfName.Dests).GetNames();

[...]
if ([... some PdfOutline instance ...].GetDestination() is PdfDestination destination)
{
    PdfObject destObject = destination.GetPdfObject();
    if (destObject is PdfString str)
    {
        destObject = names[str.ToUnicodeString()];
    }
    else if (destObject is PdfName nam)
    {
        destObject = names[nam.GetValue()];
    }

现在你应该有一个PdfArray并可以检查它的值。页面字典是其中的第一个对象,所以

    if (destObject is PdfArray arr)
    {
        if (arr.Get(0) is PdfDictionary pageDict)
        {
            int pageNumber = document.GetPageNumber(pageDict);
            [...]
        }
        [... inspect remaining array entries ...]
    }
}

在检查剩余的数组条目时,实际上有许多可能的形式要考虑:

[page / XYZ left top zoom]显示页面指定的页面,坐标(左,上)位于窗口的左上角,页面内容通过因子缩放放大。任何参数left,top或zoom的空值指定该参数的当前值应保持不变。缩放值0具有与空值相同的含义。

[page / Fit]显示页面指定的页面,其内容放大到足以在窗口内水平和垂直放置整个页面。如果所需的水平和垂直放大系数不同,请使用两者中较小的一个,将窗口中的页面居中放在另一个维度中。

[page / FitH top]显示页面指定的页面,垂直坐标顶部位于窗口的上边缘,页面内容放大到足以适合窗口内页面的整个宽度。 top的空值指定该参数的当前值应保持不变。

[page / fitV left]显示页面指定的页面,水平坐标位于窗口的左边缘,页面内容放大到足以适合窗口内页面的整个高度。 left的null值指定该参数的当前值应保持不变。

[page / FitR左下方右上方]显示页面指定的页面,其内容放大到足以完全适合窗口左,底,右和顶部指定的矩形,水平和垂直均在窗口内。如果所需的水平和垂直放大系数不同,请使用两者中较小的一个,将窗口中的矩形居中放在另一个维度中。

[page / FitB](PDF 1.1)显示页面指定的页面,其内容放大到足以完全在窗口内水平和垂直方向放置其边界框。如果所需的水平和垂直放大系数不同,请使用两者中较小的一个,将窗口中的边界框居中放在另一个维度中。

[page / FitBH top](PDF 1.1)显示页面指定的页面,垂直坐标顶部位于窗口的上边缘,页面内容放大到足以适合其边界框内的整个宽度。窗口。 top的空值指定该参数的当前值应保持不变。

[page / FitBV left](PDF 1.1)显示页面指定的页面,水平坐标位于窗口的左边缘,页面内容放大到足以适合其边界框内的整个高度。窗口。 left的null值指定该参数的当前值应保持不变。

(ISO 32000-2,表149 - 目标语法)

以上是关于如何从iText 7中的PDF格式的轮廓/书签访问矩形,拟合类型,缩放,页码的主要内容,如果未能解决你的问题,请参考以下文章

itext7 pdf与书签合并

使用 iText 库在 PDF 中生成分层书签

如何使用 iText 7 使下划线文本可访问

如何使用 iText 7 删除受密码保护的 pdf 中的密码

iText 7 从 Asp.Net WebApi 返回 Pdf

如何使用 iText 获取 Pdf 表单字段的自定义格式脚本?