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

python修改pdf中的文字方式

 更新時間:2026年01月22日 08:44:24   作者:像風一樣的男人@  
這篇文章主要介紹了python修改pdf中的文字方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

直接插入

# PyMuPDF==1.22.5
import fitz
from loguru import logger
from shuini.settings import FontPath, moban_pdf


class CreatePDF(object):
    '''生成報告pdf'''

    def __init__(self):
        self.font_name = 'simhei'  # 字體名,枚舉引用
        self.font_path = str(FontPath)  # 實際的黑體字路徑
        self.font_size = 8  # 字體大小
        self.font_color = (0, 0, 0)  # 字體rgb顏色
        self.pdf = fitz.open(str(moban_pdf))  # 模板pdf對象

    def _insert_text(self, rect: tuple, text: str, page) -> None:
        '''
        插入文字(內(nèi)置方法)
        @params rect  --> 插入文字的坐標(x, y);
        @params text  --> 插入的文字;
        @params page  --> 實際插入的pdf頁面對象;
        '''
        page.insert_font(fontname=self.font_name, fontfile=self.font_path)  # 將中文字體加入到頁面中
        page.insert_text(
            rect,
            text,
            fontsize=self.font_size,
            color=self.font_color,
            fontname=self.font_name
        )

    def _save_pdf(self) -> str:
        '''保存新的pdf(內(nèi)置方法)'''
        pdf_name = '1.pdf'
        self.pdf.save(pdf_name)
        self.pdf.close()
        logger.success(f'pdf保存成功:【{pdf_name}】')
        return pdf_name

    def update_qiyexinxi(self, text_list: list):
        '''
        修改企業(yè)信息
        @params text_list  --> 要修改的文字數(shù)組;按pdf順序;
        '''
        page = self.pdf[14]  # 企業(yè)信息頁面
        skip_row = [13, 17, 18, 19]  # 需要跳過的行數(shù) 從1開始  固定字段不填寫
        rect_list = [(429, 143), (429, 158.3), (429, 173.6), (429, 188.9), (429, 204.2), (429, 219.5), (429, 234.8), # 1-7行
                     (429, 250.1), (429, 265.4), (429, 280.7), (429, 296.0), (429, 311.3), (), (429, 341.9),  # 8-14行
                     (429, 357.2), (429, 372.5), (), (), (), (429, 442), (429, 457.3),  # 15-21
                     (429, 472.6), (429, 487.9), (429, 503.2), (429, 518.5), (429, 533.8), (429, 555), (429, 576), # 22-29
                     (429, 591.3), (429, 606.5), (429, 621.8), (429, 637.1)  # 30-34
                     ]

        for index, rect in enumerate(rect_list, start=1):
            if index in skip_row:  # 跳過行數(shù)
                continue

            x, y = rect
            text = text_list[index - 1]  # 因為從1開始算 所以索引-1

            for _ in text[1:]:  # 根據(jù)字數(shù)確定起始位置
                try:
                    float(text) # 當為數(shù)字時 每個字符x - 1.8
                    x -= 1.8
                except:
                    x -= 3.8 # 當為字符時 每個字符x-3.8

            self._insert_text((x, y), text, page)

    def start(self):
        '''開始'''
        self.update_qiyexinxi(
            ['111', '11111111111111', '111111111111111111', '1111111111111', '1111111111111', '1', '11111', '1', '11111111111', '11111111111111111', '1111', '11111', '1111111', '11111111111111111111', '11111111', '11111111111111', '1111111', '111111111', '11111', '1111', '11111111111111', '111111', '1111111111', '1111111111111111', '1111111111', '1111111111', '1111', '11111111111', '1111', '11111', '1111111', '111111111', '1111111111111', '1111111111111']

            )
        self._save_pdf()


if __name__ == '__main__':
    c = CreatePDF()
    c.start()

覆蓋原文字

import fitz
from loguru import logger
import os, sys, django

parent_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.append(parent_path)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "shuini.settings")
django.setup()

from shuini.settings import FontPath, moban_pdf
from backstage.models import User, Shengchanxian


class CreatePDF(object):
    '''生成報告pdf'''

    def __init__(self):
        self.font_name = 'simhei'  # 字體名,枚舉引用
        self.font_path = str(FontPath)  # 實際的黑體字路徑
        self.font_size = 8  # 字體大小
        self.font_color = (0, 0, 0)  # 字體rgb顏色
        self.pdf = fitz.open(str(moban_pdf))  # 模板pdf對象
        self.user = None # 用戶對象

    def _cover_old_text(self, rect, page) -> None:
        '''
        覆蓋原有文字(內(nèi)置方法)
        @params rect  --> 遮擋區(qū)域的矩形坐標(需略大于文字區(qū)域)(x0, y0, x1, y2);
        @params page  --> 目標pdf頁面對象;
        '''
        page.draw_rect( # 繪制實心白色矩形,覆蓋原有文字
            rect,
            color=(1, 1, 1), # 邊框顏色
            fill=(1, 1, 1),  # 填充矩形(關(guān)鍵:實現(xiàn)遮擋)
            width=0  # 邊框?qū)挾仍O(shè)為0,避免多余線條
        )

    def _insert_text(self, rect: tuple, text: str, page) -> None:
        '''
        插入文字(內(nèi)置方法)
        @params rect  --> 插入文字的坐標(x, y);
        @params text  --> 插入的文字;
        @params page  --> 實際插入的pdf頁面對象;
        '''
        page.insert_font(fontname=self.font_name, fontfile=self.font_path)  # 將中文字體加入到頁面中
        page.insert_text(
            rect,
            text,
            fontsize=self.font_size,
            color=self.font_color,
            fontname=self.font_name
        )

    def _save_pdf(self) -> str:
        '''保存新的pdf(內(nèi)置方法)'''
        pdf_name = '1.pdf'
        self.pdf.save(pdf_name)
        self.pdf.close()
        logger.success(f'pdf保存成功:【{pdf_name}】')
        return pdf_name

    def update_qiyexinxi(self):
        '''修改企業(yè)信息'''
        text_list = [
            self.user.qiyemingcheng if self.user.qiyemingcheng else '',
            self.user.shehuixinyongbianma if self.user.shehuixinyongbianma else '',
            self.user.qiyeleixing if self.user.qiyeleixing else '',
            self.user.qiyezhusuo if self.user.qiyezhusuo else '',
            self.user.fadingdaibiaoren if self.user.fadingdaibiaoren else '',
            self.user.zhuceziben if self.user.zhuceziben else '',
        ]

        page = self.pdf[14]  # 企業(yè)信息頁面
        skip_row = [13, 17, 18, 19]  # 需要覆蓋的行數(shù) 從1開始

        rect_list = [
            [398, 143], [398, 158.3], [398, 173.6], [398, 188.9], [398, 204.2], [398, 219.5],       # 1-6                                                           
        ]

        for index, rect in enumerate(rect_list, start=1):
            x, y = rect
            if index in skip_row:  # 需要覆蓋的位置
                if index == 17: # 兩行
                    self._cover_old_text((x, y - 14.5, x + 75, y + 6), page)
                else: # 單行
                    self._cover_old_text((x, y - 8, x + 75, y + 3), page)

            text = text_list[index - 1]  # 因為從1開始算 所以索引-1
            self._insert_text((x, y), text, page)

    def start(self, user_id: int):
        '''開始'''
        self.user = User.objects.get(user_id=user_id)
        self.update_qiyexinxi() # 修改企業(yè)信息
        self._save_pdf()


if __name__ == '__main__':
    c = CreatePDF()
    c.start(1)

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實現(xiàn)文件內(nèi)容批量追加的方法示例

    Python實現(xiàn)文件內(nèi)容批量追加的方法示例

    這篇文章主要介紹了Python實現(xiàn)文件內(nèi)容批量追加的方法,結(jié)合實例形式分析了Python文件的讀寫相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Python中NumPy的數(shù)組重塑

    Python中NumPy的數(shù)組重塑

    這篇文章主要介紹了Python中NumPy的數(shù)組重塑,Numpy是Python科學計算庫,用于快速處理任意維度的數(shù)組,NumPy使用c語言寫的,底部解除了GIL,其對數(shù)組的操作速度不在受python解釋器限制<BR>
    2023-07-07
  • Python 畫出來六維圖

    Python 畫出來六維圖

    這篇文章主要介紹了Python 畫出來六維圖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python3連接MySQL(pymysql)模擬轉(zhuǎn)賬實現(xiàn)代碼

    Python3連接MySQL(pymysql)模擬轉(zhuǎn)賬實現(xiàn)代碼

    這篇文章主要介紹了Python3連接MySQL(pymysql)模擬轉(zhuǎn)賬實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 用tensorflow實現(xiàn)彈性網(wǎng)絡(luò)回歸算法

    用tensorflow實現(xiàn)彈性網(wǎng)絡(luò)回歸算法

    這篇文章主要介紹了用tensorflow實現(xiàn)彈性網(wǎng)絡(luò)回歸算法
    2018-01-01
  • Python 中 f-Strings 的作用

    Python 中 f-Strings 的作用

    這篇文章主要介紹了Python 中 f-Strings 的作用, f-strings 是用來非常方便的格式化輸出的,覺得它的使用方法無外乎就是 print(f'value = { value }',其實,f-strings 遠超你的預期,今天來梳理一下它還能做那些很酷的事情
    2021-10-10
  • Python3 Scrapy庫安裝使用教程

    Python3 Scrapy庫安裝使用教程

    Scrapy是一個全功能的Python爬蟲框架,內(nèi)置了請求處理、錯誤重試、狀態(tài)跟蹤、分布式爬取等核心能力,支持高度自定義擴展,廣泛用于數(shù)據(jù)挖掘、信息采集、歷史數(shù)據(jù)存儲等場景,本文介紹Python3 Scrapy庫安裝使用教程,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Pandas聚合運算和分組運算的實現(xiàn)示例

    Pandas聚合運算和分組運算的實現(xiàn)示例

    這篇文章主要介紹了Pandas聚合運算和分組運算的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 基于PyTorch實現(xiàn)EdgeCNN的實戰(zhàn)教程

    基于PyTorch實現(xiàn)EdgeCNN的實戰(zhàn)教程

    本文我們將使用PyTorch來簡易實現(xiàn)一個EdgeCNN,不使用PyG庫,讓新手可以理解如何PyTorch來搭建一個簡易的圖網(wǎng)絡(luò)實例demo,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • pycharm激活方法到2099年(激活流程)

    pycharm激活方法到2099年(激活流程)

    這篇文章主要介紹了pycharm激活方法到2099年,文末給大家提到了idea和pycharm最新版激活方法,非常不錯對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09

最新評論

宁波市| 华蓥市| 鹤峰县| 方山县| 广西| 花莲县| 措美县| 渝中区| 从江县| 山丹县| 衡阳县| 平舆县| 安溪县| 正蓝旗| 成安县| 驻马店市| 保靖县| 盐池县| 瓮安县| 托克逊县| 美姑县| 冕宁县| 和静县| 健康| 伊吾县| 新乡县| 五大连池市| 历史| 虎林市| 图们市| 松江区| 云龙县| 平乡县| 都匀市| 嘉黎县| 托里县| 虹口区| 湘阴县| 远安县| 屏边| 泾川县|