Python pdf回転csv

6330 ワード

Python pdf回転csv
  • バックグラウンド
  • 依存環境
  • 依存プライマリpythonパケット
  • pdfminer

  • 背景
                  (  、  、   )   ,         PDF   ,      PDF,  PHP   pdf    ,     Python。     pdf  csv,    csv     。
    

    依存環境
    Python 3.7.6 
    Java 1.8.0_121(tabula-py    tabula-java    ,       Java)
    nignx       flask  ,       80  ,        ,      nginx   ,            
    

    依存するプライマリpythonパッケージ
    flask==1.1.1      
    pdfminer.six==20200124    PDF  
    

    pdfminer
    後でflaskを単独で話すので、ここでは主にpdfminerについて話します.
  • pip install pdfminerを取り付ける.six
  • を実現
    from pdfminer.high_level import extract_text
    from pdfminer.pdfparser import PDFSyntaxError
    
    def _parse(file_path, line_count=0):
        """          ,         """
        area = [266, 42.765625, 785.028125, 564.134375]
        if line_count != 0:
            area[2] = 3120.003125 + 31.2375 * line_count
        dfs = tabula.read_pdf(file_path, pages="all", area=area)
        num = len(dfs)
        save_data = []
        save_data.append(dfs[0])
        if num == 0:
            logging.error("no table found")
        elif 1 < num:
            for i in range(1, num):
                area = [175, 42.765625, 785.028125, 564.134375]
                area[2] = 3120.003125 + 31.2375 * line_count
                dfs = tabula.read_pdf(file_path, pages=i + 1, area=didi_area)
                save_data.append(dfs[0])
        #                ,      CSV   
        for i in range(0, num):
            save_data[i].columns = [name.replace('\r', ' ') for name in save_data[i].columns]
        return save_data
    

    ファイルの内容を簡単に読み取る機能で、複数ページの読み取りをサポートしています.area:読み取り内容の位置を制御します.2ページ目のデータの位置は1ページ目とは異なるので、再読み取りが必要です.
    そしてCSVにデータを書き込む
    # data    PDF  
    # output_path csv     
    def _output_csv(data, output_path):
        """   DataFrame     API,    CSV   """
        #    BOM  ,      Excel     CSV
        with open(output_path, mode='wb') as output:
            output.write(BOM_UTF8)
    
        with open(output_path, mode='a', newline='') as output:
            for i in range(0, len(data)):
                data[i].to_csv(output, index=False)
    

    以上でCSVファイルが生成され、あとはCSVファイルデータを取得すればよい.
    プロジェクトアドレス:pdf 2 csv.