Java中Word与PDF转换为图片的方法详解
作者:摘星喵Pro
这篇文章主要为大家详细介绍了如何使用Java实现将Word与PDF转换为图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
Word、PDF转换为图片Java
需求要在小程序端展示文档内容,所以将文档每页转换为图片后显示
参考和其他等方案:
Word转换为图片
<!-- word转图工具 --> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.8.0</version> </dependency> <dependency> <groupId>com.luhuiguo</groupId> <artifactId>aspose-words</artifactId> <version>23.1</version> </dependency>
import com.aspose.words.Document; import com.aspose.words.SaveFormat; import lombok.extern.slf4j.Slf4j; import java.io.File; import java.nio.file.Files; import java.util.ArrayList; import java.util.List; @Slf4j public class WordToImageUtil { public static void main(String[] args) { wordToImage("C:\\Users\\Administrator\\Documents\\录入脚本\\324\\", "xxxx.doc"); } public static List<String> wordToImage(String filePath, String fileName) { log.info("开始word转换为图片"); List<String> resultList = new ArrayList<String>(); // 获取文件路径分隔符 String separator = File.separator; try { // 填充数据完毕的test.docx,在转换成图片 File file1 = new File(filePath + separator + fileName); // 使用系统的路径分隔符 // 打开生成的 Word 文件 Document doc = new Document(Files.newInputStream(file1.toPath())); // 逐页将 Word 文件保存为图片(PNG格式) for (int i = 0; i < doc.getPageCount(); i++) { Document extractedPage = doc.extractPages(i, 1); // 拼接上文件名 String path = filePath + separator + "tmpImg" + separator + removeFileExtension(fileName) + separator + "img" + System.currentTimeMillis() + "_" + i + ".png"; // 使用系统的路径分隔符 // 创建目录(如果不存在的话) File tmpDir = new File(filePath + separator + "tmpImg" + separator + removeFileExtension(fileName)); if (!tmpDir.exists()) { tmpDir.mkdirs(); // 创建目录 } // 将 Word 文件保存为图片PNG格式 extractedPage.save(path, SaveFormat.PNG); resultList.add(path); } } catch (Exception e) { e.printStackTrace(); return new ArrayList<>(); } log.info("结束word转换为图片"); return resultList; } /** * 去掉后缀名 * @param fileName * @return */ public static String removeFileExtension(String fileName) { int dotIndex = fileName.lastIndexOf("."); if (dotIndex == -1) { return fileName; // 如果没有找到点,则返回原始文件名 } return fileName.substring(0, dotIndex); // 返回去掉后缀名的文件名 } }
PDF转换为图片
<!--PDF转换为图片--> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>2.0.9</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.9</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class PdfToImage { /** * 使用pdfbox将整个pdf转换成图片 * * @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test * @param filename PDF文件名不带后缀名 * @param type 图片类型 png 和jpg */ public static void pdf2png(String fileAddress, String filename, String type) { long startTime = System.currentTimeMillis(); // 将文件地址和文件名拼接成路径 注意:线上环境不能使用\\拼接 File file = new File(fileAddress + "\\" + filename + ".pdf"); try { // 写入文件 PDDocument doc = PDDocument.load(file); PDFRenderer renderer = new PDFRenderer(doc); int pageCount = doc.getNumberOfPages(); for (int i = 0; i < pageCount; i++) { // dpi为144,越高越清晰,转换越慢 BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI // 将图片写出到该路径下 ImageIO.write(image, type, new File(fileAddress + "\\" + filename + "_" + (i + 1) + "." + type)); } long endTime = System.currentTimeMillis(); System.out.println("共耗时:" + ((endTime - startTime) / 1000.0) + "秒"); //转化用时 } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { pdf2png("C:\\Users\\Administrator\\Documents\\xxx\\pdf", "文件名", "png"); } }
乱码问题
如果在linux运行遇到中文乱码,可尝试安装字体然后重启程序运行
参考:
在CentOS系统中安装中文字体
- 将Windows系统下的simsun.ttc字体文件复制到CentOS系统中,并修改字体文件名为simsun.ttc,一般字体位置在:/usr/share/fonts下
- 安装fontconfig软件包,这是处理字体配置和缓存的工具。可以使用yum命令进行安装,例如:yum -y install fontconfig(查看是否已经存在)
- 刷新字体缓存,使得新安装的字体能够被系统识别。使用fc-cache命令完成这一步骤。
- 使用 fc-list 命令查看系统中已安装的字体列表
- 通过grep命令搜索“simsun”来验证simsun.ttc字体是否成功安装
1、从本地找到字体:C:\Windows\Fonts
2、复制到Linux,我这里用的centos,复制字体到 /usr/share/fonts
3、安装fontconfig工具 yum -y install fontconfig
4、刷新字体缓存 fc-cache
5、查看字体列表是否完成安装 fc-list
以上就是Java中Word与PDF转换为图片的方法详解的详细内容,更多关于Java Word PDF转图片的资料请关注脚本之家其它相关文章!