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

使用Python實(shí)現(xiàn)自動(dòng)填寫PDF表格

 更新時(shí)間:2025年08月01日 09:32:49   作者:jacky_wxl(微信同號(hào))  
實(shí)際應(yīng)用場(chǎng)景中,我們會(huì)遇到需要根據(jù)會(huì)話內(nèi)容自動(dòng)填寫表格的情況,本文主要介紹了如何使用Python實(shí)現(xiàn)自動(dòng)填寫PDF表格,感興趣的小伙伴可以了解下

實(shí)際應(yīng)用場(chǎng)景中,我們會(huì)遇到需要根據(jù)會(huì)話內(nèi)容自動(dòng)填寫表格的情況,比如:pdf 表格。假設(shè)根據(jù)會(huì)話內(nèi)容已經(jīng)獲得相關(guān)信息,下面以填寫個(gè)人信息為例來(lái)說(shuō)明。

個(gè)人信息表格.pdf

填寫后的效果:

填寫代碼如下:

from pdfrw import PdfReader, PdfWriter
import traceback

# 針對(duì)“個(gè)人信息表.pdf”性別字段,嘗試更可能的鍵名(單選按鈕常用命名)
data = {
    "(full_name)": "李四",
    "(sex_male)": "男",  # 推測(cè)性別為單選按鈕,可能用“sex_male”表示“男”選項(xiàng)
    "(birth_date)": "1985年8月15日",
    "(id_card)": "310104198508152345",
    "(phone)": "13987654321",
    "(email)": "lisi1985@qq.com",
    "(address)": "上海市徐匯區(qū)淮海中路789號(hào)2號(hào)樓1003室"
}

try:
    input_pdf_path = "個(gè)人信息表.pdf"
    input_pdf = PdfReader(input_pdf_path)
    print(f"? 成功讀取文件:{input_pdf_path}")
    print(f"?? 該P(yáng)DF包含 {len(input_pdf.pages)} 頁(yè)")

    found_fields = []
    missing_fields = list(data.keys())

    for page_num, page in enumerate(input_pdf.pages, 1):
        print(f"\n--- 處理第 {page_num} 頁(yè) ---")
        if not page.Annots:
            print("?? 此頁(yè)面無(wú)表單字段")
            continue

        for annot in page.Annots:
            raw_field_name = annot.T.strip() if (annot.T and hasattr(annot.T, 'strip')) else None
            if not raw_field_name:
                print("?? 發(fā)現(xiàn)無(wú)名字段,跳過(guò)")
                continue

            print(f"?? 發(fā)現(xiàn)字段:{raw_field_name}")
            found_fields.append(raw_field_name)

            if raw_field_name in data:
                annot.V = data[raw_field_name]
                print(f"?? 已為字段 [{raw_field_name}] 賦值:{data[raw_field_name]}")
                missing_fields.remove(raw_field_name)
            else:
                print(f"?? 字段 [{raw_field_name}] 不在待填充數(shù)據(jù)中,跳過(guò)")

    print("\n--- 填充結(jié)果總結(jié) ---")
    print(f"? 成功填充的字段:{found_fields}")
    if missing_fields:
        print(f"? 未找到的字段:{missing_fields}(可嘗試(sex_female)、(gender_m)等,或用PDF工具直接查看性別字段名)")
    else:
        print("? 所有字段(含性別)均已填充完成")

    output_pdf_path = "填寫完成的個(gè)人信息表.pdf"
    output_pdf = PdfWriter()
    output_pdf.addpages(input_pdf.pages)
    with open(output_pdf_path, "wb") as f:
        output_pdf.write(f)
    print(f"\n?? 已保存到:{output_pdf_path}")

except Exception as e:
    print(f"\n? 處理出錯(cuò):{str(e)}")
    traceback.print_exc()

個(gè)人信息表格.pdf生成代碼如下:

from reportlab.pdfgen import canvas
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors

# 注冊(cè)Mac系統(tǒng)預(yù)裝的STHeiti Light字體
# 字體路徑為macOS默認(rèn)路徑,無(wú)需額外安裝
font_path = "/System/Library/Fonts/STHeiti Light.ttc"
font_name = "STHeitiLight"  # 自定義字體名稱用于引用
pdfmetrics.registerFont(TTFont(font_name, font_path))

# 表單字段使用PDF標(biāo)準(zhǔn)字體(避免非標(biāo)準(zhǔn)字體導(dǎo)致的表單錯(cuò)誤)
form_font_name = "Helvetica"

# 初始化PDF畫布
c = canvas.Canvas("個(gè)人信息表.pdf", pagesize=A4)
width, height = A4  # A4尺寸:寬595,高842

# 繪制標(biāo)題(使用STHeiti Light字體,中文正常顯示)
c.setFont(font_name, 16)
c.drawCentredString(width/2, height-50, "個(gè)人信息登記表")
c.setFont(font_name, 12)  # 恢復(fù)標(biāo)簽字體大小

y_position = height - 100  # 起始Y坐標(biāo)
spacing = 40  # 行間距


# 1. 姓名
c.drawString(100, y_position, "1. 姓名:")  # 中文標(biāo)簽用STHeiti Light
c.acroForm.textfield(
    name="full_name",
    x=200, y=y_position-20,
    width=200, height=20,
    borderColor=colors.black,
    fillColor=colors.white,
    fontName=form_font_name  # 表單字段用標(biāo)準(zhǔn)字體
)
y_position -= spacing


# 2. 性別(單選按鈕組)
c.drawString(100, y_position, "2. 性別:")
c.acroForm.radio(
    name="gender",
    value="male",
    x=200, y=y_position-10,
    size=10
)
c.drawString(220, y_position, "男")  # 中文選項(xiàng)用STHeiti Light

c.acroForm.radio(
    name="gender",
    value="female",
    x=280, y=y_position-10,
    size=10
)
c.drawString(300, y_position, "女")
y_position -= spacing


# 3. 出生日期
c.drawString(100, y_position, "3. 出生日期:")
c.acroForm.textfield(
    name="birth_date",
    x=200, y=y_position-20,
    width=200, height=20,
    borderColor=colors.black,
    fontName=form_font_name
)
y_position -= spacing


# 4. 身份證號(hào)
c.drawString(100, y_position, "4. 身份證號(hào):")
c.acroForm.textfield(
    name="id_card",
    x=200, y=y_position-20,
    width=300, height=20,
    borderColor=colors.black,
    fontName=form_font_name
)
y_position -= spacing


# 5. 聯(lián)系電話
c.drawString(100, y_position, "5. 聯(lián)系電話:")
c.acroForm.textfield(
    name="phone",
    x=200, y=y_position-20,
    width=200, height=20,
    borderColor=colors.black,
    fontName=form_font_name
)
y_position -= spacing


# 6. 電子郵箱
c.drawString(100, y_position, "6. 電子郵箱:")
c.acroForm.textfield(
    name="email",
    x=200, y=y_position-20,
    width=300, height=20,
    borderColor=colors.black,
    fontName=form_font_name
)
y_position -= spacing


# 7. 居住地址
c.drawString(100, y_position, "7. 居住地址:")
c.acroForm.textfield(
    name="address",
    x=200, y=y_position-20,
    width=350, height=20,
    borderColor=colors.black,
    fontName=form_font_name
)
y_position -= spacing


# 保存PDF
c.save()
print("個(gè)人信息表已生成:個(gè)人信息表.pdf")
    

到此這篇關(guān)于使用Python實(shí)現(xiàn)自動(dòng)填寫PDF表格的文章就介紹到這了,更多相關(guān)Python自動(dòng)填寫PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Django中使用ElasticSearch

    在Django中使用ElasticSearch

    這篇文章主要介紹了在Django中使用ElasticSearch,Elasticsearch是基于Lucene庫(kù)的搜索引擎。它提供了具有HTTP?Web界面和無(wú)模式JSON文檔的分布式,多租戶功能的全文本搜索引擎,下面詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2022-01-01
  • 用Python生成HTML表格的方法示例

    用Python生成HTML表格的方法示例

    這篇文章主要介紹了用Python生成HTML表格的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python編程通過(guò)懶屬性提升性能

    Python編程通過(guò)懶屬性提升性能

    大家好,在我看過(guò)的 Python 教程中,很少討論有懶屬性的,今天分享 Python 的懶屬性技術(shù),可以提升程序的性能,有需要的朋友可以借鑒參考下
    2021-09-09
  • Python基于多線程操作數(shù)據(jù)庫(kù)相關(guān)問(wèn)題分析

    Python基于多線程操作數(shù)據(jù)庫(kù)相關(guān)問(wèn)題分析

    這篇文章主要介紹了Python基于多線程操作數(shù)據(jù)庫(kù)相關(guān)問(wèn)題,結(jié)合實(shí)例形式分析了Python使用數(shù)據(jù)庫(kù)連接池并發(fā)操作數(shù)據(jù)庫(kù)避免超時(shí)、連接丟失相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-07-07
  • Python實(shí)現(xiàn)二維數(shù)組按照某行或列排序的方法【numpy lexsort】

    Python實(shí)現(xiàn)二維數(shù)組按照某行或列排序的方法【numpy lexsort】

    這篇文章主要介紹了Python實(shí)現(xiàn)二維數(shù)組按照某行或列排序的方法,結(jié)合具體實(shí)例形式分析了Python使用numpy模塊的lexsort方法針對(duì)二維數(shù)組進(jìn)行排序的常用操作技巧,需要的朋友可以參考下
    2017-09-09
  • python二分查找搜索算法的多種實(shí)現(xiàn)方法

    python二分查找搜索算法的多種實(shí)現(xiàn)方法

    二分查找,也稱折半查找,是一種效率較高的查找方法,本文主要介紹了python二分查找搜索算法的多種實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Python樹的重建實(shí)現(xiàn)示例

    Python樹的重建實(shí)現(xiàn)示例

    樹的重建是一種從給定的遍歷序列中恢復(fù)原樹結(jié)構(gòu)的算法,本文就來(lái)介紹一下Python樹的重建實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • python判斷端口是否打開的實(shí)現(xiàn)代碼

    python判斷端口是否打開的實(shí)現(xiàn)代碼

    python判斷端口是否打開的代碼,有需要的朋友可以參考下
    2013-02-02
  • NumPy多項(xiàng)式計(jì)算的實(shí)現(xiàn)方法

    NumPy多項(xiàng)式計(jì)算的實(shí)現(xiàn)方法

    本文詳細(xì)介紹了NumPy庫(kù)中多項(xiàng)式的表示方式、核心操作以及應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • 解決matplotlib.pyplot在Jupyter notebook中不顯示圖像問(wèn)題

    解決matplotlib.pyplot在Jupyter notebook中不顯示圖像問(wèn)題

    這篇文章主要介紹了解決matplotlib.pyplot在Jupyter notebook中不顯示圖像問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04

最新評(píng)論

肥东县| 朝阳县| 阳山县| 渝北区| 灌阳县| 德格县| 东港市| 读书| 昭通市| 常德市| 容城县| 浮梁县| 博客| 西林县| 五常市| 饶平县| 横峰县| 保山市| 霍林郭勒市| 宁都县| 正宁县| 滦平县| 安国市| 安阳县| 沅江市| 当涂县| 深泽县| 明水县| 大港区| 图片| 张家界市| 兴和县| 永清县| 深圳市| 运城市| 中山市| 安国市| 西峡县| 乐亭县| 章丘市| 阳江市|