Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
長谷川智希 𝕏 @tomzoh PHPで印刷所に入稿できる 名札データを作る 2025/01/22 PHPカンファレンス名古屋
Slide 2
Slide 2 text
2 ୩ஐر ͕ͤΘ ͱ͖ @tomzoh http://www.dgcircus.com デジタルサーカス株式会社 副団長CTO ॴଐ ٕज़ΧϯϑΝϨϯεओ࠻ دߘɾஶॻ 来たれ!PHPer!We are hiring! 𝕏
Slide 3
Slide 3 text
3 ୩ஐر ͕ͤΘ ͱ͖ @tomzoh ςοΫΧϯϑΝϨϯεӡӦࢀՃ ֤छϓϩάϥϜ։ൃ $16 ϨτϩήʔϜػ ిࢠ࡞ Ϗʔϧ αοΧʔ؍ઓ ϨϯλϧΧʔτϨʔε ʜ ϥΠϑϫʔΫ 𝕏
Slide 4
Slide 4 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PHPで印刷所に入稿できる 名札データを作る 8
Slide 5
Slide 5 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 名札…? 9
Slide 6
Slide 6 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る SNSアイコンと名前が印刷された名札 • PHPerKaigi / iOSDC Japan • 名札にSNSアイコンと名前を印刷している • 高品質な名札にするために印刷所にお願いしている 10
Slide 7
Slide 7 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る バリアブル印刷とそのつらみ・解決方法 • 動的な印刷を印刷所にお願いする場合のキーワード: バリアブル印刷 • テンプレートのIllustratorファイルと動的部分の データ(アイコン画像、名前などのCSVファイル)を渡して印刷してもらう • 確認用PDFをもらって確認し、OKであれば印刷 • つらみ • 確認作業がツライ & 時間がかかる → 入稿から印刷までにそこそこ日数が必要 • チケットをギリギリに買うと名札にアイコンが載せられない • もっとたくさんの参加者にアイコン入り名札を渡したい • PHPで名札のPDFを作って納品して印刷してもらえば解決 11
Slide 8
Slide 8 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る どんなPDFを作るか 12 カラーモードCMYKで テキストがアウトライン化されたPDF
Slide 9
Slide 9 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る カラーモードCMYK で テキストがアウトライン化されたPDF 13
Slide 10
Slide 10 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る カラーモード • 色をどうやって表現するか • RGB, CMYK, … • 我々がコンピュータ系開発でよく使うのはRGB • 印刷では主にCMYK • ほかにもいろいろある • グレースケールとかHSB(HSV)とかYUV(YCbCr)とか 14 https://ja.wikipedia.org/wiki/HSL色空間とHSV色空間
Slide 11
Slide 11 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る RGB • 赤(Red)・緑(Green)・青(Blue)を足して色を作る • ディスプレイ向け = 自身が発光するデバイス向け • 全部足すと白になる • #ffffff = 白 • 加法混色 15 https://www.nik-prt.co.jp/surusuru/experiment/experiment-of-specialty-inks/
Slide 12
Slide 12 text
長谷川智希 @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/
Slide 13
Slide 13 text
長谷川智希 @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/ 余談
Slide 14
Slide 14 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る カラーモードCMYKで テキストがアウトライン化されたPDF 18
Slide 15
Slide 15 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFとフォント • PDFには文字を含められる • 文字 = テキストデータ + フォントデータ • PDFは仕様としてフォントを埋込できる • = PDFファイルにフォントデータを含められる • フォント埋込されていればPDFを開く環境にフォントが無くても文字を表示できる • が、それはあくまでも理想 • 現実にはフォントファイルはいろいろあり、印刷所のシステムもいろいろあり、 その結果文字化けしたりレイアウト崩れしたりする • テキストをアウトライン化してそのリスクを回避する • 文字をベクタデータ(図形)に変換する 19
Slide 16
Slide 16 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る カラーモードCMYKで テキストがアウトライン化されたPDF をPHPで作る 20
Slide 17
Slide 17 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PHPでPDF • TCPDF, FPDIなどいくつかライブラリがある • 仕事でPHPerやってると人生で一度は使うことになるんじゃないかな… • TCPDF ゼロからPDFを作る • FPDI 既存のPDFをテンプレートとして使ってPDFを作る • class Fpdi extends \TCPDF • FPDI = Free PDF Document Importer • 今回はFPDIをベースに作る 21
Slide 18
Slide 18 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFテンプレート テキスト 画像 22 PDFに要素を置いていく
Slide 19
Slide 19 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFテンプレート • デザインされたPDFをテンプレートとして使う • カラーモードがCMYKのPDF • IllustratorでカラーモードCMYKで作って PDFに書き出す • PDFは透明部分を持てるので透明部分を使った 高度なデザインも実現可 • 書き出したPDFファイルをIllustratorで開いて 透明部分が意図通りになっていればOK • 印刷所でのカットを考えてトンボが入っていると 良いですね 23 完成形 テンプレート
Slide 20
Slide 20 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る FPDIでの取り扱い • FPDIにはPDFテンプレートを読み込むメソッドが用意されているので簡単 24 • 透明部分があるPDFテンプレートの場合、画像を置いてから useImportedPage() すれば透明部分から下の画像が見える
Slide 21
Slide 21 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFテンプレート テキスト 画像 25 PDFに要素を置いていく
Slide 22
Slide 22 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る テキストの色指定 • FPDIではCMYKで色指定できる (TCPDF由来) 26 • 引数を4つ与えるとCMYK指定 • 1つだとグレースケール, 3つだとRGB • 何という設計…
Slide 23
Slide 23 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る フォントを指定したテキスト • FPDI(TCPDF)ではフォントファイルを指定してテキストを書ける 27 • フォントデータは埋め込まれる • 今回のユースケースでは最終的にアウトライン化する
Slide 24
Slide 24 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る テキストのアウトライン化 • 印刷所に入稿するデータではテキストをアウトライン化するのが望ましい • 文字を「テキストデータ + フォントデータ」の形でなく図形として表現する • PHPでやるのは難しそう • なので"力"で解決する 28 • gs は Ghostscript のコマンド • -dNoOutputFonts: テキストをアウトライン化してフォントデータをPDFに含めない
Slide 25
Slide 25 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PDFテンプレート テキスト 画像 29 PDFに要素を置いていく
Slide 26
Slide 26 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 画像のカラーモード変換 • Imagick拡張で画像をCMYK形式に変換できる 30 RGB CMYK • はずなんだけど… • ICCプロファイルの適用とか やってみたけどダメ
Slide 27
Slide 27 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る ワークアラウンド • 哀しいワークアラウンドで回避 31 RGB CMYK • convert コマンドって ImageMagickなんだけど… • Imagick拡張とconvertコマンドの ソースを見比べればPHPからでも ちゃんとCMYKに変換できそうな気はする
Slide 28
Slide 28 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 32 カラーモードCMYKで テキストがアウトライン化されたPDF をPHPで作る
Slide 29
Slide 29 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る まとめ 33
Slide 30
Slide 30 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る まとめ • いろいろクセはあるけど、結局はテンプレートPDF、テキスト、画像を丁寧に CMYKで置いていけば良い • やることがわかっていれば他の言語/環境でも応用できる • 今回は一部をPHPで、一部を外部コマンドで実現した • これに限らずPHPだけでやることにこだわらない方がゴールに近づけるかも • 特に外部コマンドを活用するとできることの幅が広がる • いつかみなさんのお役に立てれば嬉しいです 34 長谷川 智希 @tomzoh 𝕏
Slide 31
Slide 31 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 告知 35
Slide 32
Slide 32 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る PHPerKaigi 2025 36 https://phperkaigi.jp/2025 νέοτൢചத
Slide 33
Slide 33 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る おわり 37 長谷川 智希 @tomzoh 𝕏
Slide 34
Slide 34 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る おまけ 38
Slide 35
Slide 35 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る Allowed memory size of … • FPDI(TCPDF)でページをどんどん足していくとメモリ不足に…。 • メモリ上でPDFを作ってるんだね… • まあふつうにやるとそうなりますよね • 1,500ページぐらい作ったらいったんファイルに書き出して最後に結合する • 結合は例によって… 39 余談
Slide 36
Slide 36 text
長谷川智希 @tomzoh PHPで印刷所に入稿できる名札データを作る 印刷所へのリクエスト • サイズ〇〇の〇〇紙に印刷してください • 長谷川カンファレンスの場合は 200mm x 148mm OKマットポスト 125kg • 表面はこのPDFでぜんぶ違うデザイン、 裏面は固定でこのPDFです • 2つに折り畳んで使うので真ん中に筋押しを お願いします 40 余談