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 20, 2025
Technology
0
9
PHPで印刷所に入稿できる名札データを作る / Generating Print-Ready Name Tag Data with PHP
PHPカンファレンス名古屋 2025の発表資料です
HASEGAWA Tomoki
February 20, 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
160
なぜキャッシュメモリは速いのか / 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
プロセス改善による品質向上事例
tomasagi
2
2.5k
バックエンドエンジニアのためのフロントエンド入門 #devsumiC
panda_program
18
7.3k
Moved to https://speakerdeck.com/toshihue/presales-engineer-career-bridging-tech-biz-ja
toshihue
2
730
モノレポ開発のエラー、誰が見る?Datadog で実現する適切なトリアージとエスカレーション
biwashi
6
790
運用しているアプリケーションのDBのリプレイスをやってみた
miura55
1
680
30分でわかる『アジャイルデータモデリング』
hanon52_
9
2.6k
2/18/25: Java meets AI: Build LLM-Powered Apps with LangChain4j
edeandrea
PRO
0
100
N=1から解き明かすAWS ソリューションアーキテクトの魅力
kiiwami
0
120
Oracle Cloud Infrastructure:2025年2月度サービス・アップデート
oracle4engineer
PRO
1
190
急成長する企業で作った、エンジニアが輝ける制度/ 20250214 Rinto Ikenoue
shift_evolve
3
1.2k
表現を育てる
kiyou77
1
210
MC906491 を見据えた Microsoft Entra Connect アップグレード対応
tamaiyutaro
1
530
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
320
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Mobile First: as difficult as doing things right
swwweet
223
9.3k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.8k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Transcript
長谷川智希 𝕏 @tomzoh PHPで印刷所に入稿できる 名札データを作る 2025/01/22 PHPカンファレンス名古屋
2 ୩ஐر ͕ͤΘ ͱ͖ @tomzoh http://www.dgcircus.com デジタルサーカス株式会社 副団長CTO ॴଐ ٕज़ΧϯϑΝϨϯεओ࠻
دߘɾஶॻ 来たれ!PHPer!We are hiring! 𝕏
3 ୩ஐر ͕ͤΘ ͱ͖ @tomzoh ςοΫΧϯϑΝϨϯεӡӦࢀՃ ֤छϓϩάϥϜ։ൃ $16 ϨτϩήʔϜػ
ిࢠ࡞ Ϗʔϧ αοΧʔ؍ઓ ϨϯλϧΧʔτϨʔε ʜ ϥΠϑϫʔΫ 𝕏
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PHPで印刷所に入稿できる 名札データを作る 4
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 名札…? 5
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る SNSアイコンと名前が印刷された名札 • PHPerKaigi / iOSDC Japan •
名札にSNSアイコンと名前を印刷している • 人の顔と名前とSNSアイコンとSNS名を一致させるのは難しい • 話しかけられた時に誰だっけ…となるリスクを軽減 • アッあのアイコンは!という出会いもある • 高品質な名札にするために印刷所にお願いしている 6
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る バリアブル印刷とそのつらみ・解決方法 • 動的な印刷を印刷所にお願いする場合のキーワード: バリアブル印刷 • テンプレートのIllustratorファイルと動的部分の データ(アイコン画像、名前などのCSVファイル)を渡して印刷してもらう
• 確認用PDFをもらって確認し、OKであれば印刷 • つらみ • 確認作業がツライ & 時間がかかる → 入稿から印刷までにそこそこ日数が必要 • チケットをギリギリに買うと名札にアイコンが載せられない • もっとたくさんの参加者にアイコン入り名札を渡したい • PHPで名札のPDFを作って納品して印刷してもらえば解決 7
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る どんなPDFを作るか 8 カラーモードCMYKで テキストがアウトライン化されたPDF
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る カラーモードCMYK で テキストがアウトライン化されたPDF 9
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る カラーモード • 色をどうやって表現するか • RGB, CMYK, HSB,
… • 我々がコンピュータ系開発でよく使うのはRGB • 印刷では主にCMYK • ほかにもいろいろある 10 https://ja.wikipedia.org/wiki/HSL色空間とHSV色空間
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る RGB • 赤(Red)・緑(Green)・青(Blue)を足して色を作る • ディスプレイ向け = 自身が発光するデバイス向け
• 全部足すと白になる • #ffffff = 白 • 加法混色 11 https://www.nik-prt.co.jp/surusuru/experiment/experiment-of-specialty-inks/
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る CMYK • シアン(Cyan)・マゼンタ(Magenta)・イエロー(Yellow)・ 黒(Key Plate)を足して色を作る • 印刷物とか絵の具とか自己が発光しないデバイス(?)向け
• プリンタのインクとかトナーとかはCMYKですね • 全部足すと黒になる • 原理的にはCMYで表現できるけど、CMYだけだときれいな黒に ならないのでKをあわせて使う • 減法混色 12 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" みたいな 13 https://www.nik-prt.co.jp/surusuru/experiment/experiment-of-specialty-inks/ 余談
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る カラーモードCMYKで テキストがアウトライン化されたPDF 14
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFとフォント • PDFには文字を含められる • 文字 = テキストデータ
+ フォントデータ • PDFは仕様としてフォントを埋込できる • = PDFファイルにフォントデータを含められる • フォント埋込されていればPDFを開く環境にフォントが無くても文字を表示できる • が、それはあくまでも理想 • 現実にはフォントファイルはいろいろあり、印刷所のシステムもいろいろあり、 その結果文字化けしたりレイアウト崩れしたりする • テキストをアウトライン化してそのリスクを回避する • 文字をベクタデータ(図形)に変換する 15
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る カラーモードCMYKで テキストがアウトライン化されたPDF をPHPで作る 16
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PHPでPDF • TCPDF, FPDIなどいくつかライブラリがある • 仕事でPHPerやってると人生で一度は使うことになるんじゃないかな… •
TCPDF ゼロからPDFを作る • FPDI 既存のPDFをテンプレートとして使ってPDFを作る • class Fpdi extends \TCPDF • FPDI = Free PDF Document Importer • 今回はFPDIをベースに作る 17
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFテンプレート テキスト 画像 18 PDFに要素を置いていく
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFテンプレート • デザインされたPDFをテンプレートとして使う • カラーモードがCMYKのPDF • IllustratorでカラーモードCMYKで作って
PDFに書き出す • PDFは透明部分を持てるので透明部分を使った 高度なデザインも実現可 • 書き出したPDFファイルをIllustratorで開いて 透明部分が意図通りになっていればOK • 印刷所でのカットを考えてトンボが入っていると 良いですね 19 完成形 テンプレート
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る FPDIでの取り扱い • FPDIにはPDFテンプレートを読み込むメソッドが用意されているので簡単 20 • 透明部分があるPDFテンプレートの場合、画像を置いてから useImportedPage()
すれば透明部分から下の画像が見える
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFテンプレート テキスト 画像 21 PDFに要素を置いていく
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る テキストの色指定 • FPDIではCMYKで色指定できる (TCPDF由来) 22 • 引数を4つ与えるとCMYK指定
• 1つだとグレースケール, 3つだとRGB • 何という設計…
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る フォントを指定したテキスト • FPDI(TCPDF)ではフォントファイルを指定してテキストを書ける 23 • フォントデータは埋め込まれる •
今回のユースケースでは最終的にアウトライン化する
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る テキストのアウトライン化 • 印刷所に入稿するデータではテキストをアウトライン化するのが望ましい • 文字を「テキストデータ + フォントデータ」の形でなく図形として表現する
• PHPでやるのは難しそう • なので例によって… 24 • gs は Ghostscript のコマンド • -dNoOutputFonts: テキストをアウトライン化してフォントデータをPDFに含めない
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFテンプレート テキスト 画像 25 PDFに要素を置いていく
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 画像のカラーモード変換 • Imagick拡張で画像をCMYK形式に変換できる 26 RGB CMYK •
はずなんだけど… • ICCプロファイルの適用とか やってみたけどダメ
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る ワークアラウンド • 哀しいワークアラウンドで回避 27 RGB CMYK •
convert コマンドって ImageMagickなんだけど… • Imagick拡張とconvertコマンドの ソースを見比べればPHPからでも ちゃんとCMYKに変換できそうな気はする
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 28 カラーモードCMYKで テキストがアウトライン化されたPDF をPHPで作る
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る Allowed memory size of … • FPDI(TCPDF)でページをどんどん足していくとメモリ不足に…。
• メモリ上でPDFを作ってるんだね… • まあふつうにやるとそうなりますよね • 1,500ページぐらい作ったらいったんファイルに書き出して最後に結合する • 結合は例によって… 29 余談
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 印刷所へのリクエスト • サイズ〇〇の〇〇紙に印刷してください • 長谷川カンファレンスの場合は 200mm x
148mm OKマットポスト 125kg • 表面はこのPDFでぜんぶ違うデザイン、 裏面は固定でこのPDFです • 2つに折り畳んで使うので真ん中に筋押しを お願いします 30 余談
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る まとめ 31
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る まとめ • いろいろクセはあるけど、結局はテンプレートPDF、テキスト、画像を丁寧に CMYKで置いていけば良い • やることがわかっていれば他の言語/環境でも応用できる •
今回は一部をPHPで、一部を外部コマンドで実現した • これに限らずPHPだけでやることにこだわらない方がゴールに近づけるかも • 特に外部コマンドを活用するとできることの幅が広がる • いつかみなさんのお役に立てれば嬉しいです 32 長谷川 智希 @tomzoh 𝕏
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 告知 33
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PHPerKaigi 2025 34 https://phperkaigi.jp/2025 νέοτൢചத
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る おわり 35 長谷川 智希 @tomzoh 𝕏