<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PyPDF | ばすにっきTips</title>
	<atom:link href="https://takabus.com/tips/tag/pypdf/feed/" rel="self" type="application/rss+xml" />
	<link>https://takabus.com/tips</link>
	<description>プログラミングやサーバー、日々のTipsをメモしています。</description>
	<lastBuildDate>Thu, 15 Sep 2022 12:44:57 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.3</generator>

<image>
	<url>https://takabus.com/tips/wp-content/uploads/2022/12/cropped-tips-1-32x32.png</url>
	<title>PyPDF | ばすにっきTips</title>
	<link>https://takabus.com/tips</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Python】複数のPDFから特定ページを抽出し、1つのPDFに結合するには？</title>
		<link>https://takabus.com/tips/1354/</link>
					<comments>https://takabus.com/tips/1354/#respond</comments>
		
		<dc:creator><![CDATA[ばすにっきTips]]></dc:creator>
		<pubDate>Wed, 04 May 2022 06:58:59 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[PyPDF]]></category>
		<guid isPermaLink="false">https://takabus.com/tips/?p=1354</guid>

					<description><![CDATA[複数のPDFから特定のページ（最初のページなど）を抽出し、1つのPDFに結合するPythonスクリプトを紹介します。]]></description>
										<content:encoded><![CDATA[
<p>複数のPDFから特定のページ（最初のページなど）を抽出し、1つのPDFに結合するPythonスクリプトを紹介します。</p>



<h2 class="wp-block-heading">サンプルコード</h2>



<pre class="wp-block-code"><code>import glob
from PyPDF2 import PdfFileReader, PdfFileWriter

# PdfFileWriterを作成
writer = PdfFileWriter()

# 元のPDFファイルのリストを取得する
files = glob.glob("*.pdf")

# 各ファイルから1ページ目を抽出
for i in range(len(files)):
    # 元のファイルを開く
    reader = PdfFileReader(files&#91;i])
    # 1ページ目を抽出する
    page = reader.pages&#91;0]
    # PdfFileWriterに抽出したページを追加する
    writer.addPage(page)

# 1ページ目を結合したPDFを書き出す
with open("combine1page.pdf", "wb") as f:
    writer.write(f)
</code></pre>



<p>ライブラリにPyPDF2を使用していますので、あらかじめpipでインストールしておいてください。</p>




<a rel="noopener" href="https://pypi.org/project/PyPDF2/" title="PyPDF2" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://pypi.org/static/images/twitter.abaf4b19.webp" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">PyPDF2</div><div class="blogcard-snippet external-blogcard-snippet">A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://pypi.org/project/PyPDF2/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">pypi.org</div></div></div></div></a>



<h2 class="wp-block-heading">解説</h2>



<p>PdfFileReaderで各PDFファイルから1ページ目を抽出し、共通のPdfFileWriterに書き込むことにより実現しています。</p>



<p> <code>reader.pages[<span class="red">0</span>]</code>のインデックスを変えることで、任意のページを抽出し結合することができます。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://takabus.com/tips/1354/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Python】スキャンしたQRコードを解析し、しおり付きのPDFを作成する（OpenCV＋img2pdf＋PyPDF）</title>
		<link>https://takabus.com/tips/1331/</link>
					<comments>https://takabus.com/tips/1331/#respond</comments>
		
		<dc:creator><![CDATA[ばすにっきTips]]></dc:creator>
		<pubDate>Tue, 03 May 2022 09:57:08 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[PyPDF]]></category>
		<category><![CDATA[OpenCV]]></category>
		<guid isPermaLink="false">https://takabus.com/tips/?p=1331</guid>

					<description><![CDATA[Pythonでスキャン画像に含まれるQRコードを解析し、自動的にしおり付きのPDFを生成するプログラムを作成してみました。]]></description>
										<content:encoded><![CDATA[
<p><strong><span class="marker-under">スキャン画像に含まれる<span class="red">QRコード</span>を解析し、<span class="bold-red">しおり付きのPDFファイル</span>を自動的に作成するプログラム</span>をPythonで作成しましたので、ご紹介します。</strong></p>



<p>当プログラムを活用することで、あらかじめQRコードを仕込んでおいた書類をスキャンしたときに、しおり付きのPDFを自動的に作成することができます。大量の書類や伝票などを一気にスキャンした際でも、しおりが自動的に作成されることで、すぐに目的のページにジャンプすることが可能となります。</p>



<div data-wp-interactive="" class="wp-block-file"><object data-wp-bind--hidden="!selectors.core.file.hasPdfPreview" hidden class="wp-block-file__embed" data="https://takabus.com/tips/wp-content/uploads/2022/05/qrcode-bookmark-pdf.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="<span class=&quot;fz-16px&quot;&gt;実際にPythonでQRコードを解析し生成したPDFがこちら↑</span&gt;の埋め込み。の埋め込み。"></object><a id="wp-block-file--media-7f20472e-dfa5-42ce-8b01-22229432a8b8" href="https://takabus.com/tips/wp-content/uploads/2022/05/qrcode-bookmark-pdf.pdf"><span class="fz-16px">実際にPythonでQRコードを解析し生成したPDFがこちら↑</span></a></div>



<h2 class="wp-block-heading">できること</h2>



<ul><li><strong><span class="marker-under">スキャンした画像ファイルに含まれるQRコードを解析</span></strong></li><li><strong><span class="marker-under">画像にQRコードが含まれていると、そのページにジャンプするしおりがPDFに作成される</span></strong></li><li><strong><span class="marker-under">しおりのタイトルはQRコードに含まれている文字列が設定される</span></strong></li></ul>



<p>当記事ではしおりを付与するサンプルをご紹介していますが、コードをカスタマイズすることで、タグ付きPDFを生成したり、QRコードのあるページでファイルを分割したりするようなこともできます。</p>



<h2 class="wp-block-heading">実際に動かしてみよう！</h2>



<p>さっそくサンプルをご紹介します。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p><strong>プログラムとサンプルファイル一式をダウンロードできます。</strong></p>



<div class="wp-block-file"><a id="wp-block-file--media-eded5fe8-acdd-4690-8910-9f7d23aa5d1f" href="https://takabus.com/tips/wp-content/uploads/2022/05/qrcode-bookmark-pdf.zip">qrcode-bookmark-pdf</a><a href="https://takabus.com/tips/wp-content/uploads/2022/05/qrcode-bookmark-pdf.zip" class="wp-block-file__button" download aria-describedby="wp-block-file--media-eded5fe8-acdd-4690-8910-9f7d23aa5d1f">ダウンロード</a></div>
</div>



<p>Pythonスクリプトと同じ階層にフォルダ（ここではimages）を作成し、スキャンした画像ファイルを配置しておきます。</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="529" height="419" src="https://takabus.com/tips/wp-content/uploads/2022/05/image-1.png" alt="" class="wp-image-1335" srcset="https://takabus.com/tips/wp-content/uploads/2022/05/image-1.png 529w, https://takabus.com/tips/wp-content/uploads/2022/05/image-1-300x238.png 300w" sizes="(max-width: 529px) 100vw, 529px" /></figure>



<p>画像ファイルにはしおりを作成したいページにQRコードを含めておきます。QRコードはネット上にある各種無料ツールを使って作成できますが、解析に使用しているOpenCVのQRCodeDecoderはUTF-8にしか対応していないため、日本語や全角文字を含める場合はUTF-8でエンコードされている必要があります。</p>




<a rel="noopener" href="https://www.benricho.org/G_Gadgets/qr-code/" title="&#28961;&#26009;QR&#12467;&#12540;&#12489;&#29983;&#25104;&#12484;&#12540;&#12523;&#12539;QR&#12467;&#12540;&#12489;&#12434;&#31777;&#21336;&#20316;&#25104; - QR Code Generator&#12304;&#12415;&#12435;&#12394;&#12398;&#30693;&#35672; &#12385;&#12423;&#12387;&#12392;&#20415;&#21033;&#24115;&#12305;" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.benricho.org%2FG_Gadgets%2Fqr-code%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#28961;&#26009;QR&#12467;&#12540;&#12489;&#29983;&#25104;&#12484;&#12540;&#12523;&#12539;QR&#12467;&#12540;&#12489;&#12434;&#31777;&#21336;&#20316;&#25104; - QR Code Generator&#12304;&#12415;&#12435;&#12394;&#12398;&#30693;&#35672; &#12385;&#12423;&#12387;&#12392;&#20415;&#21033;&#24115;&#12305;</div><div class="blogcard-snippet external-blogcard-snippet">無料QRコード作成ツール・QRコード生成ツールです。QRコードを簡単に生成することができます。『みんなの知識 ちょっと便利帳』の一部です。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.benricho.org/G_Gadgets/qr-code/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.benricho.org</div></div></div></div></a>



<p>コードがつぶれていなければ、かなり小さくでも認識できるようですので、じゃまにならない程度のサイズで入れておけばOKです。位置は自由です。</p>



<figure class="wp-block-image size-full"><a href="https://takabus.com/tips/wp-content/uploads/2022/05/image-2.png"><img loading="lazy" decoding="async" width="937" height="508" src="https://takabus.com/tips/wp-content/uploads/2022/05/image-2.png" alt="" class="wp-image-1336" srcset="https://takabus.com/tips/wp-content/uploads/2022/05/image-2.png 937w, https://takabus.com/tips/wp-content/uploads/2022/05/image-2-300x163.png 300w, https://takabus.com/tips/wp-content/uploads/2022/05/image-2-768x416.png 768w" sizes="(max-width: 937px) 100vw, 937px" /></a></figure>



<p>以下のスクリプト（Python）を実行すると、しおり付きのPDFが生成されます。</p>



<pre class="wp-block-code"><code>import os
import sys
import glob
import cv2
import img2pdf
from PyPDF2 import PdfFileWriter, PdfFileReader

# 画像ファイルがあるフォルダを指定する

folderPath = "images"

# フォルダに存在する画像ファイルのリストを取得する
images = glob.glob(os.path.join(folderPath, "*.*"))
print(images)

# しおりのデータ
bookmarks = &#91;]

# QRコードを認識する
for i in range(len(images)):
    # 画像ファイルリストを表示する
    print(images&#91;i])
    # 画像ファイルを開く
    image = cv2.imread(images&#91;i])
    # QRコードを認識する
    qrDetector = cv2.QRCodeDetector()
    data, bbox, rectifiedImage = qrDetector.detectAndDecode(image)
    # 画像をプレビュー
    # cv2.imshow("Rectified QRCode", images&#91;i])
    # cv2.waitKey(0)
    # cv2.destroyAllWindows()
    print(data)
    # しおりデータを追加
    if data!="":
        bookmarks.append(&#91;i, data])

# 画像をPDFファイルに変換する
with open("temp.pdf", "wb") as f:
    f.write(img2pdf.convert(images))

# PyPDF2でPDFファイルを開く
input = PdfFileReader('temp.pdf')

# PdfFileWriterのインスタンスを作成
output = PdfFileWriter()

# オリジナルのPDFをPdfFileWriterにコピーする
output.cloneDocumentFromReader(input)

# しおりを追加する
for i in range(len(bookmarks)):
    output.addBookmark(bookmarks&#91;i]&#91;1], bookmarks&#91;i]&#91;0])

# PDFを出力する
with open(os.path.basename(folderPath)+".pdf", 'wb') as o:
    output.write(o)
</code></pre>



<p>生成されたPDFはこんな感じです。「サンプルQRコード」という文字列を含むQRコードを画像に貼り付けて、上記スクリプトでPDFを生成しました。しおりペインを開いてもらうと、QRコードからしおりが作成されていることが確認できます。</p>



<div data-wp-interactive="" class="wp-block-file"><object data-wp-bind--hidden="!selectors.core.file.hasPdfPreview" hidden class="wp-block-file__embed" data="https://takabus.com/tips/wp-content/uploads/2022/05/qrcode-bookmark-pdf.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="qrcode-bookmark-pdfの埋め込み。の埋め込み。"></object><a id="wp-block-file--media-5753ac68-818f-48d7-a6cc-12993b5831f6" href="https://takabus.com/tips/wp-content/uploads/2022/05/qrcode-bookmark-pdf.pdf">qrcode-bookmark-pdf</a><a href="https://takabus.com/tips/wp-content/uploads/2022/05/qrcode-bookmark-pdf.pdf" class="wp-block-file__button" download aria-describedby="wp-block-file--media-5753ac68-818f-48d7-a6cc-12993b5831f6">ダウンロード</a></div>



<p>なお、本スクリプトを実行するには、以下のライブラリが必要となります。あらかじめpipでインストールしておいてください。</p>



<ul><li><a href="https://pypi.org/project/img2pdf/">img2pdf</a></li><li><a href="https://pypi.org/project/opencv-python/">opencv-python</a></li><li><a href="https://pypi.org/project/PyPDF2/">PyPDF2</a></li></ul>



<h2 class="wp-block-heading">しくみ</h2>



<p>処理内容としては以下のような流れとなります。</p>



<ol><li><span class="marker-under"><strong>フォルダに含まれている画像ファイルのリストを取得</strong></span></li><li><span class="marker-under"><strong>各画像ファイルを<span class="bold-red">OpenCV</span>で解析</strong></span><br>OpenCVで各画像を解析し、QRコードが存在している画像のインデックスとデータを配列に格納します。</li><li><strong><span class="marker-under"><span class="red">img2pdf</span>で画像ファイルをPDFに変換</span></strong><br>img2pdfで画像ファイルからしおりなしのPDFファイルを生成しておきます。</li><li><strong><span class="marker-under">QRコードのデータをもとに<span class="bold-red">PyPDF2</span>でしおりを作成する</span></strong><br>PyPDF2で変換したPDFを開き、配列に格納されているQRコードのデータをもとにしおりを作成します。</li></ol>



<p>指定されたフォルダ（サンプルではimages）に含まれている画像ファイルを逐次解析し、QRコードがあるページのインデックスとQRコードに含まれる文字列を取得しています。取得されたデータは配列に格納しておき、img2pdfで画像ファイルをPDFにしたあと、PyPDF2でしおりを追加しています。</p>



<div class="wp-block-cocoon-blocks-micro-balloon-2 micro-balloon micro-top micro-copy"><span class="micro-balloon-content micro-content">サンプルの注意点</span></div>



<ul><li>画像のファイル名・フォルダパスは英数字のみである必要があります（OpenCVが日本語のパスに対応していないため）</li><li>QRコードに日本語を含める場合は、UTF-8でエンコードされている必要があります。</li></ul>



<h2 class="wp-block-heading">まとめ</h2>



<p>QRコードを活用し、Pythonでスキャン画像からしおり付きのPDFを生成するサンプルを紹介しました。</p>



<p>今回のサンプルを応用することにより、QRコードで管理されている帳票や文書を自動的に仕分けたり、さまざまな利用法が考えられます。業務システムに組み込めば、紙文書の電子化も効率的に行えそうですね。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://takabus.com/tips/wp-content/uploads/2021/09/man-150x150.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>なお、すでにPDFファイル化されている場合でも、pdf2imgなどのライブラリを組み合わせることで同様のことが実現できます。機会があれば、すでにPDF化されているファイルのQRコード解析についても公開したいと思います。</p>
</div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://takabus.com/tips/1331/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Python】PDFのメタデータを設定・取得するには？</title>
		<link>https://takabus.com/tips/1322/</link>
					<comments>https://takabus.com/tips/1322/#respond</comments>
		
		<dc:creator><![CDATA[ばすにっきTips]]></dc:creator>
		<pubDate>Sun, 01 May 2022 13:43:46 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[PyPDF]]></category>
		<guid isPermaLink="false">https://takabus.com/tips/?p=1322</guid>

					<description><![CDATA[PythonからPDFのメタデータを取得したり、PDFにメタデータを設定する方法を紹介します。]]></description>
										<content:encoded><![CDATA[
<p>PythonからPDFのメタデータを取得したり、PDFにメタデータを設定する方法を紹介します。</p>



<h2 class="wp-block-heading">メタデータとは？</h2>



<p>PDFの「メタデータ」とは、PDFのタイトルや作成者、タグといったデータのことを指します。</p>



<p>適切なメタデータを設定しておくことで、AcrobatなどのPDF閲覧アプリでファイルを管理しやすくすることができます。</p>



<p>メタデータはAcrobatなどのPDFソフトで設定できますが、今回はPythonで設定・取得する方法を紹介していきます。なお、設定されているメタデータはAcrobat Readerなどのアプリで、PDFのプロパティから確認することができます。</p>



<h2 class="wp-block-heading">PDFのメタデータを取得する</h2>



<p>まず、PDFファイルからメタデータを取得するサンプルを紹介します。</p>



<p><span class="marker-under"><strong>PDFからメタデータを取得するには、<span class="red">getDocumentInfo</span>メソッドを使います。</strong></span></p>



<pre class="wp-block-code"><code>from PyPDF2 import PdfFileWriter, PdfFileReader

output = PdfFileWriter() 
input = PdfFileReader(open('test.pdf', 'rb')) 

# メタデータを取得する
info=input.getDocumentInfo()
# メタデータを表示する

print(info.author)  #作成者
print(info.creator) #ファイル作成ソフト（アプリケーション）
print(info.producer)#PDF変換ソフト
print(info.subject) #サブタイトル
print(info.title)   #タイトル
</code></pre>



<p>PDFファイルをPdfFileReaderで開き、getDocumentInfoを実行すると、PDFファイルのメタデータを取得することができます。</p>




<a rel="noopener" href="https://pypdf2.readthedocs.io/en/latest/modules/PdfFileReader.html?highlight=getDocumentInfo#PyPDF2.pdf.PdfFileReader.getDocumentInfo" title="
  Documentation page not found
 - Read the Docs" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fpypdf2.readthedocs.io%2Fen%2Flatest%2Fmodules%2FPdfFileReader.html%3Fhighlight%3DgetDocumentInfo%23PyPDF2.pdf.PdfFileReader.getDocumentInfo?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">
  Documentation page not found
 - Read the Docs</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://pypdf2.readthedocs.io/en/latest/modules/PdfFileReader.html?highlight=getDocumentInfo#PyPDF2.pdf.PdfFileReader.getDocumentInfo" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">pypdf2.readthedocs.io</div></div></div></div></a>



<p>取得されるDocumentInfoについては、こちらのドキュメントにまとめられています。</p>




<a rel="noopener" href="https://pypdf2.readthedocs.io/en/latest/modules/DocumentInformation.html?highlight=DocumentInformation%20" title="
  Documentation page not found
 - Read the Docs" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fpypdf2.readthedocs.io%2Fen%2Flatest%2Fmodules%2FDocumentInformation.html%3Fhighlight%3DDocumentInformation%2520?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">
  Documentation page not found
 - Read the Docs</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://pypdf2.readthedocs.io/en/latest/modules/DocumentInformation.html?highlight=DocumentInformation%20" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">pypdf2.readthedocs.io</div></div></div></div></a>



<h2 class="wp-block-heading">PDFにメタデータを設定する</h2>



<p><strong><span class="marker-under">PDFにメタデータを設定するには、<span class="red">addMetadata</span>メソットを使います。</span></strong></p>



<pre class="wp-block-code"><code>from PyPDF2 import PdfFileWriter, PdfFileReader

output = PdfFileWriter() 
input = PdfFileReader(open('test.pdf', 'rb')) 

# オリジナルのPDFをPdfFileWriterにコピーする
output.cloneDocumentFromReader(input)

# メタデータを出力に追加する
output.addMetadata({"title":"サンプル"})

# PDFを出力する
with open('out.pdf','wb') as o:
    output.write(o)
</code></pre>



<p>PdfFileWriterの<strong>addMetadata</strong>メソッドにディクショナリでメタデータを指定すると、任意のメタデータをPDFに付与することができます。</p>




<a rel="noopener" href="https://pypdf2.readthedocs.io/en/latest/modules/PdfFileMerger.html?highlight=addMetadata#PyPDF2.merger.PdfFileMerger.addMetadata" title="
  Documentation page not found
 - Read the Docs" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fpypdf2.readthedocs.io%2Fen%2Flatest%2Fmodules%2FPdfFileMerger.html%3Fhighlight%3DaddMetadata%23PyPDF2.merger.PdfFileMerger.addMetadata?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">
  Documentation page not found
 - Read the Docs</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://pypdf2.readthedocs.io/en/latest/modules/PdfFileMerger.html?highlight=addMetadata#PyPDF2.merger.PdfFileMerger.addMetadata" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">pypdf2.readthedocs.io</div></div></div></div></a>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://takabus.com/tips/1322/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PythonでPDFにしおりを作成するには？</title>
		<link>https://takabus.com/tips/1317/</link>
					<comments>https://takabus.com/tips/1317/#respond</comments>
		
		<dc:creator><![CDATA[ばすにっきTips]]></dc:creator>
		<pubDate>Sun, 01 May 2022 13:15:55 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[PyPDF]]></category>
		<guid isPermaLink="false">https://takabus.com/tips/?p=1317</guid>

					<description><![CDATA[PythonでPDFにしおりを追加する方法を紹介します。]]></description>
										<content:encoded><![CDATA[
<p>Pythonで既存のPDFにしおりを作成する方法を紹介します。</p>



<h2 class="wp-block-heading">PyPDF2のインストール</h2>



<p>当記事では、<span class="red">PyPDF2</span>というライブラリを使った方法を紹介していきます。</p>




<a rel="noopener" href="https://pypi.org/project/PyPDF2/" title="PyPDF2" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://pypi.org/static/images/twitter.abaf4b19.webp" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">PyPDF2</div><div class="blogcard-snippet external-blogcard-snippet">A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://pypi.org/project/PyPDF2/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">pypi.org</div></div></div></div></a>



<p><span class="red">PyPDF2</span>は、PythonからPDFを編集するためのメソッドを提供してくれるライブラリです。<span class="marker-under"><strong><span class="red">PyPDF2</span>を使うと、PDFの結合や分割はもちろん、テキストを抽出したり、ファイルを暗号化したりなど、さまざまな編集を行うことができます。</strong></span></p>



<p>お使いの環境に「PyPDF2」がインストールされていない方は、pipでインストールしておきましょう。</p>



<pre class="wp-block-code"><code>pip install PyPDF2</code></pre>



<h2 class="wp-block-heading">サンプルコード</h2>



<p>さっそくサンプルコードを紹介します。</p>



<p>既存のPDFファイル（<strong>test.pdf</strong>）に以下のしおりを追加するサンプルです。</p>



<ul class="has-watery-blue-background-color has-background"><li>Page1:親<ul><li>Page1：子（ページ1）</li><li>Page2：子（ページ2）</li></ul></li></ul>



<pre class="wp-block-code"><code>from PyPDF2 import PdfFileWriter, PdfFileReader

output = PdfFileWriter() 
input = PdfFileReader(open('test.pdf', 'rb'))

# オリジナルのPDFをPdfFileWriterにコピーする
output.cloneDocumentFromReader(input)

# しおりを追加する
parent=output.addBookmark('親', 0, parent=None) 
output.addBookmark('子（ページ1）', 0, parent=parent)
output.addBookmark('子（ページ2）', 1, parent=parent)


# PDFを出力する
with open('out.pdf','wb') as o:
    output.write(o)
</code></pre>



<p>実行すると、test.pdfにしおりが追加されたPDFファイル（out.pdf）が作成されます。</p>



<h2 class="wp-block-heading">解説</h2>



<p>addBookmarkメソットを実行することで、しおりを作成することができます。</p>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-check block-box has-border-color has-yellow-border-color">
<p><strong>addBookmark</strong>(<em>title</em>,&nbsp;<em>pagenum</em>,&nbsp;<em>parent=None</em>,&nbsp;<em>color=None</em>,&nbsp;<em>bold=False</em>,&nbsp;<em>italic=False</em>,&nbsp;<em>fit=&#8217;/Fit&#8217;</em>,&nbsp;<em>*args</em>)</p>



<p>Add a bookmark to this PDF file.Parameters</p>



<ul><li><strong>title</strong>&nbsp;(<em>str</em>) – Title to use for this bookmark.</li><li><strong>pagenum</strong>&nbsp;(<em>int</em>) – Page number this bookmark will point to.</li><li><strong>parent</strong>&nbsp;– A reference to a parent bookmark to create nested bookmarks.</li><li><strong>color</strong>&nbsp;(<em>tuple</em>) – Color of the bookmark as a red, green, blue tuple from 0.0 to 1.0</li><li><strong>bold</strong>&nbsp;(<em>bool</em>) – Bookmark is bold</li><li><strong>italic</strong>&nbsp;(<em>bool</em>) – Bookmark is italic</li><li><strong>fit</strong>&nbsp;(<em>str</em>) – The fit of the destination page. See&nbsp;<a href="https://pypdf2.readthedocs.io/en/latest/modules/PdfFileWriter.html?highlight=addBookmark#PyPDF2.pdf.PdfFileWriter.addLink"><code>addLink()</code></a>&nbsp;for details.</li></ul>




<a rel="noopener" href="https://pypdf2.readthedocs.io/en/latest/modules/PdfFileWriter.html?highlight=addBookmark#PyPDF2.pdf.PdfFileWriter.addBookmark" title="
  Documentation page not found
 - Read the Docs" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fpypdf2.readthedocs.io%2Fen%2Flatest%2Fmodules%2FPdfFileWriter.html%3Fhighlight%3DaddBookmark%23PyPDF2.pdf.PdfFileWriter.addBookmark?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">
  Documentation page not found
 - Read the Docs</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://pypdf2.readthedocs.io/en/latest/modules/PdfFileWriter.html?highlight=addBookmark#PyPDF2.pdf.PdfFileWriter.addBookmark" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">pypdf2.readthedocs.io</div></div></div></div></a>
</div>



<p>第1引数に<strong>しおりのタイトル</strong>を指定します。ここで指定したタイトルがしおりに表示されます。</p>



<p>第2引数には、<strong>ジャンプ先のページ</strong>を指定します。インデックスで指定しますので、1ページ目は0となります。</p>



<p>このほか、第3引数にParentを指定することにより、階層構造を持ったしおりを作成することができます。しおりの文字色や書体なども指定できます。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://takabus.com/tips/1317/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
