pdf - 坏:将pdf转换为图像
问题描述
转换类:
public void getImage(String pdfFilename) throws Exception{
List<byte[]> listImg = new ArrayList<>();
try (final PDDocument document = PDDocument.load(new File(pdfFilename))){
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int page = 0; page < document.getNumberOfPages(); ++page)
{
File file = new File("C:\\path1\\"+page+".png");
BufferedImage bim = pdfRenderer.renderImage(page);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bim, "png",file);
System.out.println("!!!!");
// System.out.println(Arrays.toString(listImg.get(page)));
}
document.close();
} catch (IOException e){
System.err.println("Exception while trying to create pdf document - " + e);
}
}
一切正常。所有的 pdf 文件都被转换了,但是如果我使用 shw 类(这对我的项目来说是非常必要的):
PdfDocument srcDoc = new PdfDocument(new PdfReader(DEST1));
Rectangle rect = srcDoc.getFirstPage().getPageSize();
System.out.println(rect);
Rectangle pageSize = new Rectangle(rect.getWidth(), rect.getHeight());
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
pdfDoc.setDefaultPageSize(new PageSize(pageSize));
System.out.println(srcDoc.getNumberOfPages());
PdfCanvas content = new PdfCanvas(pdfDoc.addNewPage());
int n = 0;
for (int i =1 ; i <= srcDoc.getNumberOfPages(); i++) {
PdfFormXObject page = srcDoc.getPage(i).copyAsFormXObject(pdfDoc);
content.clip();
content.newPath();
content.addXObject(page,MainPdf.right_Margin-MainPdf.left_Margin,0);
content = new PdfCanvas(pdfDoc.addNewPage());
for (double y = 4.251969f; y <= 595; y += 14.1732) {
content.moveTo(0, y);
content.lineTo(420, y);
}
for (double x = 0; x <= 420; x += 14.1732) {
content.moveTo(x, 0);
content.lineTo(x, 595);
}
content.closePathStroke();
}
srcDoc.close();
pdfDoc.close();
}
那些已被转换为空的图像(其内部没有任何内容,只有白色背景)。pdf 不为空。pdf: https://dropmefiles.com/UXedd
图片:
解决方案
原因是电话
content.clip();
在 itext 段中。此剪辑带有空路径。Adobe Reader 会忽略这一点,但 PDFBox 不会,因此当前的剪切路径是空的,因此什么都看不到。
根据其中一条评论,删除该调用可以解决问题。(我怀疑content.newPath();
也不需要)
我也尝试过其他查看器:PDF.js 和 GhostScript 不显示,Chrome 和 Edge 显示。
推荐阅读
- mysql - MySQL中ED50转WGS84的问题
- flutter - 颤振:StreamBuilder 不接受合并流
- python - 如何在 FFT 后获得数据对应的频率值?
- python-3.x - Python添加列条件未按预期工作
- zooming - 添加缩放时轴标签消失(Vega-Lite)
- cryptocurrency - openSea NFT SDK,如何使用 api 买卖 NFT
- excel - 减去成对单元格的公式 - excel
- arrays - 我如何只能从 json 响应中按类别显示对象?
- java - Webview 活动在失去焦点时调用 onDestroy()
- python - 在文件读取期间使用 bulk_create 创建多对多关系