更改书签操作命名目的地到页码

时间:2017-11-16 05:51:00

标签: java itext

我需要使用iText java代码

将书签操作属性命名目的地更改为现有pdf文件的页码

enter image description here

   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))。那么,如何将命名目的地转换为页码?

1 个答案:

答案 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中不应有指向目的地的链接。