欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)PDF掃描件生成DOCX或EXCEL功能

 更新時(shí)間:2022年03月05日 11:24:29   作者:尋找手藝人  
這篇文章主要介紹了如何利用Python實(shí)現(xiàn)將PDF掃描件轉(zhuǎn)為DOCX或EXCEL文件格式功能,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下

1.問(wèn)題描述

應(yīng)項(xiàng)目需求需要獲取PDF掃描文件的內(nèi)容,但尋遍整個(gè)網(wǎng)絡(luò)能達(dá)到這種功能的產(chǎn)品,都要會(huì)員充值??嘤谀抑行邼仓缓镁帉懝δ艽a來(lái)實(shí)現(xiàn)了。

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

圖-1

圖-2

2.實(shí)現(xiàn)流程

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

3.功能代碼

3.1 pdf轉(zhuǎn)為圖片

import fitz # pdf轉(zhuǎn)為圖片
from aip import AipOcr # 圖片文字識(shí)別
import time # 程序運(yùn)行時(shí)間間隔以避免出錯(cuò)
import docx # 將識(shí)別結(jié)果保存為docx文件
from docx.oxml.ns import qn # 設(shè)置docx文件的字體

""" 你的 APPID AK SK """
APP_ID = 'xxxxxx'
API_KEY = 'xxxxxxxx'
SECRET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxx'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

'''
將PDF轉(zhuǎn)化為圖片
pdfPath pdf文件的路徑
imgPath 圖像要保存的路徑
zoom_x x方向的縮放系數(shù)
zoom_y y方向的縮放系數(shù)
rotation_angle 旋轉(zhuǎn)角度
zoom_x和zoom_y一般取相同值,值越大,圖像分辨率越高
返回目標(biāo)pdf的名稱和頁(yè)數(shù),便于下一步操作

'''
def pdf_image(pdfPath, imgPath, zoom_x=10, zoom_y=10, rotation_angle=0):
    # 獲取pdf文件名稱
    name = pdfPath.split("\\")[-1].split('.pdf')[0]
    # 打開(kāi)PDF文件
    pdf = fitz.open(pdfPath)
    # 獲取pdf頁(yè)數(shù)
    num = pdf.pageCount
    # 逐頁(yè)讀取PDF
    for pg in range(0, num):
        page = pdf[pg]
        # 設(shè)置縮放和旋轉(zhuǎn)系數(shù)
        trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
        pm = page.getPixmap(matrix=trans, alpha=False)
        # 開(kāi)始寫圖像
        pm.writePNG(imgPath + name + "_" + str(pg) + ".png")
    pdf.close()
    return name, num


'''
將圖片讀取為docx文件
imgPath 圖像所在路徑
生成的docx也保存在圖像所在路徑中
name為pdf名稱(不含后綴)
num為pdf頁(yè)數(shù)
name和num均可由上一個(gè)函數(shù)返回

'''
def ReadDetail_docx(imgPath, name, num):
    # 建立一個(gè)空doc文檔
    doc = docx.Document()
    # 設(shè)置全局字體
    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')
        # 將內(nèi)容寫入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文件轉(zhuǎn)換為圖片...")
    # 調(diào)用函數(shù)一將pdf轉(zhuǎn)換為圖片,并獲得文件名和頁(yè)數(shù)
    name_, num_ = pdf_image(pdfPath, imgPath, zoom_x, zoom_y, rotation_angle)
    print("轉(zhuǎn)換成功!")
    #print("正在讀取圖片內(nèi)容...")
    # 調(diào)用函數(shù)二逐頁(yè)讀取圖片并逐行保存在docx文件中
   # ReadDetail_docx(imgPath, name_, num_)
    #print("名為 {}.pdf 的pdf文件共有{}頁(yè),已成功轉(zhuǎn)換為docx文件!".format(name_, num_))

# pdf儲(chǔ)存路徑
pdf_path = "JRT 0197-2020金融數(shù)據(jù)安全 數(shù)據(jù)安全分級(jí)指南.pdf"
# 圖片和生成的docx文件的儲(chǔ)存路徑
img_path = r"G:\imges\\"
# 調(diào)用函數(shù)
pdf_to_docx(pdf_path, img_path)

3.2 表格圖片文字識(shí)別到excel

import pandas as pd
import numpy as np
import re
# 圖片識(shí)別
from aip import AipOcr
# 時(shí)間模塊
import time
# 網(wǎng)頁(yè)獲取
import requests
# 操作系統(tǒng)接口模塊
import os

image_path = ''


# 獲取文件夾中所有圖片

def get_image():
    images = []  # 存儲(chǔ)文件夾內(nèi)所有文件的路徑(包括子目錄內(nèi)的文件)
    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):
    #  調(diào)用百度AI接口
    client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
    # 循環(huán)遍歷文件家中圖片
    images = get_image()
    for image in images:
        # 以二進(jìn)制方式打開(kāi)圖片
        img_open = open(image, 'rb')
        # 讀取圖片
        img_read = img_open.read()
        # 調(diào)用表格識(shí)別模塊識(shí)別圖片
        table = client.tableRecognitionAsync(img_read)
        # 獲取請(qǐng)求ID
        request_id = table['result'][0]['request_id']
        # 獲取表格處理結(jié)果
        result = client.getTableRecognitionResult(request_id)
        # 處理狀態(tài)是“已完成”,獲取下載地址
        while result['result']['ret_msg'] != '已完成':
            time.sleep(2)  # 暫停2秒再刷新
            result = client.getTableRecognitionResult(request_id)
        download_url = result['result']['result_data']
        print(download_url)
        # 獲取表格數(shù)據(jù)
        excel_data = requests.get(download_url)
        # 根據(jù)圖片名字命名表格名稱
        xlsx_name = image.split(".")[0] + ".xlsx"
        # 新建excel文件
        xlsx = open(xlsx_name, 'wb')
        # 將數(shù)據(jù)寫入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. 案例說(shuō)明

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

以上就是Python實(shí)現(xiàn)PDF掃描件生成DOCX或EXCEL功能的詳細(xì)內(nèi)容,更多關(guān)于Python 掃描件轉(zhuǎn)DOCX EXCEL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python數(shù)組和矩陣的用法解讀

    python數(shù)組和矩陣的用法解讀

    這篇文章主要介紹了python數(shù)組和矩陣的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python center()函數(shù)使用方法詳解

    Python center()函數(shù)使用方法詳解

    在python中,center()返回一個(gè)原字符居中,并默認(rèn)使用空格填充至長(zhǎng)度width返回新字符串,默認(rèn)填充字符為空格,本就將通過(guò)代碼示例給大家簡(jiǎn)單的介紹一下Python center()函數(shù)是的使用方法,感興趣的同學(xué)跟著小編一起來(lái)看看吧
    2023-07-07
  • python 合并文件的具體實(shí)例

    python 合并文件的具體實(shí)例

    提供了很多個(gè)文件,需要對(duì)文件分析,如果每次讀取多個(gè)文件,造成很多麻煩,所以需要對(duì)源文件進(jìn)行合并預(yù)處理。
    2013-08-08
  • scrapy框架ItemPipeline的使用

    scrapy框架ItemPipeline的使用

    本文主要介紹了scrapy框架ItemPipeline的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Python list操作用法總結(jié)

    Python list操作用法總結(jié)

    這篇文章主要介紹了Python list操作用法,以實(shí)例形式較為詳細(xì)的總結(jié)分析了Python中l(wèi)ist的各種常見(jiàn)函數(shù)的功能與使用方法,需要的朋友可以參考下
    2015-11-11
  • pip安裝python庫(kù)時(shí)報(bào)Failed?building?wheel?for?xxx錯(cuò)誤的解決方法

    pip安裝python庫(kù)時(shí)報(bào)Failed?building?wheel?for?xxx錯(cuò)誤的解決方法

    最近在使用pip安裝python的時(shí)候遇到些問(wèn)題,所以下面這篇文章主要給大家介紹了關(guān)于pip安裝python庫(kù)時(shí)報(bào)Failed?building?wheel?for?xxx錯(cuò)誤的解決方法,需要的朋友可以參考下
    2023-01-01
  • Django中使用第三方登錄的示例代碼

    Django中使用第三方登錄的示例代碼

    這篇文章主要介紹了Django中使用第三方登錄的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Python 做曲線擬合和求積分的方法

    Python 做曲線擬合和求積分的方法

    今天小編就為大家分享一篇Python 做曲線擬合和求積分的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python enumerate內(nèi)置庫(kù)用法解析

    Python enumerate內(nèi)置庫(kù)用法解析

    這篇文章主要介紹了Python enumerate內(nèi)置庫(kù)用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python 3調(diào)用百度OCR API實(shí)現(xiàn)剪貼板文字識(shí)別

    python 3調(diào)用百度OCR API實(shí)現(xiàn)剪貼板文字識(shí)別

    這篇文章主要為大家詳細(xì)介紹了python 3調(diào)用百度OCR API實(shí)現(xiàn)剪貼板文字識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09

最新評(píng)論