Python 高效實現 Word 轉 PDF:告別 Office 依賴

在工作中,經常會遇到需要把 Word 文檔轉換成 PDF 的情況。比如生成報表、分發文檔、或者做歸檔保存,PDF 格式在排版和跨平臺顯示上更穩定。

傳統的做法往往依賴 Microsoft Office 或 LibreOffice 等軟件來完成轉換,但在自動化環境(如服務器、Docker 容器、Linux 系統)中,這類方式會遇到一些限制:需要額外安裝軟件、依賴復雜,甚至存在兼容性問題。

因此,很多開發者更希望使用無依賴的 Python 庫來完成轉換。本文將介紹如何借助 Spire.Doc for Python庫,在不依賴 Office 的情況下,實現 doc 轉 pdf、docx 轉 pdf,并支持批量轉換與多種轉換設置。


一、安裝 Spire.Doc for Python

在使用之前,需要先安裝庫。可以直接使用以下 pip 命令來安裝:

pip?install?spire-doc

安裝完成后,就可以在 Python 代碼中使用 from spire.doc import *?導入該庫的模塊來處理和轉換 Word 文檔。


二、Python Word 轉 PDF 基本示例

下面是 Word 轉 PDF 一個最基礎的示例。只需要兩步:加載文件、保存為 PDF。

from?spire.doc?import?*#?創建文檔對象
doc?=?Document()#?加載?Word?文件
doc.LoadFromFile("input.docx")#?轉換并保存為?PDF
doc.SaveToFile("output.pdf",?FileFormat.PDF)#?關閉文檔,釋放資源
doc.Close()

代碼說明

  • Document():創建一個 Word 文檔對象。
  • LoadFromFile("input.docx"):加載指定路徑的 Word 文件。
  • SaveToFile("output.pdf", FileFormat.PDF):將文檔保存為 PDF 格式。
  • Close():關閉文檔,釋放資源。

三、批量轉換 Word 文檔為 PDF

如果有大量 Word 文件需要轉換,可以將它們放在一個目錄下,然后遍歷目錄并批量轉換。以下是具體的代碼示例:

import?os
from?spire.doc?import?*input_dir?=?"word_files"
output_dir?=?"pdf_files"
os.makedirs(output_dir,?exist_ok=True)for?file?in?os.listdir(input_dir):if?file.endswith(".doc")?or?file.endswith(".docx"):doc?=?Document()doc.LoadFromFile(os.path.join(input_dir,?file))pdf_path?=?os.path.join(output_dir,?file.rsplit(".",?1)[0]?+?".pdf")doc.SaveToFile(pdf_path,?FileFormat.PDF)doc.Close()

代碼說明

  • os.listdir(input_dir):遍歷文件夾中的所有文件。
  • file.endswith(".doc") or file.endswith(".docx"):只處理 Word (.doc 或 .docx)文件。
  • os.makedirs(output_dir, exist_ok=True):如果目標文件夾不存在,則自動創建。
  • 每次處理完一個文檔后調用 Close(),避免內存占用過多。

四、轉換設置與優化

在不同的應用場景下,生成的 PDF 可能需要不同的屬性,例如文件體積更小、排版更精細、符合歸檔標準等。Spire.Doc for Python 提供了可調節的參數來滿足這些需求。

1. 圖片優化(減小 PDF 大小)

#?將圖像壓縮到原始質量的40%
doc.JPEGQuality?=?40#?保留原始圖像質量 (圖片質量參數:0-100)
#?doc.JPEGQuality?=?100

這樣可以有效減小 PDF 文件大小,適合包含大量圖片的 Word 文檔。

2. 字體嵌入處理(避免亂碼)

#?創建?ToPdfParameterList?類的對象
parameter?=?ToPdfParameterList()#?將字體嵌入到生成的PDF中
parameter.IsEmbeddedAllFonts?=?True#?將文檔保存為PDF
document.SaveToFile("output.pdf",?parameter)

避免目標設備缺少字體時,導致 PDF 顯示異常。

3. PDF/A 合規標準

#?創建?ToPdfParameterList?類的對象
parameters?=?ToPdfParameterList()#?設置?PDF/A?合規標準
parameters.PdfConformanceLevel?=?PdfConformanceLevel.Pdf_A1A#?將文檔保存為?PDF/A-1a?文件
document.SaveToFile("output.pdf",?parameters)

用于生成符合 PDF/A 標準的文件,常用于檔案歸檔。

4. 加密與權限控制

#?創建?ToPdfParameterList?類的對象
parameter?=?ToPdfParameterList()#?設置打開密碼和權限密碼,并用其保護生成的?PDF?文件
openPsd?=?"abc123"
permissionPsd?=?"E-iceblue"
parameter.PdfSecurity.Encrypt(openPsd,?permissionPsd,?PdfPermissionsFlags.Default,?PdfEncryptionKeySize.Key128Bit)#?將文檔保存為加密的PDF
document.SaveToFile("output.pdf",?parameter)

可以為 PDF 設置打開密碼,并限制打印、復制等操作。


五、異常處理

import?os
from?spire.doc?import?*input_dir?=?"word_files"
output_dir?=?"pdf_files"
os.makedirs(output_dir,?exist_ok=True)for?file?in?os.listdir(input_dir):if?file.endswith(".doc")?or?file.endswith(".docx"):try:doc?=?Document()doc.LoadFromFile(os.path.join(input_dir,?file))pdf_path?=?os.path.join(output_dir,?file.rsplit(".",?1)[0]?+?".pdf")doc.SaveToFile(pdf_path,?FileFormat.PDF)print(f"成功轉換:?{file}?→?{pdf_path}")except?Exception?as?e:print(f"轉換失敗:?{file},?錯誤信息:?{str(e)}")finally:if?'doc'?in?locals():doc.Close()

代碼說明

  • try ... except ... finally:保證即使出錯,程序也能繼續執行。
  • print(f"..."):方便輸出日志,便于排查問題。
  • finally?確保即使出錯,也會關閉文檔,避免內存泄漏。

六、適用場景

  • 自動化報表生成:將 Word 報表定時轉換為 PDF。
  • 文檔歸檔:統一轉換為 PDF/A,方便長期保存。
  • 在線服務:搭建“上傳 Word → 下載 PDF”的 Web 接口。
  • 批量處理:快速將大量 Word 文件轉換為 PDF,提升工作效率。

七、總結

本文介紹了在 Python 中使用 Spire.Doc 實現 Word 文檔到 PDF 的轉換方法。通過實例演示了:

  • 單文件和批量文件的轉換流程;
  • 轉換過程中可配置的參數,如圖像壓縮、字體嵌入、PDF/A 合規性和加密設置;
  • 異常處理與資源釋放的注意事項,確保在批量或自動化場景下程序穩定運行。

總體來看,利用 Spire.Doc 可以在不依賴 Office 的環境中完成高效、穩定的 Word 到 PDF 轉換,并且轉換選項靈活,可根據具體需求調整。上述方法適合在報表生成、文檔歸檔或在線文檔處理等場景中應用。

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

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

相關文章

SQL優化簡單思路

1. 背景 在實際生產中,因為SQL較慢、SQL關聯不合理、不了解索引的性質、不熟悉mysql執行計劃分析,可能會出現一些生產事故,本文會簡單說明SQL通常的優化分析思路。 基本的優化原則: 先優化SQL再優化mysql server最后優化硬件 2. 優…

軟考 系統架構設計師系列知識點之雜項集萃(144)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(143) 第268題 甲、乙、丙、丁4人加工A、B、C、D四種工件所需工時如下表所示。指派每人加工一種工件,四人加工四種工件其總工時最短的最優方案中,工件B應由()加工。 A B C D 甲

P1168 中位數

題目描述給定一個長度為 N 的非負整數序列 A,對于前奇數項求中位數。輸入格式第一行一個正整數 N。第二行 N 個正整數 A1…N?。輸出格式共 ?2N1?? 行,第 i 行為 A1…2i?1? 的中位數。輸入輸出樣例輸入 #1復制7 1 3 5 7 9 11 6輸出 #11 3 5 6輸入 #…

【CE】圖形化CE游戲教程通關手冊

【CE】圖形化CE游戲教程通關手冊 文章目錄【CE】圖形化CE游戲教程通關手冊導讀需求1?? 第一關提示操作總結2?? 第二關(代碼共享)提示操作驗證3?? 第三關提示提示總結導讀 需求 除了Tutorial-x86_64.exe教程外,CE還提供了圖形化教程gtu…

leetcode 2785. 將字符串中的元音字母排序 中等

給你一個下標從 0 開始的字符串 s &#xff0c;將 s 中的元素重新 排列 得到新的字符串 t &#xff0c;它滿足&#xff1a;所有輔音字母都在原來的位置上。更正式的&#xff0c;如果滿足 0 < i < s.length 的下標 i 處的 s[i] 是個輔音字母&#xff0c;那么 t[i] s[i] 。…

支付子系統架構及常見問題

支付流程對于支付系統來說&#xff0c;它最重要的其實是安全&#xff0c;所以整個支付流程采用秘鑰加簽的方式進行操作&#xff0c;一共四對秘鑰&#xff0c;以支付寶在線支付為例子&#xff0c;首先通過RSA2算法生成商戶公鑰以及商戶私鑰&#xff0c;同時支付寶平臺會提供支付…

內存傳輸速率MT/s

1 0 0 0 0 0 0 0 0 010 9 8 7 6 5 4 3 2 1十 億 千 百 十 萬 千 百 十 個億 萬 萬 萬傳輸速率 …

.env文件的作用和使用方法

目錄 什么是 .env 文件&#xff1f; 為什么要使用 .env 文件&#xff1f;&#xff08;好處&#xff09; 如何使用 .env 文件&#xff1f; 通用步驟&#xff1a; 具體技術棧中的實現&#xff1a; 最佳實踐和注意事項 總結 什么是 .env 文件&#xff1f; .env 文件&#x…

深度拆解 Python 裝飾器參數傳遞:從裝飾器生效到參數轉交的每一步

在 Python 裝飾器的學習中&#xff0c;“被裝飾函數的參數如何傳遞到裝飾器內層函數”是一個高頻疑問點。很多開發者能寫出裝飾器的基本結構&#xff0c;卻對參數傳遞的底層邏輯一知半解。本文將以一段具體代碼為例&#xff0c;把參數傳遞過程拆成“裝飾器生效→調用觸發→參數…

【Vue2 ?】Vue2 入門之旅 · 進階篇(七):Vue Router 原理解析

在前幾篇文章中&#xff0c;我們介紹了 Vue 的性能優化機制、組件緩存等內容。本篇將深入解析 Vue Router 的原理&#xff0c;了解 Vue 如何管理路由并進行導航。 目錄 Vue Router 的基本概念路由模式&#xff1a;hash 和 history路由匹配原理導航守衛Vue Router 的路由過渡動…

Linux磁盤級文件/文件系統理解

Linux磁盤級文件/文件系統理解 1. 磁盤的物理結構 磁盤的核心是一個利用磁性介質和機械運動進行數據讀寫的、非易失性的存儲設備。 1.1 盤片 盤片是傳統機械硬盤中最核心的部件&#xff0c;它是數據存儲的物理載體。盤片是一個堅硬的、表面極度光滑的圓形碟片&#xff0c;被安裝…

【星海出品】rabbitMQ - 叁 應用篇

rabbitMQ 的基礎知識這里就不闡述了,可以參看我早年寫的文章 -> rabbitMQ 入門 https://blog.csdn.net/weixin_41997073/article/details/118724779 Celery 官網:http://www.celeryproject.org/ Celery 官方文檔英文版:http://docs.celeryproject.org/en/latest/index.h…

C# 每個chartArea顯示最小值、平均值、最大值

private void AddStatisticsAnnotations(ChartArea chartArea, int channelIndex) {RemoveExistingAnnotations(channelIndex);// 獲取ChartArea的相對坐標&#xff08;百分比&#xff09;float chartAreaX chartArea.Position.X; // X坐標&#xff08;百分比&#xff09;floa…

打破“不可能三角”:WALL-OSS開源,具身智能迎來“安卓時刻”?

目錄 引言&#xff1a;當“大腦”學會思考&#xff0c;機器人才能走出實驗室 一、具身智能的“不可能三角”&#xff1a;機器人“大腦”的核心困境 二、WALL-OSS的四把重錘&#xff1a;如何系統性地破解難題&#xff1f; 2.1 第一錘&#xff1a;更聰明的“大腦”架構 —— …

SigNoz分布式追蹤新體驗:cpolar實現遠程微服務監控

前言 SigNoz是一款開源的應用性能監控工具&#xff0c;專為微服務架構設計&#xff0c;集成了指標、追蹤和日志分析功能。它能夠全面監控分布式系統的性能&#xff0c;幫助開發團隊快速定位問題根源。SigNoz支持OpenTelemetry協議&#xff0c;可以無縫集成各種編程語言和框架&…

python編程原子化多智能體綜合編程應用(下)

上述代碼實現了基于Mesa框架的診斷智能體類,包含以下核心功能: 模塊化設計:通過類屬性分離數據與行為,支持不同專科智能體的擴展 狀態管理:實現idle/processing/error等狀態轉換,支持任務調度 診斷推理:集成機器學習模型,支持癥狀提取與多分類診斷 錯誤處理:包含模型加…

QT M/V架構開發實戰:QSqlQueryModel/ QSqlTableModel/ QSqlRelationalTableModel介紹

目錄[TOC](目錄)前言一、初步介紹二、QSqlQueryModel1.基礎定位2.特點3.核心接口4.典型用法5.優缺點三、QSqlTableModel1.基礎定位2.特點3.核心接口4.典型用法5.優缺點四、QSqlRelationalTableModel1.基礎定位2.特點3.核心接口4.典型用法 (示例&#xff1a;employees表有 dept_…

Terraform 從入門到實戰:歷史、原理、功能與阿里云/Azure 上手指南

前言&#xff1a;在云時代&#xff0c;企業的IT基礎設施早已從“幾臺服務器”演變為“橫跨多云的復雜網絡、計算、存儲集群”。但隨之而來的&#xff0c;是管理復雜度的爆炸式增長&#xff1a;開發環境和生產環境不一致、手動配置容易出錯、多云平臺操作方式各異、資源變更難以…

【計算機網絡 | 第10篇】信道復用技術

文章目錄信道復用技術&#xff1a;高效利用通信資源的智慧方案一、頻分復用&#xff08;FDM&#xff09;&#xff1a;按頻率劃分的并行通道二、時分復用&#xff08;TDM&#xff09;&#xff1a;按時間分割的輪流占用三、統計時分復用&#xff08;STDM&#xff09;&#xff1a;…

安卓13_ROM修改定制化-----禁用 Android 導航按鍵的幾種操作

Android 設備的導航按鍵通常包括后退鍵(Back)、主頁鍵(Home)和最近鍵(Recents),這些按鍵位于屏幕底部或設備實體區域。禁用導航按鍵可以幫助在特定應用場景(如信息亭模式或兒童鎖模式)中限制用戶操作。安卓設備上禁用底部虛擬導航鍵(返回、主頁、多任務鍵)有多種方法…