itext更改所有超链接的缩放级别以inheritance现有pdf的缩放

我使用以下代码来更改所有超链接的缩放级别以inheritance缩放 ,但无法更改。

可能是我在PdfName.DEST和条件中犯了一些错误,因为第一页的pdf中没有DEST数组(查看屏幕截图)。

for (int count = 0; count < reader.getNumberOfPages(); count++) { PdfDictionary page = reader.getPageN(count+1); PdfArray annots = page.getAsArray(PdfName.ANNOTS); if (annots != null) { for (int i = 0; i < annots.size(); i++) { PdfDictionary annotation = annots.getAsDict(i); if (PdfName.LINK.equals(annotation.getAsName(PdfName.SUBTYPE))) { if(annotation.get(PdfName.A)==null){ continue; } PdfArray d = annotation.getAsArray(PdfName.DEST); if (d != null && d.size() == 5 && PdfName.XYZ.equals(d.getAsName(1))) d.set(4, new PdfNumber(0)); } } } } 

我在第一页到第二页创建了链接,检查了图像中的结构。

在此处输入图像描述

我也尝试使用以下代码…我有调试和检查值每次都是null

 for (int count = 0; count < reader.getNumberOfPages(); count++) { PdfDictionary page = reader.getPageN(count+1); PdfArray annots = page.getAsArray(PdfName.ANNOTS); if (annots != null) { for (int i = 0; i < annots.size(); i++) { PdfDictionary annotation = annots.getAsDict(i); if (PdfName.LINK.equals(annotation.getAsName(PdfName.SUBTYPE))) { PdfArray d = annotation.getAsArray(PdfName.DEST); // d is null every time } } } } 

您添加了一个屏幕截图,可以查看PDF内部。 在此屏幕截图中,您清楚地看到目标是[5 0 R, /FitH, 795] 。 但是,您只更改包含5个值且类型为/XYZ的目标的缩放系数。

  if (d != null && d.size() == 5 && PdfName.XYZ.equals(d.getAsName(1))) d.set(4, new PdfNumber(0)); 

[5 0 R, /FitH, 795]有3个元素(换句话说, d.size() == 5false ),数组中的第一个条目是PdfName.FITH (换句话说, PdfName.XYZ.equals(d.getAsName(1)为false)。

你的问题应该被低估,因为你展示了一件事,然后做了别的事情,然后问我们为什么你没有得到预期的结果。 这就好像有人为你提供汤,你在桌子上看到一把勺子和一把叉子。 尽管你知道汤应该用勺子吃,你拿叉子然后抱怨你不能用叉子吃汤。 那是……奇怪的。

更新在评论中,您抱怨dnull ,但是看着您的屏幕截图,您已经知道d为空。

您遍历页面,然后获得第1页(对象4)的页面字典。 您检查此页面词典中是否有/Annots条目。 有(对象40)。 你循环遍历annots并遇到一个注释字典(对象30或39,屏幕截图的分辨率对我来说太糟糕了)。 您检查/Subtype是否为Link 。 它是。 您检查注释是否有/A条目。 它有。 然后你得到/Dest条目。 没有这样的条目。 因此你得到null 。 目的地在这里找到:

 PdfDictionary action = annotation.get(PdfName.A); if (action != null) { PdfArray d = action.getAsArray(PdfName.D); // now examine and change D } 

请注意,您要求SO社区在您的位置编写您的应用程序。 您获得此解决方案的报酬,但您希望其他人在您的位置上完成您的工作。 此外:您可能没有iText的商业许可证……