Я создал документ с iText, и я хотел бы преобразовать этот документ (который сохраняется как файл PDF) в изображение. Для этого я использую PDFBox, который хочет использовать PDDocument. Я использую следующий код: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?
Любая помощь очень ценится!
Спасибо за ваш ответ! Теперь я использую это для сохранения PDF-файла с помощью iText: 'PdfWriter writer = PdfWriter.getInstance (документ, новый FileOutputStream (pdfName));'. Могу ли я легко изменить это с помощью вашего ответа, заменив 'new FileOutputStream()' на 'new ByteArrayOutputStream();'? – bashoogzaad
Я пробовал выше, и это сработало, поэтому вы можете обновить приведенный выше ответ! – bashoogzaad
Спасибо :-) Еще одна вещь: масштабирование действительно не нужно. Если вы знаете, что предпочитаете 2/3 рендеринга PDFBox по умолчанию, вы можете использовать меньшие dpi. Пунктиром метода без параметров является 96. Таким образом, 96 * 2/3 = 64. Поэтому сделайте этот вызов с помощью PDFBox: page.convertToImage (BufferedImage.TYPE_INT_RGB, 64); –