Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PDFBox将PDF文件打开到新浏览器选项卡_Java_Pdfbox - Fatal编程技术网

Java PDFBox将PDF文件打开到新浏览器选项卡

Java PDFBox将PDF文件打开到新浏览器选项卡,java,pdfbox,Java,Pdfbox,我正在使用pdfbox库2.0版本。我需要在新浏览器选项卡(即打印视图)中打开PDF。 好像我们正在从iText迁移到PDFBox,下面是使用iText的现有代码 有了下面的代码,就有PDP类实现了同样的功能。是, PdfAction action = new PdfAction(PdfAction.PRINTDIALOG); 要在文档上应用打印Javascript copy.addJavaScript(action); 我需要与PDFBox等效的解决方案 Document

我正在使用pdfbox库2.0版本。我需要在新浏览器选项卡(即打印视图)中打开PDF。
好像我们正在从iText迁移到PDFBox,下面是使用iText的现有代码

有了下面的代码,就有PDP类实现了同样的功能。是,

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();
        }
Document Document=新文档();
试一试{
outputStream=response.getOutputStream();
//步骤2
PdfCopy copy=新的PdfCopy(文档、输出流);
//步骤3
document.open();
//步骤4
PDF阅读器;
int n;
//在Pdf操作中添加打印对话框以打开文件进行预览。
PdAction=新建PdAction(PdAction.PRINTDIALOG);
//循环遍历要连接的文档
迭代器i=mergePdfileList.Iterator();
while(i.hasNext()){
文件f=新文件((字符串)i.next());
is=新文件输入流(f);
读卡器=新的PDF读卡器(is);
n=reader.getNumberOfPages();
对于(int page=0;page
我也尝试了以下引用,但找不到PDDocument类型的
print()
方法。

请用这个指导我

这是文件在“浏览器”选项卡中显示时的外观:

这段代码复制了您的文件,即文档目录中名称字典中JavaScript条目的名称树中的JavaScript操作。(“打开文档时,应执行此名称树中的所有操作,定义供文档中其他脚本使用的JavaScript函数”-)可能有一种更简单的方法,例如

PDActionJavaScript=newpdactionjavascript(“this.print(true);\n”);
PDDocumentCatalog documentCatalog=document.getDocumentCatalog();
PDDocumentNameDictionary name=新的PDDocumentNameDictionary(documentCatalog,new COSDictionary());
PDJavascriptNameTreeNode javascriptNameTreeNode=新的PDJavascriptNameTreeNode();
Map Map=newhashmap();
put(“0000000000000000”,javascript);
setNames(map);
setJavascript(javascriptNameTreeNode);
document.getDocumentCatalog().setNames(名称);

您能否与itext共享您获得的结果PDF?@Tilmanhausher添加了有问题的文件视图。此外,这是该文件的链接:是的,我需要该文件本身。屏幕截图没有“打印”字段,所以我想知道我是否误解了这个问题。顺便说一句:在与iText相关的代码中,您使用了
PdfCopy
,其中
PdfStamper
可以更经济地创建更可靠的结果。谢谢@Tilman Hausherr。这对我有帮助。
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);