#PyMuPDF.py import fitz import sys import os #import pdb #デバグ if len(sys.argv) < 2: sys.exit("PDFファイルを指定してください") else: PDFileName = sys.argv[1] if not os.path.isfile(PDFileName): sys.exit(PDFileName+"\nが見つからない") #PDFileName='c:\Program Files (x86)\JustSystems\ATOK27\ATOK2014.PDF' ResultFileName=os.path.splitext(PDFileName)[0] + '.txt' ResultText='' doc = fitz.open(PDFileName) toc=doc.get_toc() ItemNum=3 #col の何番目? 後ろから読むから 3 Start SkipNode=False NodeTitle='' NodeLevel=0 StartNum=0 TmpInt=-1 LevelDot='' EndNum=doc.page_count-1 for row in range(len(toc)-1,-1,-1): for col in range(len(toc[row])-1,-1,-1): # for col in range(2,-1,-1): match ItemNum: case 1: #一つ目の要素 レベル ItemNum=3 NodeLevel=toc[row][col] LevelDot='.'*NodeLevel # ResultText=LevelDot+NodeTitle+'\n'+str(StartNum)+'\n'+ResultText # pdb.set_trace() #ブレーク if SkipNode: ResultText=LevelDot+NodeTitle+'\n'+ResultText continue if EndNum==StartNum: ResultText=LevelDot+NodeTitle+'\n'+doc[StartNum-1].get_text()+'\n'+ResultText else: for page in range(StartNum,EndNum): text = text+'\n'+doc[page].get_text() ResultText=LevelDot+NodeTitle+'\n'+text+'\n'+ResultText case 2: #2つ目の要素 ノードタイトル ItemNum=1 NodeTitle=toc[row][col] case _: #3つ目の要素 レベル ItemNum=2 text='' TmpInt=toc[row][col] if StartNum==TmpInt: SkipNode=True; continue else: EndNum=StartNum-1 StartNum=TmpInt SkipNode=False with open(ResultFileName, 'w', encoding='UTF-8') as f: print(ResultText.rstrip('\n'), file=f) print(PDFileName+' → → → '+PDFileName) print('おわり ♪ヘ(^^ヘ)(ノ^^)ノヘ(^^ヘ)(ノ^^)ノ♪')