[英]How to access rectangles, fit type, zoom, page number from outlines/bookmark of pdf in iText 7
我正在使用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 ...]
}
}
在检查剩余的数组条目时,实际上有多种可能的形式需要考虑:
[ 页面 / XYZ 左上方缩放 ]显示由页面指定的页面 ,坐标( 左,上 )位于窗口的左上角,并且页面内容被缩放系数放大。 left,top或zoom的任何参数的空值都指定该参数的当前值应保持不变。 缩放值0与空值具有相同的含义。
[ page / Fit]显示page指定的页面 ,其内容被放大到足以使整个页面在水平和垂直方向上都适合窗口。 如果所需的水平和垂直放大系数不同,请使用两者中较小的一个,将页面在窗口中的另一个维度上居中。
[ page / FitH top ]显示页面指定的页面 ,其垂直坐标顶部位于窗口的顶部边缘,并且页面的内容被放大到恰好适合窗口在窗口内的整个宽度。 top的空值表示该参数的当前值应保持不变。
[ 页 / FITV 左 ]显示由页指定的页,用定位在窗口的左边缘和放大刚够窗口内适合页面的整个高度的页面的内容的水平坐标左侧 。 left的空值表示该参数的当前值应保持不变。
[ page / FitR 左下右上 ]显示由page指定的页面 ,其内容被放大到足以完全在水平和垂直窗口内适应由左,下,右和上坐标指定的矩形。 如果所需的水平和垂直放大系数不同,请使用两者中较小的一个,将矩形在窗口内的另一个维度上居中。
[ page / FitB] (PDF 1.1)显示page指定的页面 ,其内容被放大到足以使其边框水平和垂直地完全位于窗口内。 如果所需的水平和垂直放大倍数不同,则使用两者中较小的一个,将边界框在另一个尺寸的窗口内居中。
[ 页面 / FitBH 顶部 ] (PDF 1.1)显示页面指定的页面 ,垂直坐标的顶部位于窗口的顶部边缘,页面的内容被放大到恰好适合其边框的整个宽度。窗口。 top的空值表示该参数的当前值应保持不变。
[ 页 / FitBV 左 ](PDF 1.1)显示由页指定的页,与位于该窗口的左边缘的水平坐标左和放大刚好足够的页面的内容中的适合其边界框的整个高度窗口。 left的空值表示该参数的当前值应保持不变。
(ISO 32000-2,表149-目标语法)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.