質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1990閲覧

PDFの傾きを直すアプリを作りたい

kerokero9

総合スコア2

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/05 13:42

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問