最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python自動(dòng)化快速實(shí)現(xiàn)將HTML轉(zhuǎn)換為PDF格式

 更新時(shí)間:2026年04月10日 08:35:45   作者:E-iceblue  
HTML(超文本標(biāo)記語(yǔ)言)是一種用于創(chuàng)建網(wǎng)頁(yè)的標(biāo)準(zhǔn)標(biāo)記語(yǔ)言,主要用于定義內(nèi)容的結(jié)構(gòu)與布局,在今天的文章中,我們就來(lái)看看如何在?Python?中將?HTML?快速轉(zhuǎn)換為?PDF,實(shí)現(xiàn)高效與精準(zhǔn)的文檔處理,希望對(duì)大家有所幫助

HTML(超文本標(biāo)記語(yǔ)言)是一種用于創(chuàng)建網(wǎng)頁(yè)的標(biāo)準(zhǔn)標(biāo)記語(yǔ)言,主要用于定義內(nèi)容的結(jié)構(gòu)與布局,但當(dāng)你需要將其作為本地文檔展示或存檔時(shí),PDF 才是更加適合的選擇。無(wú)論是生成電子發(fā)票、技術(shù)文檔,還是導(dǎo)出美觀的報(bào)表,PDF 都能跨平臺(tái)地保留原始排版與視覺(jué)樣式。在今天的文章中,我們就來(lái)看看如何在 Python 中將 HTML 快速轉(zhuǎn)換為 PDF,實(shí)現(xiàn)高效與精準(zhǔn)的文檔處理。

準(zhǔn)備工作

在開始編寫代碼之前,我們需要安裝支持文檔處理的 Python 庫(kù)。本文將使用 Spire.Doc for Python,它能夠解析 HTML 的 CSS 樣式并將其精準(zhǔn)地渲染到 PDF 頁(yè)面中。你可以通過(guò) pip 快速安裝:

pip install Spire.Doc

也可以到 E-ICEBLUE 官網(wǎng)下載 Spire.Doc 安裝包,然后進(jìn)行自定義手動(dòng)安裝。此外,該產(chǎn)品還提供免費(fèi)版,專門用于小型項(xiàng)目或購(gòu)買商業(yè)版前的測(cè)試。

在 Python 中將 HTML 文件轉(zhuǎn)換為 PDF

如果我們已經(jīng)擁有現(xiàn)成的 HTML 靜態(tài)文件,通過(guò)直接加載的方式進(jìn)行轉(zhuǎn)換是最為高效的選擇。這種方法非常適合處理大量的網(wǎng)頁(yè)存檔、離線技術(shù)手冊(cè)或自動(dòng)生成的測(cè)試報(bào)告。在具體實(shí)現(xiàn)上,我們通過(guò)調(diào)用庫(kù)中封裝好的文件處理接口,能夠確保 HTML 的層級(jí)結(jié)構(gòu)被完整映射到文檔模型中,從而實(shí)現(xiàn)格式的精準(zhǔn)轉(zhuǎn)換。

代碼實(shí)現(xiàn)步驟:

  1. 創(chuàng)建一個(gè) Document 類的對(duì)象。
  2. 調(diào)用 LoadFromFile 方法,加載 HTML 文件。
  3. 調(diào)用 SaveToFile 方法,將 HTML 保存為 PDF 格式的文件。

下方為代碼實(shí)例,使用時(shí)注意將文件路徑替換為真實(shí)路徑:

from spire.doc import Document, FileFormat, XHTMLValidationType

# 創(chuàng)建 Document 類的對(duì)象
doc = Document()

# 載入本地 HTML 文件
doc.LoadFromFile("input/示例文檔.html", FileFormat.Html, XHTMLValidationType.none)

# 將內(nèi)容直接保存為 PDF 格式
doc.SaveToFile("output/HTML文件轉(zhuǎn)PDF.pdf", FileFormat.PDF)
doc.Close()

HTML 文件與轉(zhuǎn)換后的 PDF 文件對(duì)比示意圖:

在 Python 中將 HTML 字符串轉(zhuǎn)換為 PDF

對(duì)于動(dòng)態(tài)生成的內(nèi)容,例如從數(shù)據(jù)庫(kù)調(diào)取數(shù)據(jù)并渲染到 HTML 模板的情況,直接處理字符串流比操作文件更加靈活。這種方式提高程序的響應(yīng)速度和處理邏輯的連貫性。

在代碼中,我們主要使用將字符串寫入文檔段落的方法來(lái)將其轉(zhuǎn)換為標(biāo)準(zhǔn)的 PDF 文件。這樣不僅能保持復(fù)雜的 CSS 樣式,還能方便地與其它動(dòng)態(tài)生成的文檔元素進(jìn)行拼接。

代碼實(shí)現(xiàn)步驟:

  1. 創(chuàng)建文檔對(duì)象后,依次添加 SectionParagraph。
  2. 使用 AppendHTML 方法,將 HTML 字符串動(dòng)態(tài)寫入段落。
  3. 通過(guò) SaveToFile 方法將整個(gè)文檔結(jié)構(gòu)渲染為 PDF 文件。
from spire.doc import Document, FileFormat

# 創(chuàng)建文檔對(duì)象并添加結(jié)構(gòu)
doc = Document()
sec = doc.AddSection() 
par = sec.AddParagraph() 

# 定義包含 CSS 樣式的 HTML 字符串
html_string = """
<html>
<head>
    <style>
        h1 { color: #2c3e50; font-family: Arial; }
        table { border-collapse: collapse; width: 100%; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>
    <h1>旅游統(tǒng)計(jì)報(bào)表</h1>
    <table>
        <tr><th>國(guó)家</th><th>收入(億美元)</th></tr>
        <tr><td>法國(guó)</td><td>79.5</td></tr>
        <tr><td>美國(guó)</td><td>76.9</td></tr>
    </table>
</body>
</html>
"""

# 將 HTML 字符串渲染進(jìn)段落
par.AppendHTML(html_string)

# 保存文檔
doc.SaveToFile("E:/Administrator/Python1/output/HTML字符串轉(zhuǎn)PDF.pdf", FileFormat.PDF)
doc.Close()

保存后的 PDF 文件預(yù)覽:

進(jìn)階配置:轉(zhuǎn)換時(shí)設(shè)置頁(yè)邊距與頁(yè)面大小

直接將 HTML 文件或字符串轉(zhuǎn)換為 PDF 雖然簡(jiǎn)便快捷,但在實(shí)際的應(yīng)用中,默認(rèn)的頁(yè)面設(shè)置不一定能夠匹配多種需求。因此,我們可以在轉(zhuǎn)換前通過(guò) PageSetup 類對(duì) PDF 的頁(yè)邊距、紙張大?。ㄈ?A4、Letter)進(jìn)行微調(diào)。

設(shè)置頁(yè)邊距

# 設(shè)置頁(yè)邊距(單位通常為磅)
sec.PageSetup.Margins.Top = 50.0
sec.PageSetup.Margins.Bottom = 50.0
sec.PageSetup.Margins.Left = 40.0
sec.PageSetup.Margins.Right = 40.0

合理的頁(yè)邊距設(shè)置不僅能讓文檔看起來(lái)更專業(yè),還能有效避免內(nèi)容被裁切。

設(shè)置頁(yè)面大小為 A4

# 設(shè)置頁(yè)面大小為 A4 紙張
# 還可以選擇 Letter, Legal, A3 等其他標(biāo)準(zhǔn)預(yù)設(shè)
sec.PageSetup.PageSize = PageSize.A4()

# 也可以手動(dòng)指定頁(yè)面的寬度和高度(單位:磅)
# sec.PageSetup.PageSize = SizeF(600.0, 800.0)

設(shè)置頁(yè)面大小有助于使內(nèi)容能夠適配打印輸出或屏幕閱讀。

知識(shí)拓展

下面是小編為大家整理的Python借用免費(fèi)開源庫(kù)實(shí)現(xiàn)HTML 轉(zhuǎn) PDF的方法,希望對(duì)大家有所幫助

1.WeasyPrint (推薦)

適合需要生成高質(zhì)量報(bào)告、發(fā)票等專業(yè)文檔的場(chǎng)景,特別在處理表格、字體嵌入和多欄排版時(shí)表現(xiàn)出色。

from weasyprint import HTML, CSS
from weasyprint.text.fonts import FontConfiguration
# 準(zhǔn)備HTML內(nèi)容
html_content = """
<html>
<head><meta charset="UTF-8"><title>報(bào)告</title></head>
<body><h1>銷售報(bào)表</h1><p>2026年Q1數(shù)據(jù)...</p></body>
</html>
"""
# 字體配置(推薦)
font_config = FontConfiguration()
HTML(string=html_content).write_pdf(
    'report.pdf',
    stylesheets=[CSS(string='@page { size: A4; margin: 2cm; }')],
    font_config=font_config
)

注意:WeasyPrint 默認(rèn)不支持外部網(wǎng)絡(luò)字體,可通過(guò) font_config 參數(shù)指定自定義字體文件路徑。

2.Playwright

如果你需要完整保留網(wǎng)頁(yè)的JS交互效果和精確布局,Playwright是最佳選擇。

from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto('https://example.com')
    page.pdf(path='example.pdf', format='A4')
    browser.close()

3.pdfkit

適合快速將靜態(tài)HTML內(nèi)容轉(zhuǎn)換為PDF,或?qū)khtmltopdf有使用經(jīng)驗(yàn)的開發(fā)者。

import pdfkit
# 從URL生成
pdfkit.from_url('https://example.com', 'example.pdf')
# 從文件生成
pdfkit.from_file('input.html', 'output.pdf')

注意:使用前需先安裝 wkhtmltopdf 命令行工具。

4.xhtml2pdf

適合處理簡(jiǎn)單HTML結(jié)構(gòu)且對(duì)代碼體積有要求的項(xiàng)目。

from xhtml2pdf import pisa
with open('test.pdf', 'w+b') as result_file:
    pisa.CreatePDF('<p>簡(jiǎn)單內(nèi)容</p>', dest=result_file)

注意:xhtml2pdf 對(duì) CSS 3 的支持有限,布局可能失真。

避坑指南:排查和解決常見(jiàn)問(wèn)題

1.網(wǎng)絡(luò)資源加載失敗(WeasyPrint/pdfkit):HTML 中引用的 CSS、JS、圖片如果使用相對(duì)路徑,可能無(wú)法加載。建議替換為絕對(duì)路徑,或使用 --enable-local-file-access 選項(xiàng)。

2.中文字體顯示為方塊(所有本地工具):系統(tǒng)未安裝中文字體??芍付ㄏ到y(tǒng)中已安裝的字體(如 SimHei、Microsoft YaHei),或通過(guò)代碼嵌入 .ttf 字體文件并指定 @font-face。

3.頁(yè)面分頁(yè)錯(cuò)亂(WeasyPrint/pdfkit):通過(guò) CSS 的 page-break-before/after/inside 屬性精確控制分頁(yè);@page 可定義頁(yè)邊距和頁(yè)眉頁(yè)腳。

4.安裝依賴錯(cuò)誤(pdfkit)pdfkit 只是 Python 的封裝,必須在系統(tǒng)中單獨(dú)安裝 wkhtmltopdf 并配置環(huán)境變量。如果提示未找到,可在代碼中指定可執(zhí)行文件路徑:

config = pdfkit.configuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe')
pdfkit.from_url('url', 'out.pdf', configuration=config)

5.CSS Flex/Grid 樣式丟失:WeasyPrint 對(duì) Flexbox/Grid 支持較好,而 pdfkit/wkhtmltopdf 基于過(guò)時(shí)的 Qt WebKit,無(wú)法渲染現(xiàn)代 CSS。這種情況建議改用 WeasyPrint。

6.性能問(wèn)題:批量轉(zhuǎn)換大量 HTML 時(shí),可復(fù)用 Playwright 的瀏覽器實(shí)例,或?qū)?WeasyPrint 使用多線程并發(fā)處理,避免每次轉(zhuǎn)換都重新啟動(dòng)瀏覽器。

總結(jié)

通過(guò)以上兩種方法,我們可以輕松應(yīng)對(duì)各種 HTML 轉(zhuǎn) PDF 的場(chǎng)景。無(wú)論是處理現(xiàn)有的文件庫(kù),還是動(dòng)態(tài)渲染即時(shí)生成的網(wǎng)頁(yè)數(shù)據(jù),Spire.Doc for Python 都能提供簡(jiǎn)單高效的解決方案。

以上就是Python自動(dòng)化快速實(shí)現(xiàn)將HTML轉(zhuǎn)換為PDF格式的詳細(xì)內(nèi)容,更多關(guān)于Python HTML轉(zhuǎn)PDF的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python中自動(dòng)化運(yùn)維應(yīng)用詳細(xì)指南

    Python中自動(dòng)化運(yùn)維應(yīng)用詳細(xì)指南

    Python?在自動(dòng)化運(yùn)維(DevOps)中扮演著重要角色,通過(guò)豐富的第三方庫(kù)和框架,可以高效完成服務(wù)器管理、配置部署、監(jiān)控告警、日志分析等任務(wù),下面我們來(lái)看看具體應(yīng)用吧
    2025-06-06
  • Python 數(shù)據(jù)化運(yùn)營(yíng)之KMeans聚類分析總結(jié)

    Python 數(shù)據(jù)化運(yùn)營(yíng)之KMeans聚類分析總結(jié)

    這篇文章主要介紹了Python 數(shù)據(jù)化運(yùn)營(yíng)KMeans聚類相關(guān)的一些總結(jié),感興趣的話一起來(lái)閱讀下文吧
    2021-08-08
  • Python?Flask?上傳文件測(cè)試示例

    Python?Flask?上傳文件測(cè)試示例

    這篇文章主要為大家介紹了Python?Flask?上傳文件測(cè)試的方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 如何使用Python的Requests包實(shí)現(xiàn)模擬登陸

    如何使用Python的Requests包實(shí)現(xiàn)模擬登陸

    這篇文章主要為大家詳細(xì)介紹了使用Python的Requests包模擬登陸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • python切片的步進(jìn)、添加、連接簡(jiǎn)單操作示例

    python切片的步進(jìn)、添加、連接簡(jiǎn)單操作示例

    這篇文章主要介紹了python切片的步進(jìn)、添加、連接簡(jiǎn)單操作,結(jié)合實(shí)例形式分析了Python切片運(yùn)算的常見(jiàn)操作技巧,需要的朋友可以參考下
    2019-07-07
  • python中reload重載實(shí)例用法

    python中reload重載實(shí)例用法

    在本篇文章里小編給大家整理的是一篇關(guān)于python中reload重載實(shí)例用法相關(guān)知識(shí)點(diǎn),有興趣的朋友們可以參考下。
    2020-12-12
  • Python爬蟲之批量下載喜馬拉雅音頻

    Python爬蟲之批量下載喜馬拉雅音頻

    今天教大家如何利用Python爬蟲批量下載喜馬拉雅音頻,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Python守護(hù)進(jìn)程用法實(shí)例分析

    Python守護(hù)進(jìn)程用法實(shí)例分析

    這篇文章主要介紹了Python守護(hù)進(jìn)程用法,實(shí)例分析了Python守護(hù)進(jìn)程的功能及使用方法,需要的朋友可以參考下
    2015-06-06
  • 淺談Python幾種常見(jiàn)的歸一化方法

    淺談Python幾種常見(jiàn)的歸一化方法

    這篇文章主要介紹了幾種常見(jiàn)的歸一化方法,數(shù)據(jù)歸一化是深度學(xué)習(xí)數(shù)據(jù)預(yù)處理中非常關(guān)鍵的步驟,可以起到統(tǒng)一量綱,防止小數(shù)據(jù)被吞噬的作用,需要的朋友可以參考下
    2023-04-04
  • Python基礎(chǔ)教程之Pandas數(shù)據(jù)分析庫(kù)詳解

    Python基礎(chǔ)教程之Pandas數(shù)據(jù)分析庫(kù)詳解

    Pandas是一個(gè)基于 NumPy 的非常強(qiáng)大的開源數(shù)據(jù)處理庫(kù),它提供了高效、靈活和豐富的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,本文中,我們將學(xué)習(xí)如何使用Pandas來(lái)處理和分析數(shù)據(jù),感興趣的小伙伴跟著小編一起來(lái)看看吧
    2023-07-07

最新評(píng)論

茶陵县| 泰宁县| 天峻县| 栾川县| 玉田县| 嘉善县| 米泉市| 新民市| 灵丘县| 石楼县| 山阴县| 昌江| 大姚县| 黎平县| 迁西县| 通州区| 仁布县| 应城市| 苍南县| 台中县| 石嘴山市| 孙吴县| 南郑县| 许昌市| 张北县| 忻城县| 安远县| 磴口县| 奉节县| 西丰县| 格尔木市| 云梦县| 广西| 丽水市| 威信县| 钟祥市| 皋兰县| 敦化市| 钦州市| 通渭县| 分宜县|