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
670
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
PHPからはじめるコンピュータアーキテクチャ / From Scripts to Silicon: A Journey Through the Layers of Computing Hiroshima 2025 Edition
tomzoh
0
180
PHPからはじめるコンピュータアーキテクチャ / From Scripts to Silicon: A Journey Through the Layers of Computing
tomzoh
5
570
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 完全版 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming - Expanded
tomzoh
6
4k
カンファレンスのつくりかた / The Conference Code: What Makes It All Work
tomzoh
10
1.9k
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming
tomzoh
1
730
asumikamというカンファレンスオーガナイザの凄さを語る / The Brilliance of Asumikam
tomzoh
1
550
なぜキャッシュメモリは速いのか 余談集 / Why is Cache Memory So Fast? Extended.
tomzoh
0
310
なぜキャッシュメモリは速いのか / Why is Cache Memory So Fast?
tomzoh
3
1.7k
PHPからはじめるコンピュータアーキテクチャ 15分ダイジェスト版 / PHP Meets Silicon: A Fun Dive into Computer Structures 15mins ver
tomzoh
2
370
Other Decks in Technology
See All in Technology
ViteとTypeScriptのProject Referencesで 大規模モノレポのUIカタログのリリースサイクルを高速化する
shuta13
3
210
AIの個性を理解し、指揮する
shoota
1
220
CNCFの視点で捉えるPlatform Engineering - 最新動向と展望 / Platform Engineering from the CNCF Perspective
hhiroshell
0
140
OPENLOGI Company Profile for engineer
hr01
1
45k
Amazon Athena で JSON・Parquet・Iceberg のデータを検索し、性能を比較してみた
shigeruoda
1
150
あなたの知らない Linuxカーネル脆弱性の世界
recruitengineers
PRO
3
160
もう外には出ない。より快適なフルリモート環境を目指して
mottyzzz
13
11k
スタートアップの現場で実践しているテストマネジメント #jasst_kyushu
makky_tyuyan
0
140
re:Invent 2025の見どころと便利アイテムをご紹介 / Highlights and Useful Items for re:Invent 2025
yuj1osm
0
220
プロファイルとAIエージェントによる効率的なデバッグ / Effective debugging with profiler and AI assistant
ymotongpoo
1
340
組織全員で向き合うAI Readyなデータ利活用
gappy50
3
1.2k
コンパウンド組織のCRE #cre_meetup
layerx
PRO
1
280
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
40
2.1k
KATA
mclloyd
PRO
32
15k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Thoughts on Productivity
jonyablonski
70
4.9k
Designing Experiences People Love
moore
142
24k
Mobile First: as difficult as doing things right
swwweet
225
10k
The Illustrated Children's Guide to Kubernetes
chrisshort
49
51k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Music & Morning Musume
bryan
46
6.9k
How to Ace a Technical Interview
jacobian
280
24k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Side Projects
sachag
455
43k
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 余談