Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPで印刷所に入稿できる名札データを作る / Generating Print-Ready ...
Search
HASEGAWA Tomoki
February 22, 2025
Technology
0
550
PHPで印刷所に入稿できる名札データを作る / Generating Print-Ready Name Tag Data with PHP
PHPカンファレンス名古屋 2025の発表資料です
HASEGAWA Tomoki
February 22, 2025
Tweet
Share
More Decks by HASEGAWA Tomoki
See All by HASEGAWA Tomoki
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 完全版 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming - Expanded
tomzoh
4
3.4k
カンファレンスのつくりかた / The Conference Code: What Makes It All Work
tomzoh
9
1.5k
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming
tomzoh
1
580
asumikamというカンファレンスオーガナイザの凄さを語る / The Brilliance of Asumikam
tomzoh
1
480
なぜキャッシュメモリは速いのか 余談集 / Why is Cache Memory So Fast? Extended.
tomzoh
0
270
なぜキャッシュメモリは速いのか / Why is Cache Memory So Fast?
tomzoh
3
1.5k
PHPからはじめるコンピュータアーキテクチャ 15分ダイジェスト版 / PHP Meets Silicon: A Fun Dive into Computer Structures 15mins ver
tomzoh
2
310
PHPでXOAUTH2を使ってGmailからメールを取り込む / Getting Mail from Gmail with XOAUTH2 in PHP
tomzoh
0
620
PHPからはじめるコンピュータア ーキテクチャ / PHP Meets Silicon: A Fun Dive into Computer Structures PHP Conference 2023 ver
tomzoh
0
430
Other Decks in Technology
See All in Technology
事業成長の裏側:エンジニア組織と開発生産性の進化 / 20250703 Rinto Ikenoue
shift_evolve
PRO
2
19k
品質と速度の両立:生成AI時代の品質保証アプローチ
odasho
1
210
ゼロからはじめる採用広報
yutadayo
2
460
Model Mondays S2E03: SLMs & Reasoning
nitya
0
350
KubeCon + CloudNativeCon Japan 2025 Recap Opening & Choose Your Own Adventureシリーズまとめ
mmmatsuda
0
260
モバイル界のMCPを考える
naoto33
0
420
Flutter向けPDFビューア、pdfrxのpdfium WASM対応について
espresso3389
0
130
2025-07-06 QGIS初級ハンズオン「はじめてのQGIS」
kou_kita
0
160
fukabori.fm 出張版: 売上高617億円と高稼働率を陰で支えた社内ツール開発のあれこれ話 / 20250704 Yoshimasa Iwase & Tomoo Morikawa
shift_evolve
PRO
2
6.7k
無意味な開発生産性の議論から抜け出すための予兆検知とお金とAI
i35_267
3
11k
ビズリーチが挑む メトリクスを活用した技術的負債の解消 / dev-productivity-con2025
visional_engineering_and_design
3
6.6k
Claude Code に プロジェクト管理やらせたみた
unson
4
2.3k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Embracing the Ebb and Flow
colly
86
4.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Fireside Chat
paigeccino
37
3.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
BBQ
matthewcrist
89
9.7k
Become a Pro
speakerdeck
PRO
28
5.4k
Making Projects Easy
brettharned
116
6.3k
The Language of Interfaces
destraynor
158
25k
A designer walks into a library…
pauljervisheath
207
24k
Transcript
長谷川智希 𝕏 @tomzoh PHPで印刷所に入稿できる 名札データを作る 2025/01/22 PHPカンファレンス名古屋
2 ୩ஐر ͕ͤΘ ͱ͖ @tomzoh http://www.dgcircus.com デジタルサーカス株式会社 副団長CTO ॴଐ ٕज़ΧϯϑΝϨϯεओ࠻
دߘɾஶॻ 来たれ!PHPer!We are hiring! 𝕏
3 ୩ஐر ͕ͤΘ ͱ͖ @tomzoh ςοΫΧϯϑΝϨϯεӡӦࢀՃ ֤छϓϩάϥϜ։ൃ $16 ϨτϩήʔϜػ
ిࢠ࡞ Ϗʔϧ αοΧʔ؍ઓ ϨϯλϧΧʔτϨʔε ʜ ϥΠϑϫʔΫ 𝕏
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PHPで印刷所に入稿できる 名札データを作る 8
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 名札…? 9
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る SNSアイコンと名前が印刷された名札 • PHPerKaigi / iOSDC Japan •
名札にSNSアイコンと名前を印刷している • 高品質な名札にするために印刷所にお願いしている 10
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る バリアブル印刷とそのつらみ・解決方法 • 動的な印刷を印刷所にお願いする場合のキーワード: バリアブル印刷 • テンプレートのIllustratorファイルと動的部分の データ(アイコン画像、名前などのCSVファイル)を渡して印刷してもらう
• 確認用PDFをもらって確認し、OKであれば印刷 • つらみ • 確認作業がツライ & 時間がかかる → 入稿から印刷までにそこそこ日数が必要 • チケットをギリギリに買うと名札にアイコンが載せられない • もっとたくさんの参加者にアイコン入り名札を渡したい • PHPで名札のPDFを作って納品して印刷してもらえば解決 11
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る どんなPDFを作るか 12 カラーモードCMYKで テキストがアウトライン化されたPDF
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る カラーモードCMYK で テキストがアウトライン化されたPDF 13
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る カラーモード • 色をどうやって表現するか • RGB, CMYK, …
• 我々がコンピュータ系開発でよく使うのはRGB • 印刷では主にCMYK • ほかにもいろいろある • グレースケールとかHSB(HSV)とかYUV(YCbCr)とか 14 https://ja.wikipedia.org/wiki/HSL色空間とHSV色空間
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る RGB • 赤(Red)・緑(Green)・青(Blue)を足して色を作る • ディスプレイ向け = 自身が発光するデバイス向け
• 全部足すと白になる • #ffffff = 白 • 加法混色 15 https://www.nik-prt.co.jp/surusuru/experiment/experiment-of-specialty-inks/
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る CMYK • シアン(Cyan)・マゼンタ(Magenta)・イエロー(Yellow)・ 黒(Key Plate)を足して色を作る • 印刷物とか絵の具とか自己が発光しないデバイス(?)向け
• プリンタのインクとかトナーとかはCMYKですね • 全部足すと黒になる • 原理的にはCMYで表現できるけど、CMYだけだときれいな黒に ならないのでKをあわせて使う • 減法混色 16 https://www.amazon.co.jp/dp/B07M8J39R7 https://www.nik-prt.co.jp/surusuru/experiment/experiment-of-specialty-inks/
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 印刷所での色指定 • 印刷所に入稿するPDFはカラーモードCMYKが望 ましい • RGBで入稿して印刷所で変換してもらうことも 可能ではある
• デザイナーが意図した色になるかはわからない • 特色 • CMYKだけで世の中の色をすべて表現できる訳ではな く、それ以外の色を使ったりする • PANTONEとかDICとか • "今回は特色を使って蛍ピで可愛く"とか"Twitterブル ーは PANTONE 2382 C" みたいな 17 https://www.nik-prt.co.jp/surusuru/experiment/experiment-of-specialty-inks/ 余談
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る カラーモードCMYKで テキストがアウトライン化されたPDF 18
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFとフォント • PDFには文字を含められる • 文字 = テキストデータ
+ フォントデータ • PDFは仕様としてフォントを埋込できる • = PDFファイルにフォントデータを含められる • フォント埋込されていればPDFを開く環境にフォントが無くても文字を表示できる • が、それはあくまでも理想 • 現実にはフォントファイルはいろいろあり、印刷所のシステムもいろいろあり、 その結果文字化けしたりレイアウト崩れしたりする • テキストをアウトライン化してそのリスクを回避する • 文字をベクタデータ(図形)に変換する 19
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る カラーモードCMYKで テキストがアウトライン化されたPDF をPHPで作る 20
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PHPでPDF • TCPDF, FPDIなどいくつかライブラリがある • 仕事でPHPerやってると人生で一度は使うことになるんじゃないかな… •
TCPDF ゼロからPDFを作る • FPDI 既存のPDFをテンプレートとして使ってPDFを作る • class Fpdi extends \TCPDF • FPDI = Free PDF Document Importer • 今回はFPDIをベースに作る 21
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFテンプレート テキスト 画像 22 PDFに要素を置いていく
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFテンプレート • デザインされたPDFをテンプレートとして使う • カラーモードがCMYKのPDF • IllustratorでカラーモードCMYKで作って
PDFに書き出す • PDFは透明部分を持てるので透明部分を使った 高度なデザインも実現可 • 書き出したPDFファイルをIllustratorで開いて 透明部分が意図通りになっていればOK • 印刷所でのカットを考えてトンボが入っていると 良いですね 23 完成形 テンプレート
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る FPDIでの取り扱い • FPDIにはPDFテンプレートを読み込むメソッドが用意されているので簡単 24 • 透明部分があるPDFテンプレートの場合、画像を置いてから useImportedPage()
すれば透明部分から下の画像が見える
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFテンプレート テキスト 画像 25 PDFに要素を置いていく
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る テキストの色指定 • FPDIではCMYKで色指定できる (TCPDF由来) 26 • 引数を4つ与えるとCMYK指定
• 1つだとグレースケール, 3つだとRGB • 何という設計…
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る フォントを指定したテキスト • FPDI(TCPDF)ではフォントファイルを指定してテキストを書ける 27 • フォントデータは埋め込まれる •
今回のユースケースでは最終的にアウトライン化する
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る テキストのアウトライン化 • 印刷所に入稿するデータではテキストをアウトライン化するのが望ましい • 文字を「テキストデータ + フォントデータ」の形でなく図形として表現する
• PHPでやるのは難しそう • なので"力"で解決する 28 • gs は Ghostscript のコマンド • -dNoOutputFonts: テキストをアウトライン化してフォントデータをPDFに含めない
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFテンプレート テキスト 画像 29 PDFに要素を置いていく
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 画像のカラーモード変換 • Imagick拡張で画像をCMYK形式に変換できる 30 RGB CMYK •
はずなんだけど… • ICCプロファイルの適用とか やってみたけどダメ
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る ワークアラウンド • 哀しいワークアラウンドで回避 31 RGB CMYK •
convert コマンドって ImageMagickなんだけど… • Imagick拡張とconvertコマンドの ソースを見比べればPHPからでも ちゃんとCMYKに変換できそうな気はする
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 32 カラーモードCMYKで テキストがアウトライン化されたPDF をPHPで作る
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る まとめ 33
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る まとめ • いろいろクセはあるけど、結局はテンプレートPDF、テキスト、画像を丁寧に CMYKで置いていけば良い • やることがわかっていれば他の言語/環境でも応用できる •
今回は一部をPHPで、一部を外部コマンドで実現した • これに限らずPHPだけでやることにこだわらない方がゴールに近づけるかも • 特に外部コマンドを活用するとできることの幅が広がる • いつかみなさんのお役に立てれば嬉しいです 34 長谷川 智希 @tomzoh 𝕏
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 告知 35
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PHPerKaigi 2025 36 https://phperkaigi.jp/2025 νέοτൢചத
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る おわり 37 長谷川 智希 @tomzoh 𝕏
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る おまけ 38
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る Allowed memory size of … • FPDI(TCPDF)でページをどんどん足していくとメモリ不足に…。
• メモリ上でPDFを作ってるんだね… • まあふつうにやるとそうなりますよね • 1,500ページぐらい作ったらいったんファイルに書き出して最後に結合する • 結合は例によって… 39 余談
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 印刷所へのリクエスト • サイズ〇〇の〇〇紙に印刷してください • 長谷川カンファレンスの場合は 200mm x
148mm OKマットポスト 125kg • 表面はこのPDFでぜんぶ違うデザイン、 裏面は固定でこのPDFです • 2つに折り畳んで使うので真ん中に筋押しを お願いします 40 余談