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

python實現(xiàn)pdf轉word和excel的示例代碼

 更新時間:2025年01月22日 08:26:09   作者:PandaCode輝  
本文主要介紹了python實現(xiàn)pdf轉word和excel的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、引言

在辦公中,我們經(jīng)常遇收到pdf文件格式,因為pdf格式文件不易修改,當我們需要編輯這些pdf文件時,經(jīng)常需要開通會員或收費功能才能使用編輯功能。今天,我要和大家分享的,是如何使用python編程實現(xiàn),將PDF文件輕松轉換成Word和Excel格式,讓編輯變得輕而易舉。

二、python編程

要將PDF轉換為Word,我們需要解析PDF的布局和內(nèi)容,并將其重新格式化為Word文檔。這涉及到復雜的文本識別和格式轉換技術。

使用過如下幾個庫:最好的還是pdf2docx。

(一)、使用 pdf2docx 庫
(二)、使用 PyMuPDF 庫
(三)、使用 pdfplumber 庫
(四)、使用 PyPDF2 和 python-docx 庫

重點:pdf2docx 是一個將 PDF 文件轉換為 DOCX 文件的 Python 庫。

pip install pdf2docx -i https://mirrors.aliyun.com/pypi/simple

更換PIP源
  PIP源在國外,速度慢,可以更換為國內(nèi)源,以下是國內(nèi)一些常用的PIP源。

豆瓣(douban) http://pypi.douban.com/simple/
清華大學 https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云 http://mirrors.aliyun.com/pypi/simple/
中國科技大學 https://pypi.mirrors.ustc.edu.cn/simple/
中國科學技術大學 http://pypi.mirrors.ustc.edu.cn/simple/

1,PDF轉Word

from pdf2docx import Converter

# pdf轉word方法
def pdf_to_word(pdf_path, word_path=None, page_nums=None):
    '''
    @方法名稱: pdf轉word
    @中文注釋: pdf轉word
    @入?yún)?
        @param pdf_path str pdf文件路徑
        @param page_nums str 頁碼序號
    @出參:
        @返回狀態(tài):
            @return 0 失敗或異常
            @return 1 成功
        @返回錯誤碼
        @返回錯誤信息
        @param doc_file str word文件名
    @作    者: PandaCode輝
    @weixin公眾號: PandaCode輝
    @創(chuàng)建時間: 2024-12-17
    @使用范例: pdf_to_word('test.pdf')
    '''
    global cv
    result_dict = {}
    try:
        if not type(pdf_path) is str:
            result_dict["error_code"] = "111111"
            result_dict["error_msg"] = "pdf文件路徑參數(shù)類型錯誤,不為字符串"
            return result_dict
        # 檢查PDF文件是否存在
        if not os.path.isfile(pdf_path):
            result_dict["error_code"] = "999999"
            result_dict["error_msg"] = f"PDF文件未找到: {pdf_path}"
            return result_dict

        start_time = time.time()

        if not word_path:
            # 使用os.path.basename()獲取文件名
            file_path = os.path.dirname(pdf_path)
            # 使用os.path.basename()獲取文件名
            file_name = os.path.basename(pdf_path)
            # 提取文件名,去除文件后綴
            file_name = file_name.split('.')[0]
            # print(file_name)
            # word文件名+路徑
            word_path = os.path.join(file_path, f'{file_name}.docx')
            # print(word_path)

        # 初始化轉換器
        cv = Converter(pdf_path)
        # 轉換整本PDF或指定頁碼
        if page_nums:
            # 解析頁碼參數(shù)
            pages = []
            for part in page_nums.split(','):
                if '-' in part:
                    start, end = part.split('-')
                    pages.extend(range(int(start) - 1, int(end)))
                else:
                    pages.append(int(part) - 1)
            # 轉換指定頁碼
            cv.convert(docx_filename=word_path, pages=pages)
        else:
            # 轉換整本PDF
            cv.convert(docx_filename=word_path, start=0)

        # 保存為Word文檔
        cv.close()

        # 識別時間
        end_time = time.time()
        # 計算耗時差,單位毫秒
        recognize_time = (end_time - start_time) * 1000
        # 保留2位小數(shù)
        recognize_time = round(recognize_time, 2)
        # print('處理時間:' + str(recognize_time) + '毫秒')
        result_dict["recognize_time"] = recognize_time
        result_dict["error_code"] = "000000"
        result_dict["error_msg"] = "pdf轉word成功"
        # 使用os.path.basename()獲取文件名
        word_file_name = os.path.basename(word_path)
        # 打印結果
        # print("文件名:", word_file_name)
        result_dict["filename"] = word_file_name

        result_dict["file_size_mb"] = file_size_mb

        return result_dict

    except Exception as e:
        cv.close()
        print("pdf轉word異常," + str(e))
        result_dict["error_code"] = "999999"
        result_dict["error_msg"] = "PDF到Word轉換過程中發(fā)生錯誤," + str(e)
        return result_dict

2,PDF轉Excel

要將PDF轉換為Excel,目前沒有現(xiàn)成的轉換庫,需要稍加處理下。

使用過如下幾個庫:

(一)、使用 pdf2docx 庫 和 docx 庫 和 pandas 庫

先將pdf轉成word文檔,然后讀取word文檔中的表格內(nèi)容,然后再轉成excel文檔。 

pip install python-docx -i https://mirrors.aliyun.com/pypi/simple

pip install pandas -i https://mirrors.aliyun.com/pypi/simple

from docx import Document
import pandas as pd
'''
不擅長編程的用戶,可以選擇我的免費工具箱,開箱即用,方便快捷。
print("搜/索/wei/xin/小/程/序:  全能科技工具箱")
'''
# pdf轉excel方法
def pdf_to_excel(pdf_path, xlsx_path=None, page_nums=None):
    '''
    @方法名稱: pdf轉excel
    @中文注釋: pdf轉excel
    @入?yún)?
        @param pdf_path str pdf文件路徑
        @param page_nums str 頁碼序號
    @出參:
        @返回狀態(tài):
            @return 0 失敗或異常
            @return 1 成功
        @返回錯誤碼
        @返回錯誤信息
        @param xlsx_file str excel文件名
    @作    者: PandaCode輝
    @weixin公眾號: PandaCode輝
    @創(chuàng)建時間: 2025-01-06
    @使用范例: pdf_to_excel('test.pdf')
    '''
    global cv
    result_dict = {}
    try:
        if not type(pdf_path) is str:
            result_dict["error_code"] = "111111"
            result_dict["error_msg"] = "pdf文件路徑參數(shù)類型錯誤,不為字符串"
            return result_dict
        # 檢查PDF文件是否存在
        if not os.path.isfile(pdf_path):
            result_dict["error_code"] = "999999"
            result_dict["error_msg"] = f"PDF文件未找到: {pdf_path}"
            return result_dict

        start_time = time.time()

        # 使用os.path.basename()獲取文件名
        file_path = os.path.dirname(pdf_path)
        # 使用os.path.basename()獲取文件名
        file_name = os.path.basename(pdf_path)
        # 提取文件名,去除文件后綴
        file_name = file_name.split('.')[0]
        # print(file_name)
        # word文件名+路徑
        word_path = os.path.join(file_path, f'{file_name}.docx')
        # print(word_path)
        if not xlsx_path:
            # xlsx文件名+路徑
            xlsx_path = os.path.join(file_path, f'{file_name}.xlsx')
            # print(xlsx_path)

        # 第一步,先將pdf轉成doc文檔
        rsp_dict = pdf_to_word(pdf_path, page_nums=page_nums)
        if rsp_dict["error_code"] == "000000":
            # 第二步,再讀取doc文檔,轉成xlsx文檔
            # 打開Word文檔
            doc = Document(word_path)

            if len(doc.tables) < 1:
                result_dict["error_code"] = "999999"
                result_dict["error_msg"] = "PDF文件未找到表格內(nèi)容,無法轉成xlsx文檔."
                return result_dict

            # 創(chuàng)建一個Excel writer對象
            with pd.ExcelWriter(xlsx_path, engine='openpyxl') as writer:

                # 遍歷文檔中的所有表格
                for i, table in enumerate(doc.tables, start=1):
                    # 創(chuàng)建一個空的DataFrame來存儲表格數(shù)據(jù)
                    data = []

                    # 遍歷表格中的所有行
                    for row in table.rows:
                        # 遍歷行中的所有單元格
                        row_data = []
                        for cell in row.cells:
                            row_data.append(cell.text)
                        data.append(row_data)

                    # 將數(shù)據(jù)轉換為DataFrame
                    df = pd.DataFrame(data)

                    # 將DataFrame保存到Excel的不同工作表中
                    sheet_name = f"Table_{i}"
                    df.to_excel(writer, sheet_name=sheet_name, index=False, header=False)

            # print(f"轉換完成,結果保存在{xlsx_path}中。")
        else:
            result_dict["error_code"] = rsp_dict["error_code"]
            result_dict["error_msg"] = rsp_dict["error_msg"]
            return result_dict

        # 識別時間
        end_time = time.time()
        # 計算耗時差,單位毫秒
        recognize_time = (end_time - start_time) * 1000
        # 保留2位小數(shù)
        recognize_time = round(recognize_time, 2)
        # print('處理時間:' + str(recognize_time) + '毫秒')
        result_dict["recognize_time"] = recognize_time
        result_dict["error_code"] = "000000"
        result_dict["error_msg"] = "pdf轉excel成功"
        # 使用os.path.basename()獲取文件名
        xlsx_file_name = os.path.basename(xlsx_path)
        result_dict["filename"] = xlsx_file_name

        return result_dict

    except Exception as e:
        print("pdf轉excel異常," + str(e))
        result_dict["error_code"] = "999999"
        result_dict["error_msg"] = "PDF到excel轉換過程中發(fā)生錯誤," + str(e)
        return result_dict

(二)、使用 pdfplumber 和 python-pandas 庫

使用pdfplumber庫讀取pdf表格內(nèi)容,然后寫入excel表格文檔中。

pip install pdfplumber -i https://mirrors.aliyun.com/pypi/simple

import pandas as pd
import pdfplumber

'''
不擅長編程的用戶,可以選擇我的免費工具箱,開箱即用,方便快捷。
print("搜/索/wei/xin/小/程/序:  全能科技工具箱")
'''

def pdf_to_excel_new(pdf_path, xlsx_path=None, page_nums=None):
    '''
    @方法名稱: pdf轉excel
    @中文注釋: pdf轉excel
    @入?yún)?
        @param pdf_path str pdf文件路徑
        @param page_nums str 頁碼序號
    @出參:
        @返回狀態(tài):
            @return 0 失敗或異常
            @return 1 成功
        @返回錯誤碼
        @返回錯誤信息
        @param xlsx_file str excel文件名
    @作    者: PandaCode輝
    @weixin公眾號: PandaCode輝
    @創(chuàng)建時間: 2025-01-06
    @使用范例: pdf_to_excel('test.pdf')
    '''
    result_dict = {}
    try:
        if not type(pdf_path) is str:
            result_dict["error_code"] = "111111"
            result_dict["error_msg"] = "pdf文件路徑參數(shù)類型錯誤,不為字符串"
            return result_dict
        # 檢查PDF文件是否存在
        if not os.path.isfile(pdf_path):
            result_dict["error_code"] = "999999"
            result_dict["error_msg"] = f"PDF文件未找到: {pdf_path}"
            return result_dict

        start_time = time.time()

        # 使用os.path.basename()獲取文件名
        file_path = os.path.dirname(pdf_path)
        # 使用os.path.basename()獲取文件名
        file_name = os.path.basename(pdf_path)
        # 提取文件名,去除文件后綴
        file_name = file_name.split('.')[0]
        # print(file_name)

        if not xlsx_path:
            # xlsx文件名+路徑
            xlsx_path = os.path.join(file_path, f'{file_name}.xlsx')
            # print(xlsx_path)

        # 提取 PDF 中的文本數(shù)據(jù)
        with pdfplumber.open(pdf_path) as pdf:
            if len(pdf.pages) < 1:
                result_dict["error_code"] = "999999"
                result_dict["error_msg"] = "PDF文件未找到表格內(nèi)容,無法轉成xlsx文檔."
                return result_dict

            # 創(chuàng)建一個 Excel 的寫入器
            with pd.ExcelWriter(xlsx_path) as writer:
                # 轉換整本PDF或指定頁碼
                if page_nums:
                    # 解析頁碼參數(shù)
                    pages = []
                    for part in page_nums.split(','):
                        if '-' in part:
                            start, end = part.split('-')
                            pages.extend(range(int(start) - 1, int(end)))
                        else:
                            pages.append(int(part) - 1)
                    # 轉換指定頁碼
                    for i in pages:
                        page = pdf.pages[i]
                        # 提取當前頁的表格數(shù)據(jù)
                        table = page.extract_table()
                        if table:
                            # 將表格數(shù)據(jù)轉換為 DataFrame
                            df = pd.DataFrame(table)
                            # 將 DataFrame 寫入 Excel 的不同工作表
                            df.to_excel(writer, sheet_name=f'Page {i}', index=False)
                else:
                    # 轉換整本PDF
                    for i, page in enumerate(pdf.pages, start=1):
                        # 提取當前頁的表格數(shù)據(jù)
                        table = page.extract_table()
                        if table:
                            # 將表格數(shù)據(jù)轉換為 DataFrame
                            df = pd.DataFrame(table)
                            # 將 DataFrame 寫入 Excel 的不同工作表
                            df.to_excel(writer, sheet_name=f'Page {i}', index=False)

        # 識別時間
        end_time = time.time()
        # 計算耗時差,單位毫秒
        recognize_time = (end_time - start_time) * 1000
        # 保留2位小數(shù)
        recognize_time = round(recognize_time, 2)
        # print('處理時間:' + str(recognize_time) + '毫秒')
        result_dict["recognize_time"] = recognize_time
        result_dict["error_code"] = "000000"
        result_dict["error_msg"] = "pdf轉excel成功"
        # 使用os.path.basename()獲取文件名
        xlsx_file_name = os.path.basename(xlsx_path)
        # 打印結果
        # print("文件名:", xlsx_file_name)
        result_dict["filename"] = xlsx_file_name

        # 獲取文件大?。ㄗ止?jié))
        file_size_bytes = os.path.getsize(xlsx_path)
        # 將字節(jié)轉換為兆字節(jié)
        file_size_mb = file_size_bytes / (1024 * 1024)
        # 打印結果
        # print("文件大小(兆字節(jié)):", file_size_mb)
        result_dict["file_size_mb"] = file_size_mb
        return result_dict

    except Exception as e:
        print("pdf轉excel異常," + str(e))
        result_dict["error_code"] = "999999"
        result_dict["error_msg"] = "PDF到excel轉換過程中發(fā)生錯誤," + str(e)
        return result_dict

三、前端頁面效果展示

1,選擇PDF文件

2,選擇轉換類型:PDF轉Word 和 PDF轉Excel

3,頁面范圍:可選參數(shù),不選則全部轉換 

總結

  • pdf2docx 和 PyMuPDF 是pdf轉word更直接的選擇,因為它們專門用于轉換 PDF 到 DOCX,并且通常在版面還原方面做得更好。
  • pdfplumber 更適合于文本和表格的提取,而不是直接的格式轉換。
  • PyPDF2 和 python-docx 的組合提供了更多的靈活性,但可能需要更多的自定義代碼來處理復雜的布局和格式。

根據(jù)你的需求,選擇最適合你的庫。如果你需要高度保真的版面還原,pdf2docx 或 PyMuPDF 可能是更好的選擇。如果你需要從 PDF 中提取文本和表格數(shù)據(jù),pdfplumber 可能更適合。

到此這篇關于python實現(xiàn)pdf轉word和excel的文章就介紹到這了,更多相關python實現(xiàn)pdf轉word和excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • 利用Python實現(xiàn)某OA系統(tǒng)的自動定位功能

    利用Python實現(xiàn)某OA系統(tǒng)的自動定位功能

    這篇文章主要介紹了利用Python實現(xiàn)某OA系統(tǒng)的自動定位功能,本文通過圖文實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 關于Python3的import問題(pycharm可以運行命令行import錯誤)

    關于Python3的import問題(pycharm可以運行命令行import錯誤)

    這篇文章主要介紹了關于Python3的import問題(pycharm可以運行命令行import錯誤),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • cuda突然不能用了的完美解決方法

    cuda突然不能用了的完美解決方法

    這篇文章主要給大家介紹了關于cuda突然不能用了的完美解決方法,文中通過圖文介紹的非常詳細,對大家學習或者使用cuda具有一定的參考學習價值,需要的朋友可以參考下
    2023-06-06
  • Python3.4實現(xiàn)從HTTP代理網(wǎng)站批量獲取代理并篩選的方法示例

    Python3.4實現(xiàn)從HTTP代理網(wǎng)站批量獲取代理并篩選的方法示例

    這篇文章主要介紹了Python3.4實現(xiàn)從HTTP代理網(wǎng)站批量獲取代理并篩選的方法,涉及Python網(wǎng)絡連接、讀取、判斷等相關操作技巧,需要的朋友可以參考下
    2017-09-09
  • Python安裝Gradio和常見安裝問題解決辦法

    Python安裝Gradio和常見安裝問題解決辦法

    Gradio是一款便捷的Python庫,專門用于創(chuàng)建機器學習模型的Web應用,安裝通常簡單,但偶爾會遇到依賴問題或環(huán)境配置錯誤,這篇文章主要介紹了Python安裝Gradio和常見安裝問題解決辦法,需要的朋友可以參考下
    2024-10-10
  • Django中的JWT身份驗證的實現(xiàn)

    Django中的JWT身份驗證的實現(xiàn)

    這篇文章主要介紹了Django中的JWT身份驗證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • 基于Python實現(xiàn)的百度貼吧網(wǎng)絡爬蟲實例

    基于Python實現(xiàn)的百度貼吧網(wǎng)絡爬蟲實例

    這篇文章主要介紹了基于Python實現(xiàn)的百度貼吧網(wǎng)絡爬蟲,實例分析了Python實現(xiàn)網(wǎng)絡爬蟲的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 玩轉python爬蟲之爬取糗事百科段子

    玩轉python爬蟲之爬取糗事百科段子

    這篇文章主要介紹了python爬蟲爬取糗事百科段子,詳細介紹下,如何來抓取到糗事百科里面的指定內(nèi)容,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Python Django框架實現(xiàn)應用添加logging日志操作示例

    Python Django框架實現(xiàn)應用添加logging日志操作示例

    這篇文章主要介紹了Python Django框架實現(xiàn)應用添加logging日志操作,結合實例形式分析了Django框架中添加Python內(nèi)建日志模塊相關操作技巧,需要的朋友可以參考下
    2019-05-05
  • 三步教會你完全離線搭建openwebui

    三步教會你完全離線搭建openwebui

    這篇文章主要介紹了在無網(wǎng)絡環(huán)境下搭建Linux版openwebui的詳細步驟,包括下載依賴包、拷貝whl包到無網(wǎng)絡環(huán)境進行安裝、解決安裝過程中可能出現(xiàn)的問題,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2025-02-02

最新評論

澄江县| 苏州市| 长治市| 溧阳市| 穆棱市| 离岛区| 宿迁市| 西乡县| 宣城市| 虹口区| 习水县| 岑溪市| 宁波市| 安康市| 大丰市| 上林县| 栾城县| 太康县| 科技| 奉新县| 赤城县| 金阳县| 普兰店市| 改则县| 太仆寺旗| 庐江县| 开江县| 松阳县| 万州区| 石景山区| 大悟县| 贵定县| 天气| 宁夏| 阜城县| 额济纳旗| 阿鲁科尔沁旗| 运城市| 牙克石市| 怀仁县| 正宁县|