您添加了一个屏幕截图,以便您查看 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() == 5
is false
)并且数组中的第一个条目是PdfName.FITH
(换句话说PdfName.XYZ.equals(d.getAsName(1)
是假的)。
你的问题应该被否决,因为你展示了一件事,然后做了另一件事,然后问我们为什么你没有得到预期的结果。就好像有人给你端汤,你看到桌子上有一把勺子和一把叉子。尽管你知道喝汤应该用勺子,但你却拿起叉子,然后抱怨你不能用叉子喝汤。这……很奇怪。
Update在评论中,你抱怨说d
is null
,但是看看你的屏幕截图,你已经知道了d
一片空白。
循环页面并获得第 1 页(对象 4)的页面字典。你检查是否有一个/Annots
该页词典中的条目。有(对象40)。你循环注释,你会遇到一个注释字典(对象 30 或 39,屏幕截图的分辨率太差了,我看不清)。您检查是否/Subtype
is 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 的商业许可证......