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
110
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
asumikamというカンファレンスオーガナイザの凄さを語る / The Brilliance of Asumikam
tomzoh
1
370
なぜキャッシュメモリは速いのか 余談集 / Why is Cache Memory So Fast? Extended.
tomzoh
0
170
なぜキャッシュメモリは速いのか / Why is Cache Memory So Fast?
tomzoh
3
1.3k
PHPからはじめるコンピュータアーキテクチャ 15分ダイジェスト版 / PHP Meets Silicon: A Fun Dive into Computer Structures 15mins ver
tomzoh
2
260
PHPでXOAUTH2を使ってGmailからメールを取り込む / Getting Mail from Gmail with XOAUTH2 in PHP
tomzoh
0
500
PHPからはじめるコンピュータア ーキテクチャ / PHP Meets Silicon: A Fun Dive into Computer Structures PHP Conference 2023 ver
tomzoh
0
390
PHPからはじめるコンピュータア ーキテクチャ / PHP Meets Silicon: A Fun Dive into Computer Structures
tomzoh
4
620
NANDがあればNANDeもできる / With NAND, you can do anything
tomzoh
0
550
コンピュータはなぜ0と1なのか / How and Why Computers Operate Using Binary Code
tomzoh
0
470
Other Decks in Technology
See All in Technology
現場で役立つAPIデザイン
nagix
33
12k
SA Night #2 FinatextのSA思想/SA Night #2 Finatext session
satoshiimai
1
140
アジャイル開発とスクラム
araihara
0
170
人はなぜISUCONに夢中になるのか
kakehashi
PRO
6
1.7k
スタートアップ1人目QAエンジニアが QAチームを立ち上げ、“個”からチーム、 そして“組織”に成長するまで / How to set up QA team at reiwatravel
mii3king
2
1.5k
株式会社EventHub・エンジニア採用資料
eventhub
0
4.3k
Developer Summit 2025 [14-D-1] Yuki Hattori
yuhattor
19
6.2k
Tech Blogを書きやすい環境づくり
lycorptech_jp
PRO
1
240
エンジニアが加速させるプロダクトディスカバリー 〜最速で価値ある機能を見つける方法〜 / product discovery accelerated by engineers
rince
4
370
Larkご案内資料
customercloud
PRO
0
650
オブザーバビリティの観点でみるAWS / AWS from observability perspective
ymotongpoo
8
1.5k
2025-02-21 ゆるSRE勉強会 Enhancing SRE Using AI
yoshiiryo1
1
370
Featured
See All Featured
Become a Pro
speakerdeck
PRO
26
5.1k
Designing for humans not robots
tammielis
250
25k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Into the Great Unknown - MozCon
thekraken
35
1.6k
Navigating Team Friction
lara
183
15k
Raft: Consensus for Rubyists
vanstee
137
6.8k
For a Future-Friendly Web
brad_frost
176
9.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Code Reviewing Like a Champion
maltzj
521
39k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.4k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.2k
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 余談