PDFBox: преобразование документа в PDDocument


Я создал документ с iText, и я хотел бы преобразовать этот документ (который сохраняется как PDF-файл) в изображение. Для этого я использую PDFBox, который хочет получить PDDocument в качестве входных данных. Я использую следующий код:

@SuppressWarnings("unchecked")
public static Image convertPDFtoImage(String filename) {

    Image convertedImage = null;

    try {

        File sourceFile = new File(filename);
        if (sourceFile.exists()) {

            PDDocument document = PDDocument.load(filename);
            List<PDPage> list = document.getDocumentCatalog().getAllPages();
            PDPage page = list.get(0);

            BufferedImage image = page.convertToImage();

            //Part where image gets scaled to a smaller one
            int width = image.getWidth()*2/3;
            int height = image.getHeight()*2/3;
            BufferedImage scaledImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
            Graphics2D graphics2D = scaledImage.createGraphics();
            graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            graphics2D.drawImage(image, 0, 0, width, height, null);
            graphics2D.dispose();

            convertedImage = SwingFXUtils.toFXImage(scaledImage, null);

            document.close();

        } else {
            System.err.println(sourceFile.getName() +" File not exists");
        }

    } 
    catch (Exception e) {
        e.printStackTrace();
    }

    return convertedImage;
}

В данный момент я загружаю документ из сохраненного файла. Но я хотел бы выполнить это внутренне из Java.

Итак, мой вопрос: как я могу преобразовать документ в PDDocument?

Любая помощь очень ценится!

1 2

1 ответ:

Что вы можете сделать, так это сохранить файл itext в ByteArrayOutputStream, преобразовать его в ByteArrayInputStream.

Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter writer = PdfWriter.getInstance(document, baos);
document.open();
document.add(new Paragraph("Hello World!"));
document.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
PDDocument document = PDDocument.load(bais);

Конечно, файл не должен быть слишком большим, иначе у вас будут проблемы с памятью.