PDFBox 在新的浏览器选项卡中打开 PDF 文件
PDFBox Open PDF file into new browser tab
我正在使用 pdfbox 库 2.0 版本。我需要在新的浏览器选项卡中打开 PDF,即打印视图。
就好像我们正在从 iText 迁移到 PDFBox 下面是 iText 的现有代码。
使用下面的代码,有 PDFAction class 来实现相同的功能。它是,
PdfAction action = new PdfAction(PdfAction.PRINTDIALOG);
并在文档上应用打印 Javascript,
copy.addJavaScript(action);
我需要与 PDFBox 等效的解决方案。
Document document = new Document();
try{
outputStream=response.getOutputStream();
// step 2
PdfCopy copy = new PdfCopy(document, outputStream);
// step 3
document.open();
// step 4
PdfReader reader;
int n;
//add print dialog in Pdf Action to open file for preview.
PdfAction action = new PdfAction(PdfAction.PRINTDIALOG);
// loop over the documents you want to concatenate
Iterator i=mergepdfFileList.iterator();
while(i.hasNext()){
File f =new File((String)i.next());
is=new FileInputStream(f);
reader=new PdfReader(is);
n = reader.getNumberOfPages();
for (int page = 0; page < n; ) {
copy.addPage(copy.getImportedPage(reader, ++page));
}
copy.freeReader(reader);
reader.close();
is.close();
}
copy.addJavaScript(action);
// step 5
document.close();
}catch(IOException io){
throw io;
}catch(DocumentException e){
throw e;
}catch(Exception e){
throw e;
}finally{
outputStream.close();
}
我也尝试了下面的参考,但找不到 PDDocument 类型的 print()
方法。
Reference Link
请指导我。
这是文件在浏览器选项卡中显示时的样子:
此代码重现了您的文件所具有的内容,即文档目录中名称词典 JavaScript 条目中名称树中的 JavaScript 操作。 (“打开文档时,将执行此名称树中的所有操作,定义 JavaScript 函数以供文档中的其他脚本使用” - PDF specification) There's probably an easier way to do this, e.g. .
PDActionJavaScript javascript = new PDActionJavaScript("this.print(true);\n");
PDDocumentCatalog documentCatalog = document.getDocumentCatalog();
PDDocumentNameDictionary names = new PDDocumentNameDictionary(documentCatalog, new COSDictionary());
PDJavascriptNameTreeNode javascriptNameTreeNode = new PDJavascriptNameTreeNode();
Map<String, PDActionJavaScript> map = new HashMap<>();
map.put("0000000000000000", javascript);
javascriptNameTreeNode.setNames(map);
names.setJavascript(javascriptNameTreeNode);
document.getDocumentCatalog().setNames(names);
我正在使用 pdfbox 库 2.0 版本。我需要在新的浏览器选项卡中打开 PDF,即打印视图。
就好像我们正在从 iText 迁移到 PDFBox 下面是 iText 的现有代码。
使用下面的代码,有 PDFAction class 来实现相同的功能。它是,
PdfAction action = new PdfAction(PdfAction.PRINTDIALOG);
并在文档上应用打印 Javascript,
copy.addJavaScript(action);
我需要与 PDFBox 等效的解决方案。
Document document = new Document();
try{
outputStream=response.getOutputStream();
// step 2
PdfCopy copy = new PdfCopy(document, outputStream);
// step 3
document.open();
// step 4
PdfReader reader;
int n;
//add print dialog in Pdf Action to open file for preview.
PdfAction action = new PdfAction(PdfAction.PRINTDIALOG);
// loop over the documents you want to concatenate
Iterator i=mergepdfFileList.iterator();
while(i.hasNext()){
File f =new File((String)i.next());
is=new FileInputStream(f);
reader=new PdfReader(is);
n = reader.getNumberOfPages();
for (int page = 0; page < n; ) {
copy.addPage(copy.getImportedPage(reader, ++page));
}
copy.freeReader(reader);
reader.close();
is.close();
}
copy.addJavaScript(action);
// step 5
document.close();
}catch(IOException io){
throw io;
}catch(DocumentException e){
throw e;
}catch(Exception e){
throw e;
}finally{
outputStream.close();
}
我也尝试了下面的参考,但找不到 PDDocument 类型的 print()
方法。
Reference Link
请指导我。
这是文件在浏览器选项卡中显示时的样子:
此代码重现了您的文件所具有的内容,即文档目录中名称词典 JavaScript 条目中名称树中的 JavaScript 操作。 (“打开文档时,将执行此名称树中的所有操作,定义 JavaScript 函数以供文档中的其他脚本使用” - PDF specification) There's probably an easier way to do this, e.g.
PDActionJavaScript javascript = new PDActionJavaScript("this.print(true);\n");
PDDocumentCatalog documentCatalog = document.getDocumentCatalog();
PDDocumentNameDictionary names = new PDDocumentNameDictionary(documentCatalog, new COSDictionary());
PDJavascriptNameTreeNode javascriptNameTreeNode = new PDJavascriptNameTreeNode();
Map<String, PDActionJavaScript> map = new HashMap<>();
map.put("0000000000000000", javascript);
javascriptNameTreeNode.setNames(map);
names.setJavascript(javascriptNameTreeNode);
document.getDocumentCatalog().setNames(names);