Node.jsでpdfkitを使用してPDFを作成する方法
pdfkit install
pdfkitをインストールします。
$ npm init -y $ npm i pdfkit $ touch index.mjs
index.mjs
import PDFDocument from 'pdfkit'
import fs from 'node:fs'
const doc = new PDFDocument()
doc.pipe(fs.createWriteStream('mypdf.pdf'))
doc.end()
実行します。
$ node index.mjs
mypdf.pdfが作成されます。
文字を追加
text()メソッドで文字追加します。moveDown()メソッドで1行下に移動します。
引数を指定するとその行数移動します。※moveDown(3)…3行下に移動する
import PDFDocument from 'pdfkit'
import fs from 'node:fs'
const doc = new PDFDocument()
doc.text('hello world!')
doc.moveDown()
doc.text('hello world!')
doc.moveDown(2)
doc.text('hello world!')
doc.pipe(fs.createWriteStream('mypdf.pdf'))
doc.end()
文字の方向指定
文字はalign(方向)を指定することができます。
import PDFDocument from 'pdfkit'
import fs from 'node:fs'
const doc = new PDFDocument()
doc.text('hello world!',{align: 'left'})
doc.text('hello world!',{align: 'center'})
doc.text('hello world!',{align: 'right'})
doc.text('hello world!',{align: 'justify'})
doc.pipe(fs.createWriteStream('mypdf.pdf'))
doc.end()
作成したpdfです。
文字の色指定
fillColor()メソッドで文字の色を指定することができます。Cは大文字になります。
import PDFDocument from 'pdfkit'
import fs from 'node:fs'
const doc = new PDFDocument()
doc.fillColor('green').text('hello world!')
doc.pipe(fs.createWriteStream('mypdf.pdf'))
doc.end()
作成したpdfです。
文字ハイライト
highlight()メソッドで文字をハイライトします。
highlight()メソッドの引数は5つあり、以下の通りです。
| 引数 | 内容 |
|---|---|
| 第一引数 | x |
| 第二引数 | y |
| 第三引数 | width |
| 第四引数 | height |
| 第四引数 | AnnotationOption |
index.mjs
import PDFDocument from 'pdfkit'
import fs from 'node:fs'
const doc = new PDFDocument()
const str = 'hello world!'
doc.highlight(
doc.x,
doc.y,
doc.widthOfString(str),
doc.currentLineHeight()
).text(str)
doc.pipe(fs.createWriteStream('mypdf.pdf'))
doc.end()
作成したpdfです。
罫線(矩形)
罫線(矩形)はrect()メソッドで表すことができます。
rect()メソッドの引数は4つあり、以下の通りです。
| 引数 | 内容 |
|---|---|
| 第一引数 | x |
| 第二引数 | y |
| 第三引数 | width |
| 第四引数 | height |
index.mjs
import PDFDocument from 'pdfkit'
import fs from 'node:fs'
const doc = new PDFDocument()
doc.text('hello world!',{align: 'left'})
doc.text('hello world!',{align: 'center'})
doc.text('hello world!',{align: 'right'})
doc.text('hello world!',{align: 'justify'})
doc.rect(doc.x, 0, 500, doc.y).stroke()
doc.pipe(fs.createWriteStream('mypdf.pdf'))
doc.end()
作成したpdfです。
罫線(矩形)の線の色を指定する場合は、stroke()メソッドの引数に色指定を行います。
import PDFDocument from 'pdfkit'
import fs from 'node:fs'
const doc = new PDFDocument()
doc.text('hello world!',{align: 'left'})
doc.text('hello world!',{align: 'center'})
doc.text('hello world!',{align: 'right'})
doc.text('hello world!',{align: 'justify'})
doc.rect(doc.x, 0, 500, doc.y).stroke('green')
doc.pipe(fs.createWriteStream('mypdf.pdf'))
doc.end()
作成したpdfです。
日本語対応
日本語対応するためにipag.ttfをルートディレクトリに配置します。
new PDFDocument()のコンストラクタ引数で{font:パス名}を渡します。これでipag.ttfをデフォルトフォントとして指定します。
index.mjs
import PDFDocument from 'pdfkit'
import fs from 'node:fs'
const doc = new PDFDocument({font: './ipag.ttf'})
doc.text('hello world!')
doc.moveDown()
doc.text('日本語')
doc.pipe(fs.createWriteStream('mypdf.pdf'))
doc.end()
メタデータ追加
作成したpdfにメタデータを追加できます。new PDFDocument()のコンストラクタ引数でinfoを指定します。
| 項目 | 内容 |
|---|---|
| Title | タイトル |
| Author | 作成者 |
| Subject | ドキュメントの件名 |
| Keywords | ドキュメントに関連するキーワード |
| CreationDate | 作成された日付 (PDFKitによって自動的に追加される) |
| ModDate | ドキュメントが最後に修正された日付 |
import PDFDocument from 'pdfkit'
import fs from 'node:fs'
const doc = new PDFDocument({
info: {
Title: 'Sample Title',
Author: 'Takahashi',
Subject: 'Subject Title',
Keywords: 'pdfkit'
},
font: './ipag.ttf'}
)
doc.text('hello world!')
doc.pipe(fs.createWriteStream('mypdf.pdf'))
doc.end()
作成したpdfのメタデータを確認します。
余白設定
pdfの余白設定をします。new PDFDocument()のコンストラクタ引数でmarginsを指定します。
index.mjs
import PDFDocument from 'pdfkit'
import fs from 'node:fs'
const doc = new PDFDocument({
margins: {
top: 0,
bottom: 0,
left: 0,
right: 0
}})
doc.text('hello world!'.repeat(50))
doc.pipe(fs.createWriteStream('mypdf.pdf'))
doc.end()
余白0のpdfです。
余白未設定時のデフォルトは1inch(72point)になります。
画像追加
image()メソッドを使用してpdfファイル内に画像を差し込みます。
ルートディレクトリ直下にsample.pngを配置します。この画像をpdfに差し込みます。
jpeg,png形式をサポートしているようです。
index.mjs
import PDFDocument from 'pdfkit'
import fs from 'node:fs'
const doc = new PDFDocument()
doc.text('hello world!')
doc.image('sample.png')
doc.pipe(fs.createWriteStream('mypdf.pdf'))
doc.end()
画像の幅と高さを指定することも可能です。
doc.image('sample2.png', { width: 30, height:20 })
ページ追加
addPage()メソッドでページ追加することができます。
index.mjs
import PDFDocument from 'pdfkit'
import fs from 'node:fs'
const doc = new PDFDocument({font: './ipag.ttf',size: 'A4'})
doc.text('hello world!') // 1ページ目に出力
doc.addPage({ size: 'A4' })
doc.text('日本語') // 2ページ目に出力
doc.pipe(fs.createWriteStream('mypdf.pdf'))
doc.end()
作成したpdfです。
参考サイト
https://pdfkit.org/docs/guide.pdf

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^



コメント