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

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

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

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

Python

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

Q&A

解決済

1回答

1057閲覧

pikePDFでパスワード解除したPDFファイルをJPEGに変換すると文字が消える

comeon

総合スコア9

PDF

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

Python

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

0グッド

0クリップ

投稿2022/10/21 02:13

前提

PythonでPDFのファイルをJPEGに変換するプログラムを作っています。
PDF → JPEG 変換には pdf2image ライブラリを使用しており、これは問題なく実行できます。
パスワードロックのかかったPDFファイルのセキュリティ解除には pikePDF ライブラリを使用しており、これも問題なくセキュリティ解除できます。

ところがセキュリティを解除したPDF文書は、JPEGに変換すると日本語の文字が消えてしまいます。

日本語も含めて正しくJPEG化する方法を教えてください。よろしくお願いします。

実現したいこと

pikePDF でセキュリティ解除した PDF文書を正しく JPEG に変換したい

発生している問題・エラーメッセージ

pikePDF でのセキュリティ解除は正常に行われており、文書のプロパティを見るとセキュリティが解除されていることがわかります。

【解除前】 
セキュリティ設定: パスワードセキュリティ
暗号化レベル: 40ビット RCA
セキュリティ設定の詳細: ドキュメントの変更: 許可されていません
ドキュメントアセンブリ: 許可されていません
テンプレートページの作成: 許可されていません
(その他: 許可されています)

【解除後】
セキュリティ設定: なし
暗号化レベル: なし
セキュリティ設定の詳細: (すべての項目で”許可されています”)

このセキュリティ解除された PDF文書はPC画面上では正しく表示され、印刷も問題なくできます。

ところが、これを pdf2image ライブラリを使って JPEGに変換すると、日本語が消えてしまい、枠線だけが表示されています。

もともとパスワードロックのかかっていない PDF文書は、pdf2imageで問題なくJPEG変換できています。

PDFのセキュリティが解除され、このファイルのプロパティにもセキュリティが解除されて通常の PDF文書と同じ状態なのに、JPEG化すると日本語が消えてしまう原因がわかりません。

該当のソースコード

Python

1import os 2from pathlib import Path 3from pdf2image import convert_from_path 4import glob 5from pikepdf import Pdf 6 7# PDFファイル抽出、アンロック 8pdf_file = 'ファイルパス\pdf_file\\' 9pdf_unlocked = 'ファイルパス\pdf_unlocked\\' 10 11for count, filename in enumerate(os.listdir(pdf_file)): 12 if ".pdf" in filename: 13 oldfilename = pdf_file + filename 14 newfilename = pdf_unlocked + filename 15 16 pdf = Pdf.open(oldfilename) 17 newPdf = Pdf.new() 18 newPdf.pages.extend(pdf.pages) 19 newPdf.save(newfilename) 20 21# PDFファイルパスの取得 22for x in glob.glob("ファイルパス\pdf_unlocked\*.pdf"): 23 pdf_path = Path(x) 24 25 # pdfから画像に変換 26 pages = convert_from_path(pdf_path, poppler_path = r"propplerパス\proppler\bin", dpi=200) 27 28 # 画像ファイルを保存 29 image_dir = Path("ファイルパス/image_file") 30 31 for i, page in enumerate(pages): 32 # ファイルネーム 33 file_name = f'{pdf_path.stem}_{i + 1:02}.jpeg' 34 image_path = f'{image_dir}/{file_name}' 35 # JPEGで保存 36 page.save(image_path, "JPEG")

試したこと

パスワードロックのかかったPDF文書を、プリンターアプリを使って再度PDFとして出力するとセキュリティが解除されるので、これを pdf2image でJPEG化すると問題なく日本語が表示されることがわかっています。このPDFファイルのプロパティはpikePDFでセキュリティ解除したPDFファイルと同じです。

補足情報(FW/ツールのバージョンなど)

Python 3.10.4
pdf2image 1.16.0
pikepdf 6.2.0

pikePDF と pdf2image を使う方法以外でも構いません。Python でパスワードロックのかかったPDFファイルをJPEG化する方法がありましたら教えてください。
(自分だけが使うプログラムではないのでプリンターアプリを使う方法は利用できません)

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
PDFのパスワードロックは関係なく、フォントの問題でした。
JPEG化できないPDFはプロパティでフォントに embedded / embedded subset (埋め込み または 埋め込みサブセット)と記載されておらず、これが問題かも、と考えて

https://teratail.com/questions/373204?sort=2

の方の質問と回答を参考にして、最新のpopplerを

https://github.com/oschwartz10612/poppler-windows/releases

からダウンロードして(最新の poppler - windows には poppler-data も既に入っています)
これを使用して JPEG化したところ、セキュリティを解除しなくても無事に日本語が表示されました。

ご協力ありがとうございました。

投稿2022/10/25 07:12

comeon

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問