有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将名为destination的书签操作更改为页码

我需要使用iTextjava代码将现有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) 个答案

  1. # 1 楼答案

    请查看您正在使用的版本的API文档,更具体地说是PdfReader类中可用的方法。您将发现^{}方法,其描述如下:

    Replaces all the local named links with the actual destinations.

    您已经指定了目的地。你不喜欢这个。您希望将命名的目的地替换为指向特定页面上特定位置的显式目的地。这正是consolidateNamedDestinations()方法的意义所在

    试试这个:

    PdfReader reader = new PdfReader(src);
    reader.consolidateNamedDestinations();
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    stamper.close();
    

    通常,在destPDF中应该不再有指向指定目的地的链接