Java使用aspose實現pdf轉word

Java使用aspose實現pdf轉word

一、下載aspose-pdf-21.6.jar包【下載地址】,存放目錄結構如圖;配置pom.xml。
在這里插入圖片描述

<!--pdf to word-->
<dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId><version>21.6</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/aspose-pdf-21.6.jar</systemPath>
</dependency>

二、創建PDFHelper.java類。運行代碼同目錄會出現docx文件。


import com.aspose.pdf.Document;
import com.aspose.pdf.SaveFormat;
import java.io.*;public class PDFHelper3 {public static void main(String[] args) throws IOException {pdf2doc("D://test.pdf");}/*** pdf轉doc** @param pdfPath pdf 路徑*/public static void pdf2doc(String pdfPath) {try {//新建一個word文檔String wordPath = pdfPath.substring(0, pdfPath.lastIndexOf(".")) + ".docx";FileOutputStream os = new FileOutputStream(wordPath);//doc是將要被轉化的word文檔Document doc = new Document(pdfPath);//全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互轉換doc.save(os, SaveFormat.DocX);os.close();//轉化用時} catch (Exception e) {System.out.println("Pdf 轉 Word 失敗...");e.printStackTrace();}}
}

注意:如果aspose-pdf-21.6.jar是官網下載,轉換的文件有水印。需要用下面代碼運行破解,從新生成aspose-pdf-21.6.jar包引用。從我上面鏈接下載已經破解了。


import javassist.*;import java.io.*;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;public class PDFJarCrack {public static void main(String[] args) throws Exception {String jarPath = "D:\\aspose-pdf-21.6.jar";crack(jarPath);}private static void crack(String jarName) {try {ClassPool.getDefault().insertClassPath(jarName);CtClass ctClass = ClassPool.getDefault().getCtClass("com.aspose.pdf.ADocument");CtMethod[] declaredMethods = ctClass.getDeclaredMethods();int num = 0;for (int i = 0; i < declaredMethods.length; i++) {if (num == 2) {break;}CtMethod method = declaredMethods[i];CtClass[] ps = method.getParameterTypes();if (ps.length == 2&& method.getName().equals("lI")&& ps[0].getName().equals("com.aspose.pdf.ADocument")&& ps[1].getName().equals("int")) {// 最多只能轉換4頁 處理System.out.println(method.getReturnType());System.out.println(ps[1].getName());method.setBody("{return false;}");num = 1;}if (ps.length == 0 && method.getName().equals("lt")) {// 水印處理method.setBody("{return true;}");num = 2;}}File file = new File(jarName);ctClass.writeFile(file.getParent());disposeJar(jarName, file.getParent() + "/com/aspose/pdf/ADocument.class");} catch (NotFoundException e) {e.printStackTrace();} catch (CannotCompileException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}private static void disposeJar(String jarName, String replaceFile) {List<String> deletes = new ArrayList<>();deletes.add("META-INF/37E3C32D.SF");deletes.add("META-INF/37E3C32D.RSA");File oriFile = new File(jarName);if (!oriFile.exists()) {System.out.println("######Not Find File:" + jarName);return;}//將文件名命名成備份文件String bakJarName = jarName.substring(0, jarName.length() - 3) + "cracked.jar";//   File bakFile=new File(bakJarName);try {//創建文件(根據備份文件并刪除部分)JarFile jarFile = new JarFile(jarName);JarOutputStream jos = new JarOutputStream(new FileOutputStream(bakJarName));Enumeration entries = jarFile.entries();while (entries.hasMoreElements()) {JarEntry entry = (JarEntry) entries.nextElement();if (!deletes.contains(entry.getName())) {if (entry.getName().equals("com/aspose/pdf/ADocument.class")) {JarEntry jarEntry = new JarEntry(entry.getName());jos.putNextEntry(jarEntry);FileInputStream fin = new FileInputStream(replaceFile);byte[] bytes = readStream(fin);jos.write(bytes, 0, bytes.length);} else {jos.putNextEntry(entry);byte[] bytes = readStream(jarFile.getInputStream(entry));jos.write(bytes, 0, bytes.length);}} else {System.out.println("Delete:-------" + entry.getName());}}jos.flush();jos.close();jarFile.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}private static byte[] readStream(InputStream inStream) throws Exception {ByteArrayOutputStream outSteam = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = -1;while ((len = inStream.read(buffer)) != -1) {outSteam.write(buffer, 0, len);}outSteam.close();inStream.close();return outSteam.toByteArray();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/69228.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/69228.shtml
英文地址,請注明出處:http://en.pswp.cn/web/69228.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Node.js搭配express框架快速構建后端業務接口模塊Demo

使用Node.js搭配express框架快速構建后端業務接口模塊Demo&#xff01;實際開發中&#xff0c;有很多項目&#xff0c;其實都是可以使用node.js來完成對接mysql數據庫的&#xff0c;express確實使用起來非常簡單&#xff0c;入手快&#xff0c;效率非常高。下面是一個簡單的案例…

Python----Python高級(并發編程:協程Coroutines,事件循環,Task對象,協程間通信,協程同步,將協程分布到線程池/進程池中)

一、協程 1.1、協程 協程&#xff0c;Coroutines&#xff0c;也叫作纖程(Fiber) 協程&#xff0c;全稱是“協同程序”&#xff0c;用來實現任務協作。是一種在線程中&#xff0c;比線程更加輕量級的存在&#xff0c;由程序員自己寫程序來管理。 當出現IO阻塞時&#xff0c;…

Unity 加載OSGB(webgl直接加載,無需轉換格式!)

Unity webgl加載傾斜攝影數據 前言效果圖后續不足 前言 Unity加載傾斜攝影數據&#xff0c;有很多的插件方便好用&#xff0c;但是發布到網頁端均失敗&#xff0c;因為webgl 的限制&#xff0c;IO讀取失效。 前不久發現一個開源項目: UnityOSGB-main 通過兩種方式在 Unity 中…

【Block總結】PSA,金字塔擠壓注意力,解決傳統注意力機制在捕獲多尺度特征時的局限性

論文信息 標題: EPSANet: An Efficient Pyramid Squeeze Attention Block on Convolutional Neural Network論文鏈接: arXivGitHub鏈接: https://github.com/murufeng/EPSANet 創新點 EPSANet提出了一種新穎的金字塔擠壓注意力&#xff08;PSA&#xff09;模塊&#xff0c;旨…

【重新認識C語言----結構體篇】

目錄 -----------------------------------------begin------------------------------------- 引言 1. 結構體的基本概念 1.1 為什么需要結構體&#xff1f; 1.2 結構體的定義 2. 結構體變量的聲明與初始化 2.1 聲明結構體變量 2.2 初始化結構體變量 3. 結構體成員的訪…

如何在Vscode中接入Deepseek

一、獲取Deepseek APIKEY 首先&#xff0c;登錄Deepseek官網的開放平臺&#xff1a;DeepSeek 選擇API開放平臺&#xff0c;然后登錄Deepseek后臺。 點擊左側菜單欄“API keys”&#xff0c;并創建API key。 需要注意的是&#xff0c;生成API key復制保存到本地&#xff0c;丟失…

電腦開機提示按f1原因分析及終極解決方法來了

經常有網友問到一個問題&#xff0c;我電腦開機后提示按f1怎么解決&#xff1f;不管理是臺式電腦&#xff0c;還是筆記本&#xff0c;都有可能會遇到開機需要按F1&#xff0c;才能進入系統的問題&#xff0c;引起這個問題的原因比較多&#xff0c;今天小編在這里給大家列舉了比…

AI協助探索AI新構型自動化創新的技術實現

一、AI自進化架構的核心范式 1. 元代碼生成與模塊化重構 - 代碼級自編程&#xff1a;基于神經架構搜索的強化學習框架&#xff0c;AI可通過生成元代碼模板&#xff08;框架的抽象層定義、神經元結點-網絡拓撲態的編碼抽象定義&#xff09;自動組合功能模塊。例如&#xff0…

RAID獨立硬盤冗余陣列

目錄 一、RAID基本功能 二、RAID常見級別 三、實現方式 1、軟件磁盤陣列 2、硬件磁盤陣列 四、熱備盤 RAID&#xff08;Redundant Array of Independent Disks&#xff09;是一種通過將多個硬盤組合成一個邏輯單元來提升存儲性能、冗余性或兩者兼具的技術。 一、RAID基本…

【高級篇 / IPv6】(7.2) ? 04. 在60E上配置ADSL撥號寬帶上網(IPv4) ? FortiGate 防火墻

【簡介】除了單位用戶以外&#xff0c;大部分個人用戶目前使用的仍然是30E、50E、60E系列防火墻&#xff0c;固件無法達到目前最高版本7.6&#xff0c;這里以最常用的60E為例&#xff0c;演示固件版本7.2下實現ADSL撥號寬帶的IPv6上網。由于內容比較多&#xff0c;文章分上、下…

Qt之設置QToolBar上的按鈕樣式

通常給QAction設置icon后,菜單欄的菜單項和工具欄(QToolBar)上對應的按鈕會同時顯示該icon。工具欄還可以使用setToolButtonStyle函數設置按鈕樣式,其參數為枚舉值: enum ToolButtonStyle {ToolButtonIconOnly,ToolButtonTextOnly,ToolButtonTextBesideIcon,ToolButtonTe…

【從零開始系列】DeepSeek-R1:(本地部署使用)思維鏈推理大模型,開源的神!——Windows/Linux本地環境測試 + vLLM遠程部署服務

目錄 一、環境配置 1.硬件設備評估 2.基礎環境安裝 3.模型參數下載 (1) huggingface鏡像源下載 (2) modelscope魔搭社區下載 &#xff08;推薦&#xff09; 二、基礎使用&#xff08;Linux、Window兼容&#xff09; 1.Transformers庫自編代碼 三、進階使用&#xff08;僅Lin…

DeepSeek 開源模型全解析(2024.1.1–2025.2.6)

目錄 一、通用大語言模型&#xff1a;DeepSeek-V3 系列 137 二、推理優化模型&#xff1a;DeepSeek-R1 系列 811 三、多模態模型&#xff1a;Janus 系列 10 四、生態整合與部署建議 五、總結與展望 以下為 DeepSeek 在 2024 年 1 月至 2025 年 2 月期間發布的開源模型及其…

Mac: docker安裝以后報錯Command not found: docker

文章目錄 前言解決辦法&#xff08;新的&#xff09;解決步驟&#xff08;原來的&#xff09;不推薦總結 前言 ?本操作參考 http://blog.csdn.net/enhenglhm/article/details/137955756 原作者&#xff0c;更詳細請&#xff0c;查看詳細內容請關注原作者。 一般&#xff0c;…

《手札·開源篇》數字化轉型助力永磁電機企業降本增效:快速設計軟件如何讓研發效率提升40%?

數字化轉型助力永磁電機企業降本增效&#xff1a;快速設計軟件如何讓研發效率提升40%&#xff1f; 一、痛點&#xff1a;傳統研發模式正在吃掉企業的利潤 永磁電機行業面臨兩大挑戰&#xff1a; 研發周期長&#xff1a;一款新電機從設計到量產需6-12個月&#xff0c;電磁計算…

0207作業

思維導圖 服務器 enum Type{TYPE_REGIST,TYPE_LOGIN };typedef struct Pack{int size;enum Type type;char buf[2048];}pack_t;typedef struct list{union Data{struct List* tail;char str[64];}data;struct List* next;struct List* prev; }List;List* create_node(){List* …

深入淺出 DeepSeek V2 高效的MoE語言模型

今天&#xff0c;我們來聊聊 DeepSeek V2 高效的 MoE 語言模型&#xff0c;帶大家一起深入理解這篇論文的精髓&#xff0c;同時&#xff0c;告訴大家如何將這些概念應用到實際中。 &#x1f31f; 什么是 MoE&#xff1f;——Mixture of Experts&#xff08;專家混合模型&#x…

RabbitMQ 從入門到精通:從工作模式到集群部署實戰(五)

#作者&#xff1a;閆乾苓 系列前幾篇&#xff1a; 《RabbitMQ 從入門到精通&#xff1a;從工作模式到集群部署實戰&#xff08;一&#xff09;》&#xff1a;link 《RabbitMQ 從入門到精通&#xff1a;從工作模式到集群部署實戰&#xff08;二&#xff09;》&#xff1a; lin…

nodejs:express + js-mdict 網頁查詢英漢詞典,能播放.spx 聲音

向 DeepSeek R1 提問&#xff1a; 我想寫一個Web 前端網頁&#xff0c;后臺用 nodejs js-mdict , 實現在線查詢英語單詞&#xff0c;并能播放.spx 聲音文件 1. 項目結構 首先&#xff0c;創建一個項目目錄&#xff0c;結構如下&#xff1a; mydict-app/ ├── public/ │ …

Linux ftrace 內核跟蹤入門

文章目錄 ftrace介紹開啟ftraceftrace使用ftrace跟蹤指定內核函數ftrace跟蹤指定pid ftrace原理ftrace與stracetrace-cmd 工具KernelShark參考 ftrace介紹 Ftrace is an internal tracer designed to help out developers and designers of systems to find what is going on i…