2014-02-10 4 views
4

Я не могу понять, как просматривать PDF-страницу с помощью PDFBox и его компонента PDFPagePanel.Как просмотреть PDF-документ с помощью PDFPagePanel PDFBox

Таким образом, кажется, что с помощью PDFBox моих вариантов либо создать список объектов PDPage или объекты PDDocument, я пошел со списком PDPage (в отличие от использования Splitter() объектов PDDocument)

Следующего кода создает объект PDPage с именем тестовой страницы

File PDF_Path = new File("C:\\PDF.PDF"); 
PDDocument inputPDF = PDDocument.load(PDF_Path); 
List<PDPage> allPages = inputPDF.getDocumentCatalog().getAllPages(); 
inputPDF.close(); 
PDPage testPage = (PDPage)allPages.get(0); 

Отсюда я хотел бы создать PDFPagePanel и использовать его метод setPage() поместить PDPage в компонент. Отсюда я хочу добавить компонент в JFrame. Когда я это делаю, я просто вижу пробелы.

JFrame testFrame = new JFrame(); 
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
PDFPagePanel pdfPanel = new PDFPagePanel(); 
pdfPanel.setPage(testPage); 
testFrame.add(pdfPanel); 
testFrame.setBounds(40, 40, pdfPanel.getWidth(), pdfPanel.getHeight()); 
testFrame.setVisible(true); 

Я нашел одно «решения», которое предложить converting the PDF to an image и отображающий его как буферные изображения, и при этом работает он не кажется, что правильный способ сделать это. Неправильно ли я пытаюсь использовать PDFPoxPanPanel PDFBox как средство для отображения PDF?

+0

Вы пытались так рано закрыть PDDocument (inputPDF.close())? Я закрываю PDDocument, когда это делается, а не при использовании PDPage. –

+0

Да, я тоже это попробовал, спасибо за предложение. Я не совсем уверен, почему я поставил эту линию там, так или иначе, у меня было это внизу, когда я скопировал какой-то код. На данный момент я просто отправил электронное письмо в список рассылки PDFBox и рассмотрю другие доступные варианты. Похоже, что у меня не должно быть проблем с использованием других инструментов, таких как iText или IcePDF, поскольку весь исходный код переносится на публичное репо на GitHub, но я никогда не занимался каким-либо классом, занимающимся лицензированием и открытием исходный код. –

ответ

3

Когда я прошу прокомментировать вызов inputPDF.close, он работает нормально. Что делать, если вы переместили конец, после того как вы закончите отображение pdf? Что-то вроде этого ...

testFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
testFrame.addWindowListener(new WindowAdapter() { 

@Override 
public void windowClosing(WindowEvent e) { 
    try { 
     inputPDF.close(); 
     testFrame.setVisible(false); 
    } catch (IOException e1) { 
     // TODO: implement error handling 
     e1.printStackTrace(); 
    } 
} 

}); 

Для записи, я также реализовал зритель PDFBox как BufferedImage завернутый в компоненте, завернутой в JPanel. Затем я смог настроить панель с помощью дополнительных кнопок для изменения страниц, изменения документов, «масштабирования» или изменения размера изображения и т. Д.

+0

Спасибо за это предложение, это отлично работает. Я реализовал ICEpdf, но это была небольшая дополнительная программа, чем то, что мне было нужно. –

Смежные вопросы