如何使用pdfbox中的PDActionRemoteGoTo类将/ D [0 / Fit]命令添加到pdf?

时间:2017-10-30 09:00:08

标签: pdf hyperlink pdfbox

我已经实现了使用pdfbox在pdf中添加指向文件的链接的功能。以下是我正在使用的代码:

 PDAnnotationLink txtLink = new PDAnnotationLink();
 PDActionRemoteGoTo remoteGoto = new PDActionRemoteGoTo();
 PDComplexFileSpecification fileDesc = new PDComplexFileSpecification();
 file.setExecutable(true);
 fileDesc.setFile(System.IO.Path.GetFileName(filePath));
 fileDesc.setFileUnicode(System.IO.Path.GetFileName(filePath));
 fileDesc.setFileDescription("");
 remoteGoto.setOpenInNewWindow(true);
 remoteGoto.setFile(fileDesc);
 txtLink.setAction(remoteGoto);
 txtLink.setRectangle(rect);
 page.getAnnotations().add(txtLink); 

生成的链接在基于Windows的pdf编辑器中工作,但不适用于ios的pdfviewer。使用上述代码以pdf格式输入的命令是:

12 0 obj
<<
/Type /Annot
/Subtype /Link
/A 17 0 R
/Rect [1578.599 316.56006 1600.6244 326.62427]
>>
endobj
17 0 obj
<<
/S /GoToR
/NewWindow true
/F 20 0 R
>>
endobj
20 0 obj
<<
/Type /Filespec
/F (A201NORTHSOUTHSITEELEVATIONS.pdf)
/UF (A201NORTHSOUTHSITEELEVATIONS.pdf)
/Desc ()
>>
endobj

如果我使用记事本手动将/ D [0 / Fit]命令添加到/ S / GoToR,则链接有效。 D =那么如何使用pdfbox库添加它。

1 个答案:

答案 0 :(得分:0)

这样做:

PDPageDestination dest = new PDPageFitDestination();
dest.setPageNumber(0);
remoteGoto.setD(dest.getCOSObject());

或者,只需创建COSArray并添加0和COSName.getPDFName("Fit"),然后将其传递给setD()