900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 将pdf转换成图片在转换回pdf文件

将pdf转换成图片在转换回pdf文件

时间:2021-07-09 13:33:26

相关推荐

将pdf转换成图片在转换回pdf文件

将pdf转换成图片在转换回pdf文件

之所有要这么做主要是曲线解决pdf文本内容增加覆盖层后依然可以复制出来的问题。查了不少资料发现通过覆盖层的方式并不能去除原有的文字内容,只是达到了掩耳盗铃的效果而已。于是我们打算将加密后的pdf文件转换成图片在转换会pdf,通过这样的方式达到我们需要的效果。

pdf转图片的过程中遇到了几个问题?图片清晰度问题?图片内容失真问题?

为了解决第一个问题,我在网上查找了不少资料,经过测试发现,以下代码pdf清晰度是解决了,但是却引进了一个新的问题,那就是pdf失真的问题。通过调整缩放比例来提高清晰度,会导致pdf中的文字错位

public static void pdf2Img2Pdf(String pdfPath) {try {Document document = new Document();document.setFile(pdfPath);float scale = 3.0F;float rotation = 0F;List<File> images = new ArrayList<>();for (int i = 0; i < document.getNumberOfPages(); i++) {BufferedImage bufferedImage = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN, BOUNDARY_CROPBOX, rotation, scale);bufferedImage.flush();String imagePath = pdfPath.replace(".pdf", "") + "_" + i + ".jpg";File file = new File(imagePath);RenderedImage renderedImage = bufferedImage;ImageIO.write(renderedImage, "jpg", file);images.add(file);}document.dispose();PdfUtil.imgMerge2Pdf(images, new File(pdfPath));} catch (Exception e) {Logs.error(e.getMessage(), e);}}

执行效果如图所示

换了一个方式实现

public static void pdfToImgToPdf(String pdfPath) {File file = new File(pdfPath);PDDocument pdDocument;try {pdDocument = PDDocument.load(file);PDFRenderer renderer = new PDFRenderer(pdDocument);/* dpi越大转换后越清晰,相对转换速度越慢 */List<File> files = new ArrayList<>();for (int i = 0; i < pdDocument.getNumberOfPages(); i++) {String imagePath = pdfPath.replace(".pdf", "") + "_" + i + ".png";File dstFile = new File(imagePath);BufferedImage image = renderer.renderImageWithDPI(i, 300);ImageIO.write(image, "png", dstFile);files.add(dstFile);}PdfUtil.imgMerge2Pdf(files, new File(pdfPath.replace(".pdf", "_1.pdf")));System.out.println("PDF文档转PNG图片成功!");} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {Pdf2Img2PdfUtil.pdfToImgToPdf("D:\\tmp\\11\\ROA-88122492.pdf");}

这次成功了,pdf文档没有失真。感谢祖国,感谢人民

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。