PDFBox Открыть файл PDF в новой вкладке браузера

Я использую библиотеку pdfbox версии 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.

Ссылка на ссылку

Пожалуйста, помогите мне с этим.

Вот как выглядит файл при отображении во вкладке браузера:

Можете ли вы поделиться результатом в формате PDF, полученным с помощью itext?

Tilman Hausherr 15.12.2020 10:13

@TilmanHausherr Добавлен рассматриваемый просмотр файла. Кроме того, это ссылка на этот файл: drive.google.com/file/d/1UShCgqx1Kyx40C7v9ehU-KdMFnYxlKWn/…

Bhailu 15.12.2020 10:46

Да, мне нужен сам файл. На снимке экрана нет поля «печать», поэтому мне интересно, неправильно ли я понял вопрос.

Tilman Hausherr 15.12.2020 10:47

В качестве отступления: в вашем коде, связанном с iText, вы используете PdfCopy, где PdfStamper создал бы более точный результат с меньшими затратами.

mkl 15.12.2020 13:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
530
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Этот код воспроизводит то, что есть в вашем файле, действие 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);

Спасибо @Tilman Hausherr. Это помогло мне.

Bhailu 16.12.2020 10:38

Другие вопросы по теме