1. 程式人生 > >python 解析pdf文件的首、尾頁

python 解析pdf文件的首、尾頁

1.如何解析指定頁面而不是文件的全部?

2.利用哪些三方庫?


一、PDF文件解析

1.將輸入尾的文件提取出首頁和尾頁(import PyPDF2 )

def getdespdf(self,path):
       # print("輸出路徑為:", self.file_path_out)
        fp=open(path,"rb")   #開啟輸入檔案路徑
        fr=PdfFileReader(fp) #讀取pdf 輸入流
        output=PdfFileWriter() #輸出流
        lastpage = fr.getNumPages() #根據輸入流得到pdf文件的總頁數
        end_index = lastpage - 1
       # testnu=fr.getPageNumber()
        pages_index =[0,end_index] #首頁和尾頁的 index 組成一個元組
        for i in pages_index:
            output.addPage(fr.getPage(i)) #取到首頁和尾頁,載入進輸出流
        outputstream = open(self.file_path_out,"wb") #確定提取後需要儲存到的位置
        output.write(outputstream)#儲存首頁和尾頁 得到一個新的pdf檔案
        #closed stream
        outputstream.close()   #常規操作,關閉流
        fp.close()

2.解析新組成的pdf,並返回內容字串

 def parsein(self,path):
        result_text = []
        fp_in = open(path, 'rb')  #開啟檔案
        parser = PDFParser(fp_in) #pdf解析器
        doc = PDFDocument()  #建立一個文件物件
        # 連線分析器與文件物件
        parser.set_document(doc)
        doc.set_parser(parser)
        # 提供初始化密碼
        doc.initialize()

        # 檢測文件是否提供txt轉換,不提供就忽略,功能不需要
        #if not doc.is_extractable:
        #  raise PDFTextExtractionNotAllowed
        #else:
        # 建立PDF資源管理器來共享資源
        rsrcmgr = PDFResourceManager()
        # 建立一個PDF裝置物件
        laparams = LAParams()
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)
        # 建立一個PDF直譯器物件
        interpreter = PDFPageInterpreter(rsrcmgr, device)

        for page in doc.get_pages():   
            # 使用頁面直譯器來讀取
            interpreter.process_page(page)
            # 接受該頁面的LTpage物件
            layout = device.get_result()

            for x in layout:
                if (isinstance(x, LTTextBoxHorizontal)):
                   # with open(r'parseresult.txt', 'a') as f:
                    results = x.get_text() #str型別
                   #f.write(results + "\n")
                    result_text.append(results) #之後轉換為二進的list型別
        return result_text  #這裡返回的是list型別