Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
カスタムフィールドのデータを表形式でPDFに書き出す方法 / a-blog cms with ...
Search
Ohta Konatsu
May 18, 2019
Programming
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
カスタムフィールドのデータを表形式でPDFに書き出す方法 / a-blog cms with pdfmake
a-blog cms Training Camp 2019 Spring 2日目にお話させていただいた内容です。
Ohta Konatsu
May 18, 2019
More Decks by Ohta Konatsu
See All by Ohta Konatsu
テンプレートの変更を減らすために心がけていること
flour621
0
73
「ここのアニメーション、おまかせで!」と言われたら / What is important for css animation
flour621
0
37
Other Decks in Programming
See All in Programming
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
150
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
190
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
1k
The Rails Doctrine Decade
koic
2
590
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.9k
golang-bob.pdf
iwatsukayura
0
130
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
0
880
Featured
See All Featured
Practical Orchestrator
shlominoach
192
12k
The Curious Case for Waylosing
cassininazir
1
570
Statistics for Hackers
jakevdp
799
230k
The World Runs on Bad Software
bkeepers
PRO
72
12k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
Everyday Curiosity
cassininazir
0
350
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
370
Paper Plane
katiecoart
PRO
5
54k
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Designing for Timeless Needs
cassininazir
1
530
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Transcript
ΧελϜϑΟʔϧυͷσʔλΛ දܗࣜͰ1%'ʹॻ͖ग़͢ํ๏
URL https:/ /suzulabo.com MAIL
[email protected]
OHTA KONATSU WEB CREATOR &
FRONT END ENGINEER / a-blog cms 3
͓ͳ͢͠Δ͜ͱ wࣄྫհ wQEGNBLFKTͱ wBCMPHDNTͰQEGNBLFKTΛ͏ʹ w·ͱΊ
ࣄྫհ
ࣄྫհ NPO a-blog cms A B Z
PDF ࣄྫհ ͕୲ͨ͜͠ͱ ࢲ
PDF PDF 2 ࣄྫհ ػೳཁ݅
None
None
団体情報ガイドブック確認票 登録番号:29 グループ名 さんぷるぐるーぷ サンプルグループ 所管施設 市民活動分野 生涯学習分野 教育、キャリアアップ、レクリエーション、その他(あそび・ス ポーツ)
ふりがな やまだ たろう ふりがな やまだ たろう 代表者名 (ガイドブックへの情報公開 可) 山田 太郎 連絡先窓口担当者 (ガイドブックへの情報公開 可) 山田 太郎 連絡先 [事務所] 電話 :000-000-0000 (ガイドブックへの情報公開 可) 携帯電話:000-0000-0000 (ガイドブックへの情報公開 不可) FAX :000-000-0000 (ガイドブックへの情報公開 不可) メールアドレス:
[email protected]
(ガイドブックへの情報公開 可) 連絡先住所 [代表者] (ガイドブックへの情報公開 不可) 〒 460-0000 愛知県名古屋市中区 活動開始年 会員数 10人 活動日時 毎月第2土曜日 12:00から 活動場所 ベースキャンプ名古屋 会費・入会金 2,000円 活動内容 Webサイト制作の基礎を学べる子ども向けのイベントを開催しています。 代表者・会員のコメントなど サイト制作の楽しさをたくさんの子に知ってもらえるよう活動してまいります。 ホームページアドレス https://example.com 所属団体 WEBで情報公開 公開可 登録番号:29 グループ名 さんぷるぐるーぷ サンプルグループ 所管施設 市民活動分野 生涯学習分野 教育、キャリアアップ、レクリエーション、その他(あそび・ス ポーツ) 活動開始年 会員数 10人 活動日時 毎月第2土曜日 12:00から 活動場所 ベースキャンプ名古屋 会費・入会金 2,000円 活動内容 Webサイト制作の基礎を学べる子ども向けのイベントを開催しています。 代表者・会員のコメントなど サイト制作の楽しさをたくさんの子に知ってもらえるよう活動してまいります。 ホームページアドレス https://example.com 所属団体 代表者名 ふりがな やまだ たろう 山田 太郎 連絡先窓口担当者 ふりがな やまだ たろう 山田 太郎 連絡先 [事務所] 電話 :000-000-0000 携帯電話: FAX : メールアドレス:
[email protected]
連絡先住所 [代表者] 〒 ֬ೝ༻ҹ ΨΠυϒοΫ
pdfmake.js (http://pdfmake.org/)
QEGNBLFKTͱ
/ PDF QEGNBLFKTͱ
QEGNBLFKTͱ JavaScript QEGNBLFͷ͍͍ͱ͜Ζᶃ const docDefinition = { content: [{ table:
{ body : [ ['⾒出し', '⾒出し', '⾒出し'], [{text: '⽂章', bold: true}, '⽂章', '⽂章'] ] } }] }; pdfMake.createPDF(docDefinition).open();
QEGNBLFKTͱ (table) (columns) QEGNBLFͷ͍͍ͱ͜Ζᶄ const docDefinition = { content: [{
table: { widths: ['*', 'auto', 100], body : [ ['⽂章', '⽂章', ‘⽂章'] ] } }] }; pdfMake.createPDF(docDefinition).open();
QEGNBLFKTͱ rowSpan, colSpan QEGNBLFͷ͍͍ͱ͜Ζᶅ const docDefinition = { content: [{
table: { widths: [100, 100, 100], body : [ [{text:'⽂章', rowSpan: 2}, '⽂章', '⽂章'], ['', {text:'⽂章', colSpan: 2}, ''] ] } }] }; pdfMake.createPDF(docDefinition).open();
QEGNBLFKTͱ QEGNBLFͷ͍͍ͱ͜Ζᶆ const docDefinition = { content: [{ table: {
widths: [100, 100, 100], body : [ [{text:'⽂章', style: ['sample']}, '⽂章', '⽂章'], ] } }], defaultStyle: {fontSize: 20}, styles: { sample: {color: 'red'} } }; pdfMake.createPDF(docDefinition).open();
QEGNBLFKTͱ ͪΐͬͱ೦ͳͱ͜Ζᶃ ‣ playground
QEGNBLFKTͱ padding border ( ) ͪΐͬͱ೦ͳͱ͜Ζᶄ layout: { paddingLeft: function
(i) { return 8; }, paddingRight: function (i) { return 8; }, paddingTop: function (i) { return 8; }, paddingBottom: function (i) { return 8; }, hLineWidth: function (i) { return 2; }, vLineStyle: function (i) { return {dash: {length: 4, space: 3}}; }, },
QEGNBLFKTͱ ͪΐͬͱ೦ͳͱ͜Ζᶅ Roboto ‣ VFS ‣ gulp, php, 3 ‣
VFS
vfs_fonts.js - base
QEGNBLFKTͱ base ͪΐͬͱ೦ͳͱ͜Ζᶆ ‣ VFS OK ‣ a-blog
cms content: [{ image: 'data:image/jpeg;base64,...encodedContent...', }]
BCMPHDNTͰ QEGNBLFΛ͏ʹ
BCMPHDNTͰQEGNBLFΛ͏ʹ <script src="js/lib/pdfmake.js"></script> <script src="js/lib/vfs_fonts.js"></script> <script> pdfMake.fonts = { Aozora:
{ normal: 'AozoraMinchoRegular.ttf', bold: 'AozoraMinchoMedium.ttf' } }; const docDefinition = { content: [{ table: { // ⽣成するテーブルの内容 } }], defaultStyle: { font: 'Aozora' } }; pdfMake.createPDF(docDefinition).download(); </script> VFS
BCMPHDNTͰQEGNBLFΛ͏ʹ a-blog cms script
BCMPHDNTͰQEGNBLFΛ͏ʹ <script src="js/lib/pdfmake.js"></script> <script src="js/lib/vfs_fonts.js"></script> <script> pdfMake.fonts = { Aozora:
{ normal: 'AozoraMinchoRegular.ttf', bold: 'AozoraMinchoMedium.ttf' } }; const docDefinition = { content: [{ table: { // ⽣成するテーブルの内容 } }], defaultStyle: { font: 'Aozora' } }; pdfMake.createPDF(docDefinition).download(); </script>
pdfmake JS ... BCMPHDNTͰQEGNBLFΛ͏ʹ content: [{ table: { body
: [ <!-- BEGIN_MODULE Entry_Field --> [{text: '{hoge}', rowSpan: 2}, '{fuga}'], ['', {text: '{piyo}', bold: true}] <!-- END_MODULE Entry_Field --> ] } }] ???
BCMPHDNTͰQEGNBLFΛ͏ʹ content: [{ table: { body : [ <!-- BEGIN_MODULE
Entry_Field --> [\{text: '{hoge}', rowSpan: 2\}, '{fuga}'], ['', \{text: '{piyo}', bold: true\}] <!-- END_MODULE Entry_Field --> ] } }]
BCMPHDNTͰQEGNBLFΛ͏ʹ <!-- BEGIN_MODULE Entry_Field --> pdfMake.createPDF(docDefinition).download("{title}_guide.pdf"); <!-- END_MODULE Entry_Field -->
·ͱΊ ͍͍εΫϦϓτΛ͔ͭͬͯɺ BCMPHDNTΛͬͱָ͘͠ศརʹʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ