ppt轉pdf的java實現

一、實現方式

java采用jacob包的功能,把ppt演示文稿轉換為pdf。

支持文件格式:pptx,ppt

二、事先準備

1、依賴于office,需安裝office辦公軟件

2、需要下載一個jacob-1.20-x64.dll的文件,放到java的bin目錄下。

文件可以網上搜索下載。也可以點擊百度網盤下載鏈接:

https://pan.baidu.com/s/16y-N03KPQJkne6g4sMLAmg?pwd=ix4j

三、Java轉換代碼

1、maven包依賴:

        <dependency><groupId>com.jacob</groupId><artifactId>jacob</artifactId><version>1.20</version></dependency>

2、java轉換類:JacobUtil.java

主要看ppt2PDF方法。

package com.lan.fts.util;import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/***  excel word ppt轉pdf*  未完全完善* @author LAN* @date 2021年07月01日*/
public class JacobUtil {private static Logger log = LoggerFactory.getLogger(JacobUtil.class);private static final Integer WORD_TO_PDF_OPERAND = 17;private static final Integer PPT_TO_PDF_OPERAND = 32;private static final Integer EXCEL_TO_PDF_OPERAND = 0;public static void word2PDF(String inputFile, String pdfFile) {ComThread.InitSTA();ActiveXComponent app = new ActiveXComponent("Word.Application");try {app.setProperty("Visible", false);Dispatch docs = app.getProperty("Documents").toDispatch();Dispatch doc = Dispatch.call(docs, "Open", new Object[]{inputFile, false, true}).toDispatch();Dispatch.call(doc, "ExportAsFixedFormat", new Object[]{pdfFile, WORD_TO_PDF_OPERAND});Dispatch.call(doc, "Close", new Object[]{false});} catch (Exception e) {e.printStackTrace();System.out.println("轉換出錯:" + pdfFile);} finally {app.invoke("Quit");ComThread.Release();}}public static void excel2PDF(String inputFile, String pdfFile) {ComThread.InitSTA(true);ActiveXComponent app = new ActiveXComponent("Excel.Application");try {app.setProperty("Visible", false);app.setProperty("AutomationSecurity", new Variant(3));// 禁用宏Dispatch excels = app.getProperty("Workbooks").toDispatch();Object[] param1 = new Object[]{inputFile, new Variant(false), new Variant(false)};Dispatch excel = Dispatch.invoke(excels, "Open", Dispatch.Method, param1, new int[9]).toDispatch();//轉換Object[] param2 = new Object[]{new Variant(EXCEL_TO_PDF_OPERAND), // PDF格式=0pdfFile,new Variant(0)  //0=標準 (生成的PDF圖片不會變模糊) ; 1=最小文件};Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, param2, new int[1]);//關閉Dispatch.call(excel, "Close", new Object[]{false});} catch (Exception e) {e.printStackTrace();System.out.println("轉換出錯:" + pdfFile);} finally {app.invoke("Quit");ComThread.Release();}}private static ActiveXComponent ppt_app = new ActiveXComponent("PowerPoint.Application");public static void ppt2PDF(String inputFile, String pdfFile) {//  ComThread.InitSTA();Dispatch ppts = ppt_app.getProperty("Presentations").toDispatch();try {/*** call* param 4: ReadOnly* param 5: Untitled指定文件是否有標題* param 6: WithWindow指定文件是否可見* */Dispatch ppt = Dispatch.call(ppts, "Open", new Object[]{inputFile, true, true, false}).toDispatch();Dispatch.call(ppt, "SaveAs", new Object[]{pdfFile, PPT_TO_PDF_OPERAND});//關閉Dispatch.call(ppt, "Close");} catch (Exception e) {log.error("轉換出錯:" + inputFile, e);try{ppt_app.invoke("Quit");}catch (Exception e1){log.error("ppt_app.invoke(\"Quit\")關閉出錯!",e);}finally{ppt_app = new ActiveXComponent("PowerPoint.Application");}} finally {//      ppt_app.invoke("Quit");//      ComThread.Release();}}
}

四、運行測試

    public static void main(String[] args) {JacobUtil.ppt2PDF("D:\\data\\out\\lanhezhong文件轉換.pptx", "D:\\data\\out\\lanhezhong文件轉換.pptx.pdf");}

運行結果:

總結:ppt轉pdf轉換的結果比較好,基本上保持ppt的原本內容格式。

***********************************************************************************************
author:藍何忠
email:lanhezhong@163.com
***********************************************************************************************

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

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

相關文章

電影網站|基于SSM+vue的電影網站系統(源碼+數據庫+文檔)

電影網站 目錄 基于SSMvue的電影網站系統 一、前言 二、系統設計 三、系統功能設計 1 系統功能模塊 2 管理員功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取&#xff1a; 博主介紹&#xff1a;??大廠碼農|畢設布道…

Linux sliplogin命令教程:如何使用sliplogin命令建立SLIP服務器(附實例詳解和注意事項)

Linux sliplogin命令介紹 sliplogin&#xff08;Serial Line Internet Protocol Login&#xff09;命令用于將SLIP接口加入標準輸入&#xff0c;把一般終端機的連線變成SLIP連線。通常可用來建立SLIP服務器&#xff0c;讓遠端電腦以SLIP連線到服務器。 Linux sliplogin命令適…

貪心算法-----檸檬水找零

今日題目&#xff1a;leetcode860 題目鏈接&#xff1a;點擊跳轉題目 分析&#xff1a; 顧客只會給三種面值&#xff1a;5、10、20&#xff0c;先分類討論 當收到5美元時&#xff1a;不用找零&#xff0c;面值5張數1當收到10美元時&#xff1a;找零5美元&#xff0c;面值5張數…

未授權訪問:JBoss未授權訪問漏洞

目錄 1、漏洞原理? 2、環境搭建 3、未授權訪問 4、利用jboss.deployment getshell 防御手段 今天繼續學習各種未授權訪問的知識和相關的實操實驗&#xff0c;一共有好多篇&#xff0c;內容主要是參考先知社區的一位大佬的關于未授權訪問的好文章&#xff0c;還有其他大佬…

【Ubuntu 安裝erlang】

apt-get 安裝 apt-get install erlang或 源碼安裝 git clone https://github.com/erlang/otp.git cd otp git checkout maint-25 # current latest stable version ./configure make make install安裝完后&#xff0c;驗證是否成功 # 命令行輸入 erl

7.用戶、角色、菜單表SQL

用戶與角色是 多對多的關系&#xff1b; 角色與菜單權限 多對多的關系&#xff1b; 菜單權限表 create table acl_permission (id char(19) not null DEFAULT COMMENT 編號,pid CHAR(19) not null DEFAULT COMMENT 所屬上級,name VARCHAR(20) not NULL DEFAULT COMMENT …

C語言經典例題-7

1.計算三角形的周長和面積 題目描述&#xff1a; 根據給出的三角形3條邊a, b, c&#xff08;0 < a, b, c < 100,000&#xff09;&#xff0c;計算三角形的周長和面積。 輸入描述: 一行&#xff0c;三角形3條邊&#xff08;能構成三角形&#xff09;&#xff0c;中間用…

【ARM 嵌入式 C 入門及漸進 12.3 -- 將數值的第 s 位到 e 位清零】

請閱讀【嵌入式開發學習必備專欄】 文章目錄 將數值的第 s 位到 e 位清零 將數值的第 s 位到 e 位清零 為了定義一個VAL_CLR_BITS(val, s, n)宏&#xff0c;該宏將變量val的第s位到第n位清零&#xff08;假設n > s&#xff09;&#xff0c;其余位的值保持不變&#xff0c;我…

系統集成項目管理工程師第4章思維導圖發布

2024年開年&#xff0c;軟考系統集成項目管理工程師官方教程&#xff0c;迎來了闊別7年的大改版&#xff0c;改版之后的軟考中項考試&#xff0c;離同宗兄弟高項考試漸行漸遠。 中項第3版教程&#xff0c;僅僅從教程來看&#xff0c;其難度已經不亞于高級的信息系統項目管理師&…

數據結構與算法學習筆記三---循環隊列的表示和實現(C語言)

目錄 前言 1.為啥要使用循環隊列 2.隊列的順序表示和實現 1.定義 2.初始化 3.銷毀 4.清空 5.空隊列 6.隊列長度 7.獲取隊頭 8.入隊 9.出隊 10.遍歷隊列 11.完整代碼 前言 本篇博客介紹棧和隊列的表示和實現。 1.為啥要使用循環隊列 上篇文章中我們知道了順序隊列…

Hive Transaction事務表(含實現原理)

Hive Transaction事務表 在Hive中&#xff0c;事務表&#xff08;Transactional Tables&#xff09;允許用戶執行事務性操作&#xff0c;包括ACID&#xff08;原子性、一致性、隔離性、持久性&#xff09;特性。事務表是在Hive 0.14版本引入的&#xff0c;并且在后續版本中不斷…

LabVIEW天然氣壓縮因子軟件設計

LabVIEW天然氣壓縮因子軟件設計 項目背景 天然氣作為一種重要的能源&#xff0c;其壓縮因子的準確計算對于流量的計量和輸送過程的優化具有關鍵意義。傳統的計算方法不僅步驟繁瑣&#xff0c;而且難以滿足現場快速響應的需求。因此&#xff0c;開發一款既能保證計算精度又便于…

使用Pandas對Data列進行基于順序的分組排列

目錄 一、引言 二、Pandas庫簡介 三、按照數據列中元素出現的先后順序進行分組排列 四、案例分析 五、技術細節探討與擴展應用 1. 技術細節 2. 擴展應用 3. 示例代碼&#xff1a;用戶行為分析 4. 進階應用&#xff1a;分組后的聚合操作 5. 分組后的數據篩選 6. 分組…

【DevOps】Linux 安全:iptables 組成、命令及應用場景詳解

導讀&#xff1a;全面掌握 iptables&#xff1a;從基礎到實踐 在 Linux 系統中&#xff0c;iptables 是一個非常強大的工具&#xff0c;它不僅是系統管理員用來構建和管理網絡防火墻的首選工具&#xff0c;而且也是一個功能豐富的網絡流量處理系統。無論是進行包過濾、監控網絡…

學習筆記:【QC】Android Q qmi擴展nvReadItem/nvWriteItem

一、qmi初始化 流程圖 初始化流程: 1、主入口&#xff1a; vendor/qcom/proprietary/qcril-hal/qcrild/qcrild/rild.c int main(int argc, char **argv) { const RIL_RadioFunctions *(*rilInit)(const struct RIL_Env *, int, char **); rilInit RIL_Init; funcs rilInit…

孩子通過編程可以收獲什么?

編程是一種高度創造性的活動&#xff0c;它可以幫助孩子們培養出許多有價值的技能和品質。通過學習編程&#xff0c;孩子們可以收獲以下幾點&#xff1a; 邏輯思維能力 編程是一種需要嚴密的邏輯思維和分析能力的活動。在編程過程中&#xff0c;孩子們需要理清思路&#xff0c;…

李彥宏回顧大模型重構百度這一年

“大模型我們走在最前面&#xff0c;我們需要去勇闖無人區&#xff0c;需要去冒前人沒有冒過的風險。”近日&#xff0c;在百度一場內部頒獎活動中&#xff0c;百度創始人、董事長兼首席執行官李彥宏指出&#xff0c;百度一直堅信技術可以改變世界&#xff0c;會一直沿著這條路…

docker的centos容器使用yum報錯

錯誤描述 學習docker過程中&#xff0c;基于 centos 鏡像自定義新的鏡像。拉取一個Centos鏡像&#xff0c;并運行容器&#xff0c;容器安裝vim&#xff0c;報錯了。 報錯&#xff1a;Error: Failed to download metadata for repo appstream: Cannot prepare internal mirror…

python視頻轉碼腳本

今天有一個臨時的需求&#xff0c;就是需要將一個wmv的初步轉碼成mp4的格式。找了一圈&#xff0c;免費的工具少&#xff0c;即使有免費的工具&#xff0c;在功能上也是有所限制&#xff0c;或者會給你塞廣告或者附帶安裝其它流氓小游戲或者殺毒程序。 我并非不支持正版&#…

C++面向對象學習筆記五

本文主要講解運算符重載&#xff0c;由于白鳯大佬沒有具體講解&#xff0c;所以本文自行補充了運算符重載的相關知識 目錄 文章目錄 前言 運算符重載 加號運算符重載 左移運算符重載 遞增運算符重載 總結 前言 本文主要對于運算符重載進行探討&#xff0c;分別對于成員函數重…