当前位置:   article > 正文

Java Apache PdfBox 长单页Pdf 转图片模糊解决方案_renderimagewithdpi

renderimagewithdpi

PDFBox 是一个用于处理 PDF 文件的 Java 库,通常情况下,它可以用于将 PDF 页面转换为图像。如果你在将长单页 PDF 转换为图像时遇到模糊的问题,可尝试以下解决方法:

代码已验证

  1. import org.apache.pdfbox.pdmodel.PDDocument;
  2. import org.apache.pdfbox.pdmodel.PDPage;
  3. import org.apache.pdfbox.pdmodel.PDRectangle;
  4. import org.apache.pdfbox.rendering.PDFRenderer;
  5. import org.apache.pdfbox.rendering.ImageType;
  6. import org.apache.pdfbox.rendering.RenderDestination;
  7. import org.apache.pdfbox.rendering.RenderedImage;
  8. import org.apache.pdfbox.rendering.Renderer;
  9. import javax.imageio.ImageIO;
  10. import java.awt.image.BufferedImage;
  11. import java.io.File;
  12. import java.io.IOException;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. public class ConvertLongPDFToImages {
  16. public static void main(String[] args) {
  17. try {
  18. PDDocument document = PDDocument.load(new File("your.pdf"));
  19. PDFRenderer pdfRenderer = new PDFRenderer(document);
  20. int pageNum = document.getNumberOfPages();
  21. List<BufferedImage> images = new ArrayList<>();
  22. // 设置图像分辨率
  23. int dpi = 300; // 每英寸点数
  24. for (int i = 0; i < pageNum; i++) {
  25. PDPage page = document.getPage(i);
  26. BufferedImage image = pdfRenderer.renderImageWithDPI(i, dpi, ImageType.RGB);
  27. images.add(image);
  28. }
  29. // 合并图像块
  30. BufferedImage combinedImage = combineImages(images);
  31. // 保存合并后的图像
  32. ImageIO.write(combinedImage, "PNG", new File("output.png"));
  33. document.close();
  34. } catch (IOException e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. // 合并多个图像
  39. private static BufferedImage combineImages(List<BufferedImage> images) {
  40. int totalWidth = 0;
  41. int maxHeight = 0;
  42. for (BufferedImage image : images) {
  43. totalWidth = Math.max(totalWidth, image.getWidth());
  44. maxHeight += image.getHeight();
  45. }
  46. BufferedImage combinedImage = new BufferedImage(totalWidth, maxHeight, BufferedImage.TYPE_INT_RGB);
  47. int y = 0;
  48. for (BufferedImage image : images) {
  49. combinedImage.createGraphics().drawImage(image, 0, y, null);
  50. y += image.getHeight();
  51. }
  52. return combinedImage;
  53. }
  54. }

如果遇到乱码无法加载字体:

可开Debug查看缺少哪个字体,如果提示STSong-Light字体缺失:No glyph for 20154 (CID 0ca6) in font STSong-Light

Using fallback XXX for CID-keyed font STSong-Light,指系统中没有安装STSong-Light字体,pdfbox使用XXX字体来替代,出现方块指替代字体也不存在,需要安装STSong-Light字体

可选择安装对应字体:

安装字体时,要选择“为所有用户安装”

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/639819
推荐阅读
相关标签
  

闽ICP备14008679号