当前位置: 首页 > news >正文

Java Word转PDF(直接转和以图片形式转)、PDF转图片、图片转PDF

在淘宝上找了一家写代码的店铺写了一个工具类,再参考网上的代码,改了改
用到的类库:

        <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox --><!--word转pdf--><dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.1.12</version></dependency><dependency><groupId>com.documents4j</groupId><artifactId>documents4j-transformer-msoffice-word</artifactId><version>1.1.12</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><!-- pdf转图片和图片转pdf--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.29</version></dependency>

工具类代码:

import com.documents4j.api.DocumentType;
import com.documents4j.job.LocalConverter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.rendering.PDFRenderer;import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class FileConvertor {/*** 根据word每页生成图片,再根据得到的图片,合并生成PDF*/public static void wordToImagePDF(String wordPath,String imageDirectory, String targetPDF) throws IOException {//生成临时pdf文件File tempFile = File.createTempFile("temp", ".pdf");String temporaryPDF = tempFile.getAbsolutePath();//将word转换为pdf,并写入临时pdfwordToPDF(wordPath, temporaryPDF);//将临时pdf转换为图片List<String> images = pdfToImages(temporaryPDF,imageDirectory,300,"png");//将转换出来的图片合并为pdftry (PDDocument pdDocument = new PDDocument()) {for (String imagePath : images) {imageToPDF(imagePath, pdDocument);}pdDocument.save(targetPDF);}//删除临时pdfFiles.delete(Paths.get(temporaryPDF));}/*** Word文档转换为PDF文档* @param wordPath Word文档路径* @param pdfPath  生成的PDF路径*/public static void wordToPDF(String wordPath, String pdfPath) throws IOException {File inputWord = new File(wordPath);File outputFile = new File(pdfPath);InputStream docxInputStream = Files.newInputStream(inputWord.toPath());OutputStream outputStream = Files.newOutputStream(outputFile.toPath());LocalConverter.builder().build().convert(docxInputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.PDF).execute();outputStream.close();docxInputStream.close();}/*** PDF文件转图片(word一页对应一个图像)* 图片将保存文件夹下,根据页数命名* @param pdfPath PDF文件路径* @param imageDirectory 生成的图片保存的文件夹* @param dpi 生成图片dpi* @param formatName 生成图片的格式*/public static List<String> pdfToImages(String pdfPath,String imageDirectory,float dpi, String formatName) throws IOException {File file = new File(pdfPath);ArrayList<String> list = new ArrayList<>();try (PDDocument doc = PDDocument.load(file)) {PDFRenderer renderer = new PDFRenderer(doc);int pageCount = doc.getNumberOfPages();for (int i = 0; i < pageCount; i++) {BufferedImage image = renderer.renderImageWithDPI(i, dpi);int pageIndex = i + 1;String imagePath = imageDirectory +File.separator + pageIndex + "."+formatName;ImageIO.write(image, formatName, new File(imagePath));list.add(imagePath);}}return list;}/*** 图片转PDF*/public static void imageToPDF(String imagePath, PDDocument document) throws IOException {//获取图片长宽File file = new File(imagePath);String fileSuffix = imagePath.substring(imagePath.lastIndexOf(".") + 1);Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName(fileSuffix);ImageReader reader = readers.next();ImageInputStream input = ImageIO.createImageInputStream(Files.newInputStream(file.toPath()));reader.setInput(input, true);int width = reader.getWidth(0);int height = reader.getHeight(0);//根据图片大小动态生成pdf页面PDPage pdPage = new PDPage(new PDRectangle(width, height));document.addPage(pdPage);PDImageXObject pdImageXObject = PDImageXObject.createFromFile(imagePath, document);PDPageContentStream contentStream = new PDPageContentStream(document, pdPage);//写入图片contentStream.drawImage(pdImageXObject, 0, 0);contentStream.close();input.close();}
}
http://www.lryc.cn/news/132820.html

相关文章:

  • dockerfile编写LNMP
  • websocket + stomp + sockjs学习
  • ApplicationListener , @EventListener 和 CommandLineRunner 启动顺序验证
  • 网络编程基础(1)
  • Linux驱动开发(Day4)
  • LVS负载均衡群集部署(LVS-NAT模型实例)
  • 【仿写tomcat】五、响应静态资源(访问html页面)、路由支持以及多线程改进
  • stm32单片机/51单片机蜂鸣器不响(proteus模拟)
  • BERT、ERNIE、Grover、XLNet、GPT、MASS、UniLM、ELECTRA、RoBERTa、T5、C4
  • 主机防护的重要性和方式
  • 聚观早报 | 抢先体验阿维塔11座舱;本田和讴歌采用NACS充电标准
  • 思科计算机网络答案(包含第1~11章节)
  • 所见即所得,「Paraverse平行云」助力万间打造智能建造新图景
  • AI图片处理功能演示
  • CentOS系统环境搭建(六)——使用docker-compose安装redis
  • 个人论坛项目测试报告
  • 一起来学shiny把(4)—调控控件进行输出
  • VBIC卡管理系统设计与实现
  • 八种架构演进
  • 商城-学习整理-高级-分布式事务(十九)
  • Java学习笔记(三):面向对象
  • 电商项目part02 电商后台多数据源
  • 【C# 基础精讲】LINQ 基础
  • ChatGPT成为工作工具,具体都应用在哪些地方?
  • Shader学习(三)(片元着色器)
  • 谷歌推出首款量子弹性 FIDO2 安全密钥
  • 前端常用的三种加密方式(MD5、base64、sha.js)
  • alpine镜像时区设置
  • Java导入Excel,保留日期格式为文本格式
  • uploadifive php上传进度条插件 解决动态传参数问题