PDFの傾きを直すアプリを作りたいと思い下記のコードを書きました。
直したいPDFファイルは複数あり、一つのフォルダに入っています。またページ数はバラバラです。
最後、傾きを直した画像を元と同じページ数のPDFで出力したいのですが方法がわかりません。
とりあえず傾きを直した後の画像をリストにしてみました。
このリストをPDF化出来る方法があればよいと考えましたが、見当違いでしょうか。
ご教示よろしくお願いいたします。
傾きの補正は下記ブログを参考にしました。
http://reverent.hateblo.jp/entry/2017/01/11/112726
Python
1folder = "test" 2files = os.listdir(folder) 3 4for file in files: 5 6 img_rotate = [] 7 8 path = folder+"/"+file 9 fp = open(path, "rb") 10 11 parser = PDFParser(fp) 12 document = PDFDocument(parser) 13 rsrcmgr = PDFResourceManager() 14 laparams = LAParams() 15 device = PDFPageAggregator(rsrcmgr, laparams=laparams) 16 interpreter = PDFPageInterpreter(rsrcmgr, device) 17 18 for i,page in enumerate(PDFPage.create_pages(document)): 19 interpreter.process_page(page) 20 layout = device.get_result() 21 22 for obj in layout: 23 if isinstance(obj, LTFigure): 24 for obj in obj: 25 if isinstance(obj, LTImage): 26 images = obj 27 28 buffer = io.BytesIO() 29 buffer.write(images.stream.get_rawdata()) 30 buffer.seek(0) 31 img = Image.open(buffer) 32 33 #角度算出 34 img_cv = np.array(img, dtype=np.uint8) 35 gray_image = cv2.cvtColor(img_cv, cv2.COLOR_RGB2GRAY) 36 ret,gray_2 = cv2.threshold(gray_image, 0, 255, cv2.THRESH_OTSU) 37 gray_rev = cv2.bitwise_not(gray_2) 38 39 lines = cv2.HoughLinesP(gray_rev, rho=1, theta=np.pi/360, threshold=50, minLineLength=600, maxLineGap=1) 40 41 sum_arg = 0 42 count = 0 43 HORIZONTAL = 0 44 DIFF = 20 45 for line in lines: 46 for x1,y1,x2,y2 in line: 47 arg = math.degrees(math.atan2((y2-y1), (x2-x1))) 48 if arg > HORIZONTAL - DIFF and arg < HORIZONTAL + DIFF : 49 sum_arg += arg 50 count += 1 51 if count == 0: 52 arg = HORIZONTAL 53 else: 54 arg = (sum_arg / count) - HORIZONTAL 55 56 #回転 57 img_rotate.append(img.rotate(arg,resample=Image.BICUBIC,fillcolor=(255, 255, 255))) 58
あなたの回答
tips
プレビュー