2025年7月30日
Pythonで構築する社内アプリ
トリム付きPDFから一発で仕上がりサイズPDFを生成するアプリを作成
トリム付きPDFから一発で仕上がりサイズPDFを生成するアプリを作成
「トンボ付きじゃなく仕上がりでくれない?」
こんな時、校正用PDFの仕様変更を手元で簡単生成!
印刷会社の営業マンの皆様、こんな経験ありませんか?

クライアントに「トンボ付きじゃなく仕上がりでくれない?すぐに。」と依頼された。
制作会社に連絡して用意してもらうのも手間。
手元にAcrobatがインストールされたPCもない。
どうしよう…
PDFは今や印刷業界のみならず標準的なファイル形式。Acrobatをサブスク契約して通常利用される組織も多いかとおもいます。しかし、そうでないも組織もいるのでは?「印刷会社ならAcrobatは標準!」と願いたいものですが…
そんな時、そんな方向けにPythonでWin用のアプリを開発しました。
Contents
そもそも「Python」ってなに?
Python は 世界中で大人気のプログラミング言語のこと。
名前の由来は、なんとイギリスの伝説的コメディ集団「モンティ・パイソン」からきているんです。ちょっとお茶目なノリから生まれたのに、いまや世界のシステムやサービスを支える超真面目な存在なんです。
どうしてそんなに人気なの?
Python が愛されている理由は、ズバリこれ
- とにかくシンプルで読みやすい
コードが英語に近く、「読めばなんとなく分かる」感覚。非エンジニアでも触りやすいのが魅力。 - できることが幅広い
AI、Webアプリ、データ分析、ゲーム、業務自動化、PDF処理…もはや何でも屋。 - 便利な道具(ライブラリ)が山ほど揃っている
料理でいうところの「めちゃくちゃ優秀なキッチン道具セット」が全部無料で使えます。 - 世界中の人が使っていて、情報が豊富
ググればだいたい答えが出てくる安心感。IT界のGoogle Mapsみたいな存在です。
誰が使っているの?
Python を使っているのは、実は私たちがよく使うサービスの裏側。
- Google や YouTube
- Instagram や Dropbox
- ChatGPT などなど…
世界のIT企業がこぞって採用しているほど、信頼度バツグンなんです。
今回の「PDFを一括トリミングするツール」も、Python のシンプルさと拡張性を活かして開発されました。
たとえば、普通ならAdobe Acrobatでしかできないような「TrimBoxを使ったトリミング処理」も、Pythonの「PyMuPDF」という便利な道具を使えば、誰でも簡単に自動処理できるアプリとして配布可能に!
と言うことで、豊橋合同印刷株式会社制作部チームもスキルアップもかねて勉強しながらアプリ開発を実践してみました。
Acrobatいらず!PDFトリミングを一発で 〜アプリの概要〜
社内でこんな声、聞いたことありませんか?
- 「このPDF、A4に合わせてトリミングしたいんだけど、Acrobatないと無理?」
- 「毎回制作にお願いするのも気が引けるんだよね…」
そんな悩みを解決するために開発されたのが、今回のアプリ。
ずばり「PDF Crop for TrimBox(TrimBox一括トリミングツール)」です。
どんなことができるの?
このアプリは、複数のPDFファイルを一括で正確にトリミングしてくれます。
しかも、印刷現場で実際に使われている「TrimBox(トリムボックス)」という情報をもとにして、内容の中心をズレなく切り出します。
つまり…
- トンボや余白を含んだPDFから、企画寸(仕上がりサイズ)だけを抽出
- まとめて複数のPDFを処理可能
- 出力先フォルダも自分で選べる
- 操作はワンクリックでOK!
という、とっても便利な自動トリマーです。
「TrimBox」ってなに?
簡単にいうと、「このPDFの、印刷物として仕上がる範囲はここだよ!」と、あらかじめPDFの中に書き込まれている『目に見えない設計図』です。IllustratorなどのソフトでPDFを書き出すときに含まれていて、Acrobatなどのプロ向けツールではよく使われています。
本ツールでは、このTrimBox情報を自動で読み取り、正確にそこだけを切り出して新しいPDFとして保存してくれるんです。
誰でもカンタンに使えるように
プログラミングの知識は一切不要。
アプリを起動するとGUI(ボタンや説明がついた画面)が開きます。
- トリミングしたいPDFを選択
- 出力先フォルダを選択
- ボタンを押すだけ!
たったこれだけで、面倒な手作業はゼロ。ミスもゼロ。時間短縮もバッチリです。
Python製だけど、Python不要!?
本アプリはPythonという言語で開発されていますが、営業部門などのPCにPythonがインストールされていなくてもOK。
あらかじめ「.exe(実行ファイル)」にして配布しているので、ダブルクリックでそのまま動きます。
つまり、Acrobatも、Pythonも、何もいらない。
必要なのは、このアプリとPDFだけ。
なにがうれしいの?
- 毎回制作に頼まなくてもよくなる
- 営業が現場でサッと対応できる
- トリミングミスやズレがなくなる
- 時間のムダがぐっと減る!
「ツールがちょっと便利になるだけで、社内全体の流れが変わる」そんな体験を、この小さなアプリで実感してもらえたらうれしいです。
*使用にあたり下記記載の注意事項をご確認ください。
今回のアプリのPythonコードをちょっと紹介
Pythonを動かそうとすると、当然Pythonをインストールして環境を整えないといけません。Macだとターミナルからインストールすると手っ取り早そうです。WindowsであればPythonの公式サイトにWindows環境版のインストーラーが用意されておりダウンロードしてインストールすることも可能です。
今回のアプリがサクッとPDFをクロップする仕組
このアプリがやっていることは、実はとてもシンプルな3ステップ。
ステップ1:PDFを読み込む
まず、ユーザーが選んだPDFファイルをPythonの「PyMuPDF」というライブラリで読み込みます。
PyMuPDFはPDFの中身を直接触れる道具のようなもの。「ページ数」や「サイズ情報」などが取得できます。
doc = fitz.open(input_path)
ステップ2:TrimBoxでクロップする
PDFのページごとに、「TrimBox」という目に見えないガイドラインを探し出します。
trimbox = page.trimbox
page.set_cropbox(trimbox)
この2行で、
- trimbox = 仕上がりサイズの枠
- set_cropbox() = そこだけを「見える範囲」に設定
つまり、「トリムマークの内側だけを表示するPDF」へと自動で変身させてくれるわけです。
ステップ3:保存する
最後に、クロップした状態で新しいPDFとして保存します。
doc.save(output_path)
保存先もユーザーが自由に選べるので、元のファイルを上書きしてしまう心配もなし!
Pythonで「見た目」も実装しアプリ感を演出
- GUI(ボタン画面)
Pythonでは「tkinter(ティーキンター)」という標準のツールを使ってGUIを生成する事も可能です。本アプリもこのツールでボタンや画像、説明文を配置しています。(ただし、illustratorやPhotoshopのようにGUIがあるわけではなにので、コードで実装させます) - ロゴの表示
ブランドロゴや会社ロゴを画像で配置したい場合は、「PIL」というライブラリでPNG画像を読み込んで、アプリの上部に配置させます。営業部門でもわかりやすく、ブランド感も演出!必須ですね。余談ですが、出自からすると「PIL」というネーミングもウラがありそう。 - 複数PDFの一括処理
GUIまで用意した以上、インターフェイス上で複数のPDFを選択できるようにしたいですよね。
選んだPDFファイルを 「for構文」 でぐるっと回して、1つずつ連続して処理しています。
コードの全体像はとしては、「PDFを読み込む → TrimBoxで切り抜く → 保存する」と、たったこれだけ。シンプルな構造だからこそ、安定して動作し、改修や機能追加もしやすいんです。
コードの全体像はこんな感じ。この .py とロゴとなる画像(今回はPNGで作成しました)を同じ階層に置いておきます。
import tkinter as tk
from tkinter import filedialog, messagebox
import fitz # PyMuPDF
import os
import sys
from PIL import Image, ImageTk
# 背景色の指定
bg_color = "#f0f0f0"
def trimbox_crop(input_path, output_path):
doc = fitz.open(input_path)
for page in doc:
trimbox = page.trimbox
page.set_cropbox(trimbox)
doc.save(output_path)
def select_files_and_trim():
files = filedialog.askopenfilenames(filetypes=[("PDF files", "*.pdf")])
if not files:
return
output_dir = filedialog.askdirectory(title="出力フォルダを選択してください")
if not output_dir:
return
for file_path in files:
filename = os.path.basename(file_path)
output_path = os.path.join(output_dir, filename)
trimbox_crop(file_path, output_path)
messagebox.showinfo("完了", "トリミングが完了しました。")
# GUIウィンドウの設定
root = tk.Tk()
root.title("TrimBox一括トリミングツール(出力先指定)")
root.geometry("500x360")
root.configure(bg=bg_color)
# ロゴ画像の読み込み(PyInstaller対応)
if getattr(sys, 'frozen', False):
# EXEから実行されている場合
base_path = sys._MEIPASS
else:
# 通常のスクリプトとして実行
base_path = os.path.abspath(".")
logo_path = os.path.join(base_path, "tgd_logo.png")
img = Image.open(logo_path)
logo_img = ImageTk.PhotoImage(img)
logo_label = tk.Label(root, image=logo_img, bg=bg_color)
logo_label.image = logo_img
logo_label.pack(pady=(50, 50))
# 説明文
desc = tk.Label(
root,
text="複数PDFをTrimBoxで一括トリミングし、出力先を指定します。",
bg=bg_color,
fg="black",
font=("Arial", 10)
)
desc.pack(pady=(0, 10))
# 実行ボタン
btn = tk.Button(
root,
text="PDFを選んでトリミング(出力フォルダ指定)",
command=select_files_and_trim,
padx=10,
pady=5,
bg="white"
)
btn.pack(pady=(20, 0))
# フッター
footer = tk.Label(
root,
text="Copyright 2025 | 豊橋合同印刷株式会社 All Rights Reserved.",
font=("Arial", 8),
bg=bg_color,
fg="gray"
)
footer.pack(side="bottom", pady=(0, 10))
root.mainloop()
Pythonがインストールされた環境なら、この書類だけでアプリは起動でき作動させることも可能です。(Code:Version01)
Pythonがインストールされていない環境で動かすには?
営業部門もワンクリックで使える仕組み
せっかく便利なツールを作っても、Pythonが入っていないPCでは動きません。
でもご安心を。
このアプリは、事前に「.exe(実行ファイル)」という形に変換してあるので、Pythonが入っていないPCでも、そのまま動かせるようにしています。
そもそも「.exe」って?
Windowsユーザーならおなじみの、アプリを起動するときにダブルクリックする「実行ファイル」です。通常、Pythonで書かれたプログラムは .py ファイルという形ですが、それを .exe に変換すると、Pythonが入っていないPCでも作動させることが可能になります。
「.exe」ファイルはどうやって作ったの?
このアプリは、もともと「Python(パイソン)」というプログラミング言語で作られたものですが、それだけではPythonが入っていないパソコンでは動きません。
そこで、「誰でも簡単に使えるように」するために、専用のツール(PyInstaller)を使って、Windowsの実行形式(.exe)に変換しました。
.exe化のために使用するツールは「コマンドプロンプト」(真っ黒な画面上にコードを打って操作するヤツ)ですが…わかりにくいですよね、これ。【Winボタン+R】で起動出来るのですが、こうなってくると「簡単に開発なんてできないじゃん!」となってしまいます。
とりあえず、【Winボタン+R】でコマンドプロンプトを起動して以下を入力しましょう。安心してください。.exe化したあとは、コマンドプロンプトを使う必要はありません!
注意:デスクトップ上にアプリ開発というフォルダを作り、さらにCrop for Trimフォルダを作り.pyを格納している場合の例
cd "Desktop\アプリ開発\Crop for Trim"
cdではじまるこの命令は、「Desktopのアプリ開発フォルダの中にあるCrop for Trimフォルダまで移動してね」という指示。
移動が完了したら、次の命令をコマンドプロンプトに入力します。
pyinstaller --onefile --noconsole --add-data "tgd_logo.png;." trimbox_gui_multi.py
これは、「『pyinstaller』を使って擬似的にPythonを動かす「.exe」になるようパッケージングしてね」という命令。今回は、「tgd_logo.png」というロゴ画像のデータを.pyと同一のフォルダに格納した状態で進めているため、このような命令になっています。
命令を簡単に解説すると…
- –onefile:1つの .exe ファイルにまとめる
- –noconsole:黒いコンソール画面を非表示(GUIアプリ向け)
Pythonもコマンドプロンプト同様、立ち上げると黒いコマンドを入力するコンソール画面がデフォルトで立ち上がります。本アプリはGUIを用意しているのでコマンド入力画面は非表示させます。 - –add-data:画像などの同梱ファイルを追加(; の前がファイル、後が展開先)
※ ;. は「同じフォルダへ配置」指定(Windows用)
この命令を実行すること2〜3分。同フォルダ内に「dist」というフォルダが生成され、アプリケーション(.exe)が生成されます。
ちなみに、今回の一連の作業で必要なツールはPythonの他に3つ。
- 「pyinstaller」:記事環境でPython環境を起動させる
- 「PyMuPDF」:PDFを操作する
- 「pillow」:画像を読み込む
Pythonをインストールするとパッケージとしてインストールされるかと思いますが、インストールされていない場合は、コマンドプロンプトで以下の命令をかけるとインストールされます。
pip install pyinstaller
pip install PyMuPDF
pip install pillow
既にインストールされていれば、インストールされている場所、バージョンをしめす文字が並びます。初めて作業する場合は、確認も含めて上記のインストール命令をはしらせてもよいです。以下は既にインストールされている場合の例です。
Requirement already satisfied: pyinstaller in c:\python312\lib\site-packages (5.13.0)
- Requirement already satisfied:(すでに満たされています)
- in C:\Python312\Lib\site-packages(このフォルダに入っています)
と表示され、再インストールはされません。
アプリのダウンロードはこちらから!
「アプリ開発は興味ないけど、このアプリは興味ある」という方。是非使ってみてください!
下記よりダウンロード可能です。現時点ではWindows環境専用になります。
Version01はこちら
Version02はこちら
「軽いPDFを同時に生成できない?」の要望に対応したバージョンです。本バージョンは、PDFの紙面全体を校正に耐えうる解像度(300dpi)でJPEGにラスタライズしたうえで、改めてPDFを生成します。そのため、複雑な効果の多様やベクター上でのパスが多く重い、文字データを有する重いPDFは軽量化されます。また、改ざん防止にも効果的です。
—Version01の機能はそのまま保持しています。
—Version01と比べ保存時の操作性を改善しました。
—アプリケーションのアイコンを独自に設置し、デスクトップに常設した際の視認性を確保しました。
注意
- このツールはAcrobatなどとは異なり簡易的なPDF処理を実行しています。PDFx等には準拠しないPDFを生成します。入稿用途には使用しないでください。
- 変換前のPDFと見比べ、文字化けや描写エラーがないことを良くご確認ください。プリンターなどの簡易リップ同様に複雑な透明機能を用いたPDFは描画くずれが起こる場合があります。
- 埋め込みサブセットされた書体は、そのまま仕様を維持します。埋め込みサブセットされていない書体は文字化けの原因となる場合があります。
- 本アプリケーションで起きたトラブルにつきましては弊社は一切の保証をしません。予めご了承ください。