Java代码如何使用pdfBox将pdf转换为图片--同时处理中文乱码的方法分享
下文笔者讲述pdf转换为图片的方法分享,如下所示
pdf转换的实现思路
1.引入相应依赖 2.借助工具类进行pdf转换为图片例
1.引入依赖 <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.13</version> </dependency> 2.pdf转图片工具类 package com.java265.service.common.util; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.ImageType; import org.apache.pdfbox.rendering.PDFRenderer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; public class PdfToImage { private static final Logger logger = LoggerFactory.getLogger(PdfToImage.class); //经过测试,dpi为96,100,105,120,150,200中,105显示效果较为清晰,体积稳定,dpi越高图片体积越大,一般电脑显示分辨率为96 public static final float DEFAULT_DPI = 105; //默认转换的图片格式为jpg public static final String DEFAULT_FORMAT = "jpg"; /** * pdf转图片 * @param pdfPath PDF路径 * @return 图片路径 */ public static void pdfToImage(String pdfPath, String imgPath) { try { System.setProperty("sun.java2d.cmm","sun.java2d.cmm.kcms.KcmsServiceProvider"); //图像合并使用参数 // 总宽度 int width = 0; // 保存一张图片中的RGB数据 int[] singleImgRGB; int shiftHeight = 0; //保存每张图片的像素值 BufferedImage imageResult = null; //利用PdfBox生成图像 PDDocument pdDocument = PDDocument.load(new File(pdfPath)); PDFRenderer renderer = new PDFRenderer(pdDocument); //循环每个页码 for (int i = 0, len = pdDocument.getNumberOfPages(); i < len; i++) { BufferedImage image = renderer.renderImageWithDPI(i, DEFAULT_DPI, ImageType.RGB); int imageHeight = image.getHeight(); int imageWidth = image.getWidth(); //计算高度和偏移量 if (i == 0) { //使用第一张图片宽度; width = imageWidth; //保存每页图片的像素值 imageResult = new BufferedImage(width, imageHeight * len, BufferedImage.TYPE_INT_RGB); } else { // 计算偏移高度 shiftHeight += imageHeight; } singleImgRGB = image.getRGB(0, 0, width, imageHeight, null, 0, width); // 写入流中 imageResult.setRGB(0, shiftHeight, width, imageHeight, singleImgRGB, 0, width); } pdDocument.close(); // 写图片 ImageIO.write(imageResult, DEFAULT_FORMAT, new File(imgPath)); } catch (Exception e) { logger.error("PDF转图片失败"); e.printStackTrace(); } } public static void main(String[] args) { pdfToImage("d://test.pdf","d://test.jpg"); } }
注意事项: 由于操作系统未安装相应的字体,所以转换中文会出现乱码现象 我们可以通过安装相应的字体,避免中文乱码
windows安装字体---解决方法
缺少什么字体去搜索引擎搜索下载对应字体 然后再windows里直接安装ttf/otf等格式结尾的文件即可 或在系统目录下C:\Windows\Fonts,只需把字体文件拖进来便会提示安装
linux下安装字体
通常linux缺少的常用字体 在windows目录下C:\Windows\Fonts都能找到对应的字体文件 拷贝到linux上即可 没有的字体去搜索下载都能找到 $cd /usr/share/fonts/ // 进入系统自带的字体目录 $mkdir myfonts // myfonts 是你自己随便取得文件夹名字 #将字体文件拷贝到这个文件夹下 #在cd /usr/share/fonts/目录下执行以下命令 $mkfontscale $mkfontdir $fc-cache -fv //更新字体缓存 $source /etc/profile // 执行以下命令让字体生效 $fc-list // 查看系统中所有得字体,可用于测试是否安装字体成功
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。