我需要使用iText
java代码
public void BookmarkZoomLevelChange(List<HashMap<String, Object>> list,
PdfReader reader) {
for (HashMap<String, Object> entry : list) {
for (String key : entry.keySet()) {
// System.out.println(key);
if ("Kids".equals(key)) {
Object o = entry.get(key);
BookmarkZoomLevelChange((List<HashMap<String, Object>>) o,
reader);
} else if ("Page".equals(key)) {
String dest = (String) entry.get(key);
// System.out.println(dest);
if (dest.contains("FitR")) {
String cord[] = dest.substring(dest.indexOf("R"))
.split(" ");
entry.put("Page", dest.replaceAll("FitR", "XYZ "
+ cord[1] + " " + cord[4] + " 0"));
} else if (dest.contains("XYZ")) {
String cord[] = dest.substring(dest.indexOf("XYZ"))
.split(" ");
entry.put("Page", dest.replaceAll("XYZ", "XYZ "
+ cord[1] + " " + cord[2] + " 0"));
}
}
}
}
}
使用上面的代码我没有得到("Page".equals(key))
。那么,如何将命名目的地转换为页码?
答案 0 :(得分:1)
请查看您正在使用的版本的API文档,更具体地说,请参阅PdfReader
类中提供的方法。您将找到描述如下的consolidateNamedDestinations()
方法:
用实际目的地替换所有本地命名链接。
您已命名目的地。你不喜欢这个。您希望命名目标替换为指向特定页面上特定位置的显式目标。这正是consolidateNamedDestinations()
方法的意义所在。
试试这个:
PdfReader reader = new PdfReader(src);
reader.consolidateNamedDestinations();
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
通常情况下,dest
PDF中不应有指向目的地的链接。