0

这段代码是完美的。但唯一的问题是我想复制链接并且我想更改链接的属性以继承缩放。

public class links {
public static void main(String[] args) throws DocumentException, IOException,FileNotFoundException {

    String src = "E:/bookmark.pdf";
    String destination = "E:/links.pdf";

    PdfReader reader=new PdfReader(src);
    reader.consolidateNamedDestinations();

    Document doc=new Document();

    PdfCopy pdfCopy = new PdfCopy(doc,new FileOutputStream(destination));

    doc.open();

     int n = reader.getNumberOfPages();
     PdfDestination d = new PdfDestination(PdfDestination.XYZ,-1,-1,0.0F) ;
     PdfAction act = PdfAction.gotoLocalPage(1, d, pdfCopy);
     for (int i=1; i <= n ;i++)
    {

        PdfDictionary pageDic = reader.getPageN(i);
        PdfArray arrayann = pageDic.getAsArray(PdfName.ANNOTS);  
        if (arrayann != null)
        {
                //reader.addPdfObject(pageDic.get(PdfName.ANNOTS));
            PdfArray annot=(PdfArray)PdfReader.getPdfObject(pageDic.get(PdfName.ANNOTS)); 
            ArrayList<PdfObject> arrAnnot = new ArrayList<PdfObject>();
            arrAnnot = annot.getArrayList();

            for (int j = 0; j < arrAnnot.size(); j++)
            {
                PdfDictionary annots = (PdfDictionary)PdfReader.getPdfObject(arrAnnot.get(j));
                if (PdfName.LINK.equals(annots.get(PdfName.SUBTYPE)))
                {
                    annots.remove(PdfName.DEST);
                    annots.put(PdfName.DEST,act);

                }
            }
        }
        pdfCopy.addPage(pdfCopy.getImportedPage(reader, i));
        pdfCopy.freeReader(reader);
  }
     reader.close();
    pdfCopy.close(); 
    doc.close();
    System.out.println("The Pdf is Created..");
}

}
4

1 回答 1

1

请查看ChangeZoomXYZDestination示例。您很快就会发现“本准则完美”的说法是错误的。正如我在评论中已经指出的那样,你不应该使用PdfCopy,你应该使用PdfStamper. 此外,您不应该替换目的地,而应该替换缩放因子。

以第 11 页上的文件xyz_destination.pdf 为例,有 10 个链接到前 10 个页面,每个链接都有一个/XYZ指向具有特定缩放因子的特定页面的目标。您可以在以下屏幕截图中看到这一点:

在此处输入图像描述

在第一个注释中,缩放系数为 1,在第二个注释中为 2,依此类推。

如果要将这些链接的缩放因子更改为 0,则需要循环注释(您已经这样做了),但不是用/DEST操作错误地替换,而是需要更改缩放因子的值在/DEST数组中:

PdfArray annots = page.getAsArray(PdfName.ANNOTS); 
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);
        if (d != null && d.size() == 5 && PdfName.XYZ.equals(d.getAsName(1)))
            d.set(4, new PdfNumber(0));
    }
}

现在您将拥有一个文件,例如xyz_zoom.pdf,其中所有类型链接的缩放系数都/XYZ将为零。

于 2014-04-04T14:59:20.387 回答