Я хочу преобразовать PDF в изображение, но мне нужно только одно выходное изображение, которое содержит все изображения и только векторную графику. Я не хочу текст
Подскажите, пожалуйста, как я могу этого добиться с помощью pdfbox?
Я пробовал код ниже:
try {
PDDocument document = PDDocument.load(new File(inputFilePath));
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int page = 0; page < document.getNumberOfPages(); ++page)
{
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
ImageIOUtil.writeImage(bim, outputFilePath + "-" + (page+1) + ".png", 300);
}
document.close();
} catch (Exception e) {
e.printStackTrace();
}
Я прикрепил полученный результат
Смотрите это фото, я не хочу содержания:
[![См. Это изображение, я не хочу контент][1]][1]
Я ожидаю вывода ниже, см. Этот рисунок:
[![см. это изображение][2]][2]
1 ответ
Решение
В качестве первого шага вы можете удалить текст из PDF. Если текст в вашем PDF-файле хранится в потоках содержимого страницы (а не в какой-либо указанной форме XObjects или какой-либо аннотации), вы можете использоватьPdfContentStreamEditor
из этого ответа, например, вот так:
PDDocument document = ...;
for (PDPage page : document.getDocumentCatalog().getPages()) {
PdfContentStreamEditor identity = new PdfContentStreamEditor(document, page) {
@Override
protected void write(ContentStreamWriter contentStreamWriter, Operator operator, List<COSBase> operands) throws IOException {
String operatorString = operator.getName();
if (TEXT_SHOWING_OPERATORS.contains(operatorString))
{
return;
}
super.write(contentStreamWriter, operator, operands);
}
final List<String> TEXT_SHOWING_OPERATORS = Arrays.asList("Tj", "'", "\"", "TJ");
};
identity.processPage(page);
}
( EditPageContent testtestRemoveTextDocument
)
Если вы хотите получить результат в виде растрового изображения, теперь вы можете визуализировать этот документ, как и раньше.