pdfbox将pdf文件打开到新的浏览器选项卡中

vu8f3i0k  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(455)

我使用的是pdfbox library 2.0版本。我需要在新的浏览器选项卡(即打印视图)中打开pdf。
好像我们正在从itext迁移到pdfbox,下面是itext的现有代码。
有了下面的代码,就有pdfaction类来实现了。它是,

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();
        }

我也尝试了以下参考,但找不到 print() pddocument类型的方法。
参考链接
请用这个指引我。
这是在“浏览器”选项卡中显示文件时的外观:

92dk7w1h

92dk7w1h1#

这段代码再现了文件的内容,即文档目录中名称字典中javascript项的名称树中的javascript操作。()打开文档时,将执行此名称树中的所有操作,定义javascript函数以供文档中的其他脚本使用“-pdf规范)可能有一种更简单的方法来执行此操作,例如使用openaction。

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);

相关问题