■PDFファイルのページサイズを調べる(python)
#get-pdf-page-sizes.py
#get-pdf-page-sizes.py
import fitz # PyMuPDFをインポート
def get_pdf_page_sizes(pdf_path):
doc = fitz.open(pdf_path) # PDFを開く
for page_number, page in enumerate(doc, start=1):
rect = page.rect # ページの矩形サイズ
print(f"ページ {page_number}: 幅={rect.width} ポイント, 高さ={rect.height} ポイント")
# 使用例
get_pdf_page_sizes("sample.pdf")
>python pdf_page_sizes.py
ページ 1: 幅=842.0 ポイント, 高さ=595.0 ポイント
842/72*2.54 = 29.7cm
595/72*2.54 = 21.1cm
・Adobe Acrobat /メニュー/文書のプロパティ/ページサイズ
からも知ることができる。297×210mm
#split-pdf-vertically.py
595/72*2.54 = 21.1cm
・Adobe Acrobat /メニュー/文書のプロパティ/ページサイズ
からも知ることができる。297×210mm
・A4サイズの場合:
幅 ≈ 595.276 ポイント(約 8.27インチ)
高さ ≈ 841.890 ポイント(約 11.69インチ)
■以下のコードは、横長のページを左右に分割し、それぞれ別のPDFに保存します。#split-pdf-vertically.py
import fitz # PyMuPDFをインポート
def split_pdf_vertically(input_pdf, output_pdf_left, output_pdf_right):
# 元のPDFを開く
doc = fitz.open(input_pdf)
# 左右分割用の新しいPDFを作成
left_pages = fitz.open()
right_pages = fitz.open()
for page in doc:
rect = page.rect # ページ全体のサイズ
width = rect.width # 幅
height = rect.height # 高さ
# 左半分の矩形領域
left_rect = fitz.Rect(rect.x0, rect.y0, rect.x0 + width / 2, rect.y1)
# 右半分の矩形領域
right_rect = fitz.Rect(rect.x0 + width / 2, rect.y0, rect.x1, rect.y1)
# 左半分を新しいページに追加
left_page = left_pages.new_page(width=left_rect.width, height=left_rect.height)
left_page.show_pdf_page(
fitz.Rect(0, 0, left_rect.width, left_rect.height),
doc,
page.number - 1,
clip=left_rect
)
# 右半分を新しいページに追加
right_page = right_pages.new_page(width=right_rect.width, height=right_rect.height)
right_page.show_pdf_page(
fitz.Rect(0, 0, right_rect.width, right_rect.height),
doc,
page.number - 1,
clip=right_rect
)
# 分割したPDFを保存
left_pages.save(output_pdf_left)
right_pages.save(output_pdf_right)
print(f"分割完了!\n左半分PDF: {output_pdf_left}\n右半分PDF: {output_pdf_right}")
# 使用例
split_pdf_vertically("sample.pdf", "left_half.pdf", "right_half.pdf")
2 正しい領域の切り取り:
3 実行後の期待結果
■ポイント
1 ページの矩形領域に基づいた分割:
幅が842ポイント、ページ全体を左右2分割(421ポイントずつ)しています。
1 ページの矩形領域に基づいた分割:
幅が842ポイント、ページ全体を左右2分割(421ポイントずつ)しています。
左半分: fitz.Rect(0, 0, 421, 595)
右半分: fitz.Rect(421, 0, 842, 595)
2 正しい領域の切り取り:
clipパラメータを使用し、ページから指定した領域だけをクロップします。
3 実行後の期待結果
left_half.pdf: 元PDFの左半分(0~421ポイント)。
right_half.pdf: 元PDFの右半分(421~842ポイント)。
■横長のpdfファイルを分割することでA4用紙に印刷できました。
■横長のpdfファイルを分割することでA4用紙に印刷できました。