Java 代码实现pdf转word文件 | 无损转换完整代码教程
生活随笔
收集整理的這篇文章主要介紹了
Java 代码实现pdf转word文件 | 无损转换完整代码教程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
最近有個需求,我自己有個pdf想轉word去修改,百度很多工具都是注冊賬號前一兩次免費,后面就要收費,由于,本人之前的也轉換過好幾次,免費額度都用完了。百度了半天也沒找到一個免費,于是決定自己用代碼實現轉換,覺得應該不難,后來,調試1-2個小時的代碼終于實現了!
pdf轉word實現思路
? ?代碼實現主要依賴兩個第三方jar包,一個是apache-poi,一個是aspose-pdf。apache-poi包完全開源免費,aspose-pdf免費版生成有水印,且生成數量有限制。單純用apache-poi實現pdf轉word文件的話,實現非常復雜,且樣式和原來樣式,保持一致的的比例很低。所以,我先用aspose-pdf生成了帶水印的docx文件,再用docx文件去除aspose-pdf生成的水印的,最終得到了一個無水印的word文件。
項目遠程倉庫
aspose-pdf 這個需要配置單獨的倉庫地址才能下載,不會配置的可以去官網直接下載jar引入項目代碼中。
<repositories><repository><id>AsposeJavaAPI</id><name>Aspose Java API</name><url>https://repository.aspose.com/repo/</url></repository></repositories>Maven項目pom文件依賴
<!-- https://mvnrepository.com/artifact/com.aspose/aspose-pdf --><dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId><version>21.8</version></dependency><!-- poi-ooxml是poi的升級版本--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>?核心代碼實現
import com.aspose.pdf.Document; import com.aspose.pdf.SaveFormat; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun;import java.io.*; import java.util.List;public class PDFHelper3 {public static void main(String[] args) throws IOException {pdf2doc("C:\\Users\\liuya\\Desktop\\pdf\\中信重工鑄鍛公司數字化工廠技術要求.pdf");// removeWatermark(new File("C:\\Users\\liuya\\Desktop\\pdf\\中信重工鑄鍛公司數字化工廠技術要求.docx"));}//移除文字水印public static boolean removeWatermark(File file) {try {XWPFDocument doc = new XWPFDocument(new FileInputStream(file));// 段落List<XWPFParagraph> paragraphs = doc.getParagraphs();for (XWPFParagraph paragraph : paragraphs) {String text=paragraph.getText();if("Evaluation Only. Created with Aspose.PDF. Copyright 2002-2021 Aspose Pty Ltd.".equals(text)){List<XWPFRun> runs = paragraph.getRuns();runs.forEach(e-> e.setText("",0));}}FileOutputStream outStream = new FileOutputStream(file);doc.write(outStream);outStream.close();} catch (IOException e) {e.printStackTrace();}return true;}//pdf轉doc(目前最大支持21頁)public static void pdf2doc(String pdfPath) {long old = System.currentTimeMillis();try {//新建一個pdf文檔String wordPath=pdfPath.substring(0,pdfPath.lastIndexOf("."))+".docx";File file = new File(wordPath);FileOutputStream os = new FileOutputStream(file);//Address是將要被轉化的word文檔Document doc = new Document(pdfPath);//全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互轉換doc.save(os, SaveFormat.DocX);os.close();//去除水印removeWatermark(new File(wordPath));//轉化用時long now = System.currentTimeMillis();System.out.println("Pdf 轉 Word 共耗時:" + ((now - old) / 1000.0) + "秒");} catch (Exception e) {System.out.println("Pdf 轉 Word 失敗...");e.printStackTrace();}}}控制臺輸出
轉換時間可能比較久,測試了幾次都是30秒起步!?
?生成結果文件
?打開word后,對比pdf樣式排版,肉眼無差別!
總結
以上是生活随笔為你收集整理的Java 代码实现pdf转word文件 | 无损转换完整代码教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2880):数据代理和劫持
- 下一篇: Java UDP通信详解:单播、广播、组