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

Python利用PyMuPDF模塊實(shí)現(xiàn)快速轉(zhuǎn)換PDF文件

 更新時(shí)間:2023年08月01日 09:30:54   作者:winfredzhang  
PDF是一種廣泛使用的文件格式,可以在任何設(shè)備上查看和打印,那么如何用Python和PyMuPDF制作你想要大小的PDF文件呢,本文就來(lái)和大家詳細(xì)講講

解決問(wèn)題

有時(shí)候?qū)⑽臋n上傳Claude2做分析,有大小限制,所以需要切割pdf文檔為幾個(gè)小點(diǎn)的文檔,故才有了本文章。

如何用Python和PyMuPDF制作你想要大小的PDF?

PDF是一種廣泛使用的文件格式,可以在任何設(shè)備上查看和打印。但是,有時(shí)您可能只需要查看PDF文件中的前幾頁(yè),而不是整個(gè)文件。在這種情況下,將PDF文件轉(zhuǎn)換為只包含指定頁(yè)數(shù)的新文件可能是有用的。本文將介紹如何使用Python和PyMuPDF模塊來(lái)實(shí)現(xiàn)此任務(wù)。

安裝PyMuPDF模塊

在使用PyMuPDF之前,我們需要先安裝它。可以使用以下命令來(lái)安裝PyMuPDF:

pip install PyMuPDF

導(dǎo)入PyMuPDF和wxPython模塊

接下來(lái),我們需要導(dǎo)入PyMuPDF和wxPython模塊:

import fitz
import wx

創(chuàng)建GUI界面

為了方便用戶(hù)輸入PDF文件和頁(yè)碼數(shù)量,我們將創(chuàng)建一個(gè)簡(jiǎn)單的GUI界面。我們將使用wxPython模塊來(lái)創(chuàng)建GUI界面。以下是代碼示例:

class PDFExtractorFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(PDFExtractorFrame, self).__init__(*args, **kw)
        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)
        self.file_picker = wx.FilePickerCtrl(panel, message="選擇PDF文件", wildcard="PDF Files (*.pdf)|*.pdf",
                                            style=wx.FLP_DEFAULT_STYLE | wx.FLP_USE_TEXTCTRL)
        vbox.Add(self.file_picker, 0, wx.EXPAND | wx.ALL, 10)
        self.page_input = wx.TextCtrl(panel, value="1", style=wx.TE_PROCESS_ENTER)
        vbox.Add(self.page_input, 0, wx.EXPAND | wx.ALL, 10)
        extract_button = wx.Button(panel, label="提取", size=(70, 30))
        extract_button.Bind(wx.EVT_BUTTON, self.on_extract)
        vbox.Add(extract_button, 0, wx.ALIGN_CENTER | wx.ALL, 10)
        panel.SetSizer(vbox)
        self.Bind(wx.EVT_TEXT_ENTER, self.on_extract, self.page_input)

此代碼創(chuàng)建一個(gè)名為PDFExtractorFrame的wx.Frame類(lèi),并在其構(gòu)造函數(shù)中創(chuàng)建GUI界面元素。它創(chuàng)建了一個(gè)wx.Panel對(duì)象和兩個(gè)wx.BoxSizer對(duì)象來(lái)放置GUI元素。在此GUI界面中,用戶(hù)可以選擇PDF文件和輸入要保留的頁(yè)碼數(shù)量。

實(shí)現(xiàn)轉(zhuǎn)換功能

接下來(lái),我們需要實(shí)現(xiàn)轉(zhuǎn)換功能。我們將使用PyMuPDF模塊來(lái)打開(kāi)PDF文件,并使用它來(lái)復(fù)制指定數(shù)量的頁(yè)面。以下是代碼示例:

def extract_pages(self, input_pdf, page_number, output_pdf):
        # 打開(kāi)PDF文檔
        pdf_document = fitz.open(input_pdf)
        total_pages = pdf_document.page_count
        # 確保頁(yè)碼不超過(guò)文檔的總頁(yè)數(shù)
        page_number = min(page_number, total_pages)
        # 創(chuàng)建新的PDF文檔,只包含指定頁(yè)碼之前的內(nèi)容
        pdf_writer = fitz.open()
        for page in range(page_number):
            pdf_writer.insert_pdf(pdf_document, from_page=page, to_page=page)
        # 保存新的PDF文檔到指定路徑
        pdf_writer.save(output_pdf)
        pdf_writer.close()
        pdf_document.close()

此代碼使用PyMuPDF模塊將PDF文件轉(zhuǎn)換為只包含前N頁(yè)的新PDF文件的函數(shù)。該函數(shù)將源PDF文件路徑,要提取的頁(yè)數(shù)和新PDF文件的輸出路徑作為參數(shù),并返回?zé)o返回值。以下是該函數(shù)的詳細(xì)說(shuō)明:

  • input_pdf: 源PDF文件的路徑。
  • page_number: 要提取的頁(yè)數(shù)。
  • output_pdf: 新PDF文件的輸出路徑。

該函數(shù)使用fitz.open()函數(shù)打開(kāi)輸入PDF文件并獲取其總頁(yè)數(shù)。如果指定的頁(yè)碼數(shù)量超過(guò)文檔的總頁(yè)數(shù),則將其設(shè)置為文檔的總頁(yè)數(shù)。

在創(chuàng)建新的PDF文檔之前,該函數(shù)創(chuàng)建一個(gè)空的PDF文檔對(duì)象。然后,它使用insert_pdf()函數(shù)從源PDF文件中復(fù)制每個(gè)頁(yè)面,并將其插入到新的PDF文檔對(duì)象中。該函數(shù)只復(fù)制指定數(shù)量的頁(yè)面。

最后,該函數(shù)使用save()函數(shù)將新PDF文檔保存到指定的輸出路徑,并使用close()函數(shù)關(guān)閉所有打開(kāi)的PDF文檔對(duì)象以釋放資源。

運(yùn)行應(yīng)用程序

完整代碼

import fitz  # PyMuPDF
import wx
class PDFExtractorApp(wx.App):
    def OnInit(self):
        self.frame = PDFExtractorFrame(None, title="PDF頁(yè)面提取工具")
        self.SetTopWindow(self.frame)
        self.frame.Show()
        return True
class PDFExtractorFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(PDFExtractorFrame, self).__init__(*args, **kw)
        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)
        self.file_picker = wx.FilePickerCtrl(panel, message="選擇PDF文件", wildcard="PDF Files (*.pdf)|*.pdf",
                                            style=wx.FLP_DEFAULT_STYLE | wx.FLP_USE_TEXTCTRL)
        vbox.Add(self.file_picker, 0, wx.EXPAND | wx.ALL, 10)
        self.page_input = wx.TextCtrl(panel, value="1", style=wx.TE_PROCESS_ENTER)
        vbox.Add(self.page_input, 0, wx.EXPAND | wx.ALL, 10)
        extract_button = wx.Button(panel, label="提取", size=(70, 30))
        extract_button.Bind(wx.EVT_BUTTON, self.on_extract)
        vbox.Add(extract_button, 0, wx.ALIGN_CENTER | wx.ALL, 10)
        panel.SetSizer(vbox)
        self.Bind(wx.EVT_TEXT_ENTER, self.on_extract, self.page_input)
    def on_extract(self, event):
        input_pdf = self.file_picker.GetPath()
        output_pdf = "output.pdf"
        try:
            page_number = int(self.page_input.GetValue())
            self.extract_pages(input_pdf, page_number, output_pdf)
            wx.MessageBox("PDF頁(yè)面提取完成!", "成功", wx.OK | wx.ICON_INFORMATION)
        except ValueError:
            wx.MessageBox("無(wú)效的頁(yè)碼輸入!", "錯(cuò)誤", wx.OK | wx.ICON_ERROR)
    def extract_pages(self, input_pdf, page_number, output_pdf):
        # 打開(kāi)PDF文檔
        pdf_document = fitz.open(input_pdf)
        total_pages = pdf_document.page_count
        # 確保頁(yè)碼不超過(guò)文檔的總頁(yè)數(shù)
        page_number = min(page_number, total_pages)
        # 創(chuàng)建新的PDF文檔,只包含指定頁(yè)碼之前的內(nèi)容
        pdf_writer = fitz.open()
        for page in range(page_number):
            pdf_writer.insert_pdf(pdf_document, from_page=page, to_page=page)
        # 保存新的PDF文檔到指定路徑
        pdf_writer.save(output_pdf)
        pdf_writer.close()
        pdf_document.close()
if __name__ == '__main__':
    app = PDFExtractorApp()
    app.MainLoop()

以上就是Python利用PyMuPDF模塊實(shí)現(xiàn)快速轉(zhuǎn)換PDF文件的詳細(xì)內(nèi)容,更多關(guān)于Python PyMuPDF轉(zhuǎn)換PDF的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python實(shí)現(xiàn)基于樸素貝葉斯的垃圾分類(lèi)算法

    python實(shí)現(xiàn)基于樸素貝葉斯的垃圾分類(lèi)算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)基于樸素貝葉斯的垃圾分類(lèi)算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 使用Python與MQTT實(shí)現(xiàn)異步通信功能

    使用Python與MQTT實(shí)現(xiàn)異步通信功能

    物聯(lián)網(wǎng)(IoT)和實(shí)時(shí)通信的世界中,消息隊(duì)列遙測(cè)傳輸(MQTT)協(xié)議因其輕量級(jí)、可靠性和實(shí)時(shí)性成為廣受歡迎的選擇,本文給大家介紹了使用Python與MQTT實(shí)現(xiàn)異步通信功能,需要的朋友可以參考下
    2024-12-12
  • python3 BeautifulSoup模塊使用字典的方法抓取a標(biāo)簽內(nèi)的數(shù)據(jù)示例

    python3 BeautifulSoup模塊使用字典的方法抓取a標(biāo)簽內(nèi)的數(shù)據(jù)示例

    這篇文章主要介紹了python3 BeautifulSoup模塊使用字典的方法抓取a標(biāo)簽內(nèi)的數(shù)據(jù),結(jié)合實(shí)例形式Fenix了python3 BeautifulSoup模塊進(jìn)行數(shù)據(jù)的抓取相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • 使用Spire.XLS for Python高效讀取Excel數(shù)據(jù)的代碼實(shí)現(xiàn)

    使用Spire.XLS for Python高效讀取Excel數(shù)據(jù)的代碼實(shí)現(xiàn)

    在數(shù)據(jù)驅(qū)動(dòng)的時(shí)代,Python已成為數(shù)據(jù)處理領(lǐng)域的瑞士軍刀,然而,當(dāng)我們面對(duì)最常見(jiàn)的數(shù)據(jù)載體——Excel文件時(shí),如何高效、準(zhǔn)確地從中提取所需信息,卻常常成為許多開(kāi)發(fā)者和數(shù)據(jù)分析師的痛點(diǎn),本文給大家介紹了如何使用Spire.XLS for Python高效讀取Excel數(shù)據(jù)
    2025-09-09
  • python3中類(lèi)的繼承以及self和super的區(qū)別詳解

    python3中類(lèi)的繼承以及self和super的區(qū)別詳解

    今天小編就為大家分享一篇python3中類(lèi)的繼承以及self和super的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • 詳解python 一維、二維列表的初始化問(wèn)題

    詳解python 一維、二維列表的初始化問(wèn)題

    這篇文章主要介紹了python 一維、二維列表的初始化,本文通過(guò)兩種方式給大家詳細(xì)講解,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-06-06
  • pytorch無(wú)坑安裝CPU版小白教程(配gpu版鏈接、conda命令教程)

    pytorch無(wú)坑安裝CPU版小白教程(配gpu版鏈接、conda命令教程)

    pip安裝無(wú)論是cpu還是gpu的pytorch安裝,其實(shí)官方給了很好的安裝流程,本文主要介紹了pytorch無(wú)坑安裝CPU版小白教程,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Python操作Spark常用命令指南

    Python操作Spark常用命令指南

    Python操作Spark的常用命令指南,涵蓋從環(huán)境配置到數(shù)據(jù)分析的核心操作,本文介紹了如何使用PySpark進(jìn)行環(huán)境配置和核心操作,包括數(shù)據(jù)讀寫(xiě)、處理與轉(zhuǎn)換、聚合與高級(jí)分析,以及運(yùn)行SQL查詢(xún)和性能優(yōu)化,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • Python全景系列之?dāng)?shù)據(jù)類(lèi)型大盤(pán)點(diǎn)

    Python全景系列之?dāng)?shù)據(jù)類(lèi)型大盤(pán)點(diǎn)

    這篇文章主要為大家介紹了Python全景系列之?dāng)?shù)據(jù)類(lèi)型的盤(pán)點(diǎn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • python密碼學(xué)換位密碼及換位解密轉(zhuǎn)置加密教程

    python密碼學(xué)換位密碼及換位解密轉(zhuǎn)置加密教程

    這篇文章主要為大家介紹了python密碼學(xué)換位密碼及換位解密轉(zhuǎn)置加密教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論

东明县| 竹山县| 揭西县| 平武县| 丘北县| 潮州市| 错那县| 运城市| 南溪县| 宝兴县| 定西市| 山东| 永福县| 时尚| 前郭尔| 孙吴县| 兴安盟| 澜沧| 奎屯市| 阿克苏市| 博爱县| 长治县| 惠安县| 朝阳区| 海城市| 温泉县| 内江市| 滁州市| 新源县| 新建县| 万州区| 道孚县| 林西县| 江油市| 东丽区| 宜都市| 时尚| 莲花县| 余姚市| 吴旗县| 元阳县|