本准则非常完美。但唯一的问题是我想要复制链接,我想更改链接的属性以继承缩放。
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..");
}
}
答案 0 :(得分:1)
请查看ChangeZoomXYZDestination示例。您很快就会发现您的指控&#34;本规范是完美的&#34;是错的。正如我在评论中已经指出的那样,您不应该使用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
类型的所有链接的缩放系数将为零。