0

请建议我如何使用 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]

4

1 回答 1

1

作为第一步,您可以从 PDF 中删除文本。如果您的 PDF 中的文本存储在页面内容流中(而不是以某些引用形式 XObjects 或某些注释),您可以使用PdfContentStreamEditorfrom this answer,例如像这样:

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测试testRemoveTextDocument

如果您希望结果为位图图像,您现在可以像以前一样渲染此文档。

于 2020-08-10T10:58:38.377 回答