中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現PDF掃描件生成DOCX或EXCEL功能

發布時間:2022-03-05 14:04:09 來源:億速云 閱讀:295 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Python如何實現PDF掃描件生成DOCX或EXCEL功能,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

    1.問題描述

    應項目需求需要獲取PDF掃描文件的內容,但尋遍整個網絡能達到這種功能的產品,都要會員充值。苦于囊中羞澀也只好編寫功能代碼來實現了。

    如PDF中表格圖片圖-1效果生成圖-2

    Python如何實現PDF掃描件生成DOCX或EXCEL功能

    圖-1

    Python如何實現PDF掃描件生成DOCX或EXCEL功能

    圖-2

    2.實現流程

    整個步驟為:讀取PDF文件->生成圖片->ORC獲取圖片內容->寫入Excel

    Python如何實現PDF掃描件生成DOCX或EXCEL功能

    3.功能代碼

    3.1 pdf轉為圖片

    import fitz # pdf轉為圖片
    from aip import AipOcr # 圖片文字識別
    import time # 程序運行時間間隔以避免出錯
    import docx # 將識別結果保存為docx文件
    from docx.oxml.ns import qn # 設置docx文件的字體
    
    """ 你的 APPID AK SK """
    APP_ID = 'xxxxxx'
    API_KEY = 'xxxxxxxx'
    SECRET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxx'
    
    client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
    
    '''
    將PDF轉化為圖片
    pdfPath pdf文件的路徑
    imgPath 圖像要保存的路徑
    zoom_x x方向的縮放系數
    zoom_y y方向的縮放系數
    rotation_angle 旋轉角度
    zoom_x和zoom_y一般取相同值,值越大,圖像分辨率越高
    返回目標pdf的名稱和頁數,便于下一步操作
    
    '''
    def pdf_image(pdfPath, imgPath, zoom_x=10, zoom_y=10, rotation_angle=0):
        # 獲取pdf文件名稱
        name = pdfPath.split("\\")[-1].split('.pdf')[0]
        # 打開PDF文件
        pdf = fitz.open(pdfPath)
        # 獲取pdf頁數
        num = pdf.pageCount
        # 逐頁讀取PDF
        for pg in range(0, num):
            page = pdf[pg]
            # 設置縮放和旋轉系數
            trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
            pm = page.getPixmap(matrix=trans, alpha=False)
            # 開始寫圖像
            pm.writePNG(imgPath + name + "_" + str(pg) + ".png")
        pdf.close()
        return name, num
    
    
    '''
    將圖片讀取為docx文件
    imgPath 圖像所在路徑
    生成的docx也保存在圖像所在路徑中
    name為pdf名稱(不含后綴)
    num為pdf頁數
    name和num均可由上一個函數返回
    
    '''
    def ReadDetail_docx(imgPath, name, num):
        # 建立一個空doc文檔
        doc = docx.Document()
        # 設置全局字體
        doc.styles["Normal"].font.name=u"宋體"
        doc.styles["Normal"]._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')
        # 讀取圖片
        for n in range(0,num):
            i = open(imgPath+name+"_"+str(n)+".png",'rb')
            time.sleep(0.1)
            img = i.read()
            message = client.basicAccurate(img)
            content = message.get('words_result')
            # 將內容寫入doc文檔
            for i in range(len(content)):
                doc.add_paragraph(content[i].get('words'))
        # 保存doc文檔
        doc.save(imgPath + name + '.docx')
    
    def pdf_to_docx(pdfPath, imgPath, zoom_x=10, zoom_y=10, rotation_angle=0):
        print("正在將pdf文件轉換為圖片...")
        # 調用函數一將pdf轉換為圖片,并獲得文件名和頁數
        name_, num_ = pdf_image(pdfPath, imgPath, zoom_x, zoom_y, rotation_angle)
        print("轉換成功!")
        #print("正在讀取圖片內容...")
        # 調用函數二逐頁讀取圖片并逐行保存在docx文件中
       # ReadDetail_docx(imgPath, name_, num_)
        #print("名為 {}.pdf 的pdf文件共有{}頁,已成功轉換為docx文件!".format(name_, num_))
    
    # pdf儲存路徑
    pdf_path = "JRT 0197-2020金融數據安全 數據安全分級指南.pdf"
    # 圖片和生成的docx文件的儲存路徑
    img_path = r"G:\imges\\"
    # 調用函數
    pdf_to_docx(pdf_path, img_path)

    3.2 表格圖片文字識別到excel

    import pandas as pd
    import numpy as np
    import re
    # 圖片識別
    from aip import AipOcr
    # 時間模塊
    import time
    # 網頁獲取
    import requests
    # 操作系統接口模塊
    import os
    
    image_path = ''
    
    
    # 獲取文件夾中所有圖片
    
    def get_image():
        images = []  # 存儲文件夾內所有文件的路徑(包括子目錄內的文件)
        for root, dirs, files in os.walk(image_path):
            path = [os.path.join(root, name) for name in files]
            images.extend(path)
        return images
    
    
    def Image_Excel(APP_ID, API_KEY, SECRET_KEY):
        #  調用百度AI接口
        client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
        # 循環遍歷文件家中圖片
        images = get_image()
        for image in images:
            # 以二進制方式打開圖片
            img_open = open(image, 'rb')
            # 讀取圖片
            img_read = img_open.read()
            # 調用表格識別模塊識別圖片
            table = client.tableRecognitionAsync(img_read)
            # 獲取請求ID
            request_id = table['result'][0]['request_id']
            # 獲取表格處理結果
            result = client.getTableRecognitionResult(request_id)
            # 處理狀態是“已完成”,獲取下載地址
            while result['result']['ret_msg'] != '已完成':
                time.sleep(2)  # 暫停2秒再刷新
                result = client.getTableRecognitionResult(request_id)
            download_url = result['result']['result_data']
            print(download_url)
            # 獲取表格數據
            excel_data = requests.get(download_url)
            # 根據圖片名字命名表格名稱
            xlsx_name = image.split(".")[0] + ".xlsx"
            # 新建excel文件
            xlsx = open(xlsx_name, 'wb')
            # 將數據寫入excel文件并保存
            xlsx.write(excel_data.content)
    
    
    if __name__ == '__main__':
        image_path = r"G:\imgs\\"
        APP_ID = 'xxxxxxxx'
        API_KEY = 'xxxxxxx'
        SECRET_KEY = 'xxxxxxxxxxxxxxxxxxxxxx'
        Image_Excel(APP_ID, API_KEY, SECRET_KEY)

    4. 案例說明

    我這里是獲取JRT 0197-2020金融數據安全 數據安全分級指南.pdf掃描文件,將內部表格數據寫入到excel文件。

    Python如何實現PDF掃描件生成DOCX或EXCEL功能

    Python如何實現PDF掃描件生成DOCX或EXCEL功能

    關于“Python如何實現PDF掃描件生成DOCX或EXCEL功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    天台县| 阿合奇县| 资溪县| 咸阳市| 荔波县| 岐山县| 邻水| 济阳县| 家居| 兴文县| 呼伦贝尔市| 双柏县| 咸丰县| 策勒县| 准格尔旗| 大方县| 阿鲁科尔沁旗| 延安市| 曲周县| 上犹县| 会东县| 南江县| 阿克| 吴桥县| 报价| 务川| 湾仔区| 武功县| 滨州市| 海林市| 阿拉善左旗| 图们市| 上虞市| 七台河市| 嘉义县| 贵南县| 武陟县| 太仆寺旗| 波密县| 旺苍县| 女性|