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

使用Python實(shí)現(xiàn)在PDF文檔中生成并添加二維碼

 更新時(shí)間:2026年03月09日 08:27:29   作者:用戶(hù)835629078051  
在自動(dòng)化文檔生成、產(chǎn)品標(biāo)簽制作或信息分發(fā)場(chǎng)景中,經(jīng)常需要在?PDF?文檔中插入二維碼,本文將介紹如何使用?Python?在?PDF?文檔中生成并插入二維碼,有需要的小伙伴可以了解下

在自動(dòng)化文檔生成、產(chǎn)品標(biāo)簽制作或信息分發(fā)場(chǎng)景中,經(jīng)常需要在 PDF 文檔中插入二維碼。二維碼能夠快速存儲(chǔ)和傳遞信息,用戶(hù)通過(guò)手機(jī)掃描即可獲取相關(guān)內(nèi)容。本文將介紹如何使用 Python 在 PDF 文檔中生成并插入二維碼。

環(huán)境準(zhǔn)備

首先需要安裝必要的 Python 庫(kù)。本文使用 Spire.PDF 和 Spire.Barcode 庫(kù)來(lái)處理 PDF 文檔和生成二維碼圖像。

pip install Spire.PDF
pip install Spire.Barcode

技術(shù)思路

在 PDF 中插入二維碼主要有兩種方法:

  • 先生成二維碼圖片,再作為圖像插入 PDF - 使用條碼生成庫(kù)創(chuàng)建二維碼 PNG 圖像,然后將其嵌入 PDF 頁(yè)面
  • 直接在 PDF 畫(huà)布上繪制二維碼 - 部分庫(kù)支持直接在 PDF 圖形上下文中繪制條碼

本文將演示第一種方法,它更加靈活且易于控制二維碼的樣式和位置。

生成二維碼圖像

首先需要?jiǎng)?chuàng)建一個(gè)獨(dú)立的二維碼圖像文件。使用 spire.barcode 模塊可以輕松生成各種類(lèi)型的條碼。

from spire.barcode import *

def WriteAllBytes(fname: str, data):
    """將字節(jié)數(shù)據(jù)寫(xiě)入文件"""
    with open(fname, "wb") as fp:
        fp.write(data)

# 創(chuàng)建條碼設(shè)置對(duì)象
barcodeSettings = BarcodeSettings()

# 設(shè)置條碼類(lèi)型為二維碼
barcodeSettings.Type = BarCodeType.QRCode

# 設(shè)置二維碼包含的數(shù)據(jù)
barcodeSettings.Data = "https://example.com/product/12345"

# 創(chuàng)建條碼生成器
barCodeGenerator = BarCodeGenerator(barcodeSettings)

# 生成二維碼圖像
barcodeImage = barCodeGenerator.GenerateImage()

# 保存為 PNG 文件
WriteAllBytes("QRCode.png", barcodeImage)

這段代碼的關(guān)鍵 API 說(shuō)明:

  • BarcodeSettings - 條碼配置類(lèi),用于設(shè)置條碼類(lèi)型、數(shù)據(jù)、顏色等屬性
  • BarCodeType.QRCode - 指定生成二維碼類(lèi)型
  • BarCodeGenerator - 條碼生成器,根據(jù)配置生成圖像
  • GenerateImage() - 返回圖像的字節(jié)數(shù)據(jù)

將二維碼插入 PDF 文檔

生成二維碼圖像后,可以將其作為圖像 stamp 添加到 PDF 頁(yè)面中。以下是完整的實(shí)現(xiàn)代碼:

from spire.pdf import *
from spire.barcode import BarcodeSettings, BarCodeType, BarCodeGenerator

def WriteAllBytes(fname: str, data):
    with open(fname, "wb") as fp:
        fp.write(data)

# 生成二維碼
barcodeSettings = BarcodeSettings()
barcodeSettings.Type = BarCodeType.QRCode
barcodeSettings.Data = "https://example.com/product/12345"
barcodeSettings.ShowText = False
barcodeSettings.ImageHeight = 230.0
barcodeSettings.ImageWidth = 230.0
barcodeSettings.LeftMargin = 1.0
barcodeSettings.TopMargin = 1.0
barcodeSettings.RightMargin = 1.0
barcodeSettings.BottomMargin = 1.0

barCodeGenerator = BarCodeGenerator(barcodeSettings)
barcodeImage = barCodeGenerator.GenerateImage()
WriteAllBytes("temp_qrcode.png", barcodeImage)

# 創(chuàng)建 PDF 文檔
doc = PdfDocument()
doc.PageSettings.Size = PdfPageSize.A4()
page = doc.Pages.Add()

# 加載二維碼圖像
qrcode = PdfImage.FromFile("temp_qrcode.png")

# 定義二維碼的位置和尺寸矩形 - 固定在頁(yè)面左側(cè)位置
qrcode_width = float(qrcode.Width)
qrcode_height = float(qrcode.Height)
page_width = page.Size.Width
page_height = page.Size.Height

# 計(jì)算二維碼位置:固定在距離左邊界 100 點(diǎn),距離頂部 150 點(diǎn)的位置
stampRect = RectangleF(
    PointF(100.0, 150.0),
    SizeF(qrcode_width, qrcode_height)
)

# 創(chuàng)建橡膠圖章注釋
loStamp = PdfRubberStampAnnotation(stampRect)

# 創(chuàng)建外觀對(duì)象
loAppearance = PdfAppearance(loStamp)

# 創(chuàng)建模板并在其中繪制二維碼
template = PdfTemplate(stampRect.Width, stampRect.Height)
template.Graphics.DrawImage(qrcode, 0.0, 0.0, float(qrcode.Width), float(qrcode.Height))

# 設(shè)置外觀并添加到頁(yè)面注釋集合
loAppearance.Normal = template
loAppearance.MouseHover = template
loAppearance.Pressed = template
loStamp.Appearance = loAppearance
page.AnnotationsWidget.Add(loStamp)

# 添加說(shuō)明文字 - 在二維碼下方適當(dāng)距離
font = PdfTrueTypeFont("微軟雅黑", 12.0, PdfFontStyle.Regular, True)
brush = PdfBrushes.get_Black()
text_y_position = stampRect.Y + stampRect.Height + 20.0  # 二維碼底部向下 20 點(diǎn)間距
page.Canvas.DrawString("掃描二維碼獲取產(chǎn)品詳情", font, brush, stampRect.X, text_y_position)

# 保存文檔
doc.SaveToFile("ProductWithQRCode.pdf")
doc.Close()

插入效果預(yù)覽

代碼解析

二維碼位置控制

RectangleF(PointF(x, y), SizeF(width, height)) 定義了二維碼在 PDF 頁(yè)面上的位置和尺寸:

  • PointF(100.0, 150.0) - 二維碼左上角坐標(biāo),原點(diǎn)位于頁(yè)面左下角
  • SizeF(qrcode_width, qrcode_height) - 二維碼的寬度和高度(單位為點(diǎn),1 點(diǎn) ≈ 1/72 英寸)

直接在畫(huà)布上繪制圖像

除了使用注釋方式,也可以直接在 PDF 畫(huà)布上繪制二維碼圖像:

from spire.pdf.common import *
from spire.pdf import *
from spire.barcode import *

def WriteAllBytes(fname: str, data):
    with open(fname, "wb") as fp:
        fp.write(data)

# 生成二維碼
barcodeSettings = BarcodeSettings()
barcodeSettings.Type = BarCodeType.QRCode
barcodeSettings.Data = "https://example.com/contact"
barCodeGenerator = BarCodeGenerator(barcodeSettings)
barcodeImage = barCodeGenerator.GenerateImage()
WriteAllBytes("contact_qr.png", barcodeImage)

# 創(chuàng)建 PDF 并直接繪制
doc = PdfDocument()
page = doc.Pages.Add()

# 加載圖像
qrcode = PdfImage.FromFile("contact_qr.png")

# 直接在畫(huà)布指定位置繪制圖像
page.Canvas.DrawImage(qrcode, 50.0, 50.0, 120.0, 120.0)

# 添加標(biāo)題
font = PdfFont(PdfFontFamily.Helvetica, 16.0, PdfFontStyle.Bold)
page.Canvas.DrawString("聯(lián)系我們", font, PdfBrushes.get_Black(), 50.0, 180.0)

doc.SaveToFile("ContactCard.pdf")
doc.Close()

這種方法更簡(jiǎn)單直接,適用于不需要交互式功能的場(chǎng)景。

自定義二維碼樣式

可以通過(guò)調(diào)整 BarcodeSettings 的屬性來(lái)自定義二維碼外觀:

barcodeSettings = BarcodeSettings()
barcodeSettings.Type = BarCodeType.QRCode
barcodeSettings.Data = "Custom styled QR code"

# 設(shè)置前景色和背景色
barcodeSettings.ForeColor = Color.get_Black()
barcodeSettings.BackColor = Color.get_White()

# 設(shè)置圖像寬度(影響分辨率)
barcodeSettings.ImageWidth = 300

# 設(shè)置邊距
barcodeSettings.MarginTop = 10
barcodeSettings.MarginBottom = 10
barcodeSettings.MarginLeft = 10
barcodeSettings.MarginRight = 10

barCodeGenerator = BarCodeGenerator(barcodeSettings)
barcodeImage = barCodeGenerator.GenerateImage()

實(shí)用技巧

批量生成帶二維碼的 PDF

當(dāng)需要為多個(gè)產(chǎn)品生成帶不同二維碼的 PDF 時(shí),可以使用循環(huán)處理:

products = [
    {"id": "P001", "url": "https://example.com/p1"},
    {"id": "P002", "url": "https://example.com/p2"},
    {"id": "P003", "url": "https://example.com/p3"}
]

for product in products:
    # 生成二維碼
    barcodeSettings.Data = product["url"]
    # ... 生成圖像和 PDF
    doc.SaveToFile(f"Product_{product['id']}.pdf")

調(diào)整二維碼清晰度

如果打印質(zhì)量要求較高,可以增加二維碼圖像的分辨率:

barcodeSettings.ImageWidth = 600  # 增加寬度提高分辨率
barcodeSettings.DPI = 300         # 設(shè)置 300 DPI 適合打印

總結(jié)

本文介紹了使用 Python 在 PDF 文檔中插入二維碼的完整流程:

  • 使用 spire.barcode 生成二維碼圖像
  • 使用 spire.pdf 創(chuàng)建或加載 PDF 文檔
  • 通過(guò) PdfImage.FromFile() 加載二維碼圖像
  • 使用 DrawImage() 方法將二維碼繪制到指定位置

這種方法適用于產(chǎn)品標(biāo)簽、宣傳材料、聯(lián)系卡片等多種場(chǎng)景。通過(guò)調(diào)整位置和尺寸參數(shù),可以精確控制二維碼在頁(yè)面上的布局,滿(mǎn)足不同的設(shè)計(jì)需求。

到此這篇關(guān)于使用Python實(shí)現(xiàn)在PDF文檔中生成并添加二維碼的文章就介紹到這了,更多相關(guān)Python PDF添加二維碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python pandas輕松通過(guò)特定列的值多條件去篩選數(shù)據(jù)及contains方法的使用

    python pandas輕松通過(guò)特定列的值多條件去篩選數(shù)據(jù)及contains方法的使用

    這篇文章主要介紹了python pandas輕松通過(guò)特定列的值多條件去篩選數(shù)據(jù)及contains方法的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python?Type?Hints?學(xué)習(xí)之從入門(mén)到實(shí)踐

    Python?Type?Hints?學(xué)習(xí)之從入門(mén)到實(shí)踐

    Type?Hints(類(lèi)型注解)進(jìn)一步強(qiáng)化了Python是一門(mén)強(qiáng)類(lèi)型語(yǔ)言的特性,它在?Python3.5?中第一次被引入。使用Type?Hints可以讓我們編寫(xiě)出帶有類(lèi)型的Python代碼,本文將詳細(xì)介紹一下Type?Hints,感興趣的小伙伴可以關(guān)注一下
    2021-11-11
  • Pygame實(shí)戰(zhàn)練習(xí)之紙牌21點(diǎn)游戲

    Pygame實(shí)戰(zhàn)練習(xí)之紙牌21點(diǎn)游戲

    21點(diǎn)想必是很多人童年時(shí)期的經(jīng)典游戲,我們依舊能記得抱個(gè)老人機(jī)娛樂(lè)的場(chǎng)景,下面這篇文章主要給大家介紹了關(guān)于如何利用python寫(xiě)一個(gè)簡(jiǎn)單的21點(diǎn)小游戲的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 提升Python運(yùn)行速度的5個(gè)小技巧

    提升Python運(yùn)行速度的5個(gè)小技巧

    這篇文章主要為大家介紹了Python提升運(yùn)行速度的幾個(gè)小技巧,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • 詳談pandas中agg函數(shù)和apply函數(shù)的區(qū)別

    詳談pandas中agg函數(shù)和apply函數(shù)的區(qū)別

    下面小編就為大家分享一篇詳談pandas中agg函數(shù)和apply函數(shù)的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Anaconda中利用conda創(chuàng)建、激活、刪除、添加新環(huán)境

    Anaconda中利用conda創(chuàng)建、激活、刪除、添加新環(huán)境

    在使用Python開(kāi)發(fā)項(xiàng)目或者編寫(xiě)腳本的時(shí)候通常需要建立不同版本的Python的虛擬環(huán)境,本文主要介紹了Anaconda中利用conda創(chuàng)建、激活、刪除、添加新環(huán)境,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • Python桌面自動(dòng)化框架PyAutoGUI功能詳解

    Python桌面自動(dòng)化框架PyAutoGUI功能詳解

    其實(shí)很多時(shí)候一些特定流程化的點(diǎn)點(diǎn)點(diǎn),都是可以讓電腦自己去完成的,這篇文章主要介紹了Python桌面自動(dòng)化框架PyAutoGUI功能的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-03-03
  • 基于django micro搭建網(wǎng)站實(shí)現(xiàn)加水印功能

    基于django micro搭建網(wǎng)站實(shí)現(xiàn)加水印功能

    這篇文章主要介紹了基于django micro搭建網(wǎng)站實(shí)現(xiàn)加水印功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python 實(shí)現(xiàn)自動(dòng)化Excel報(bào)表的步驟

    Python 實(shí)現(xiàn)自動(dòng)化Excel報(bào)表的步驟

    這篇文章主要介紹了Python 實(shí)現(xiàn)自動(dòng)化Excel報(bào)表的步驟,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • 對(duì)Python的多進(jìn)程鎖的使用方法詳解

    對(duì)Python的多進(jìn)程鎖的使用方法詳解

    今天小編就為大家分享一篇對(duì)Python的多進(jìn)程鎖的使用方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02

最新評(píng)論

河北区| 长治县| 北川| 望江县| 龙海市| 枣阳市| 长子县| 克东县| 金华市| 河池市| 四川省| 马尔康县| 积石山| 城固县| 陇川县| 田阳县| 武冈市| 安阳县| 淄博市| 朔州市| 甘孜县| 颍上县| 班玛县| 昌邑市| 积石山| 越西县| 静乐县| 齐河县| 吉木乃县| 剑河县| 泰州市| 越西县| 津南区| 祁门县| 桂平市| 福建省| 天门市| 大兴区| 永泰县| 武穴市| 桑植县|