レンダリングガイド
このガイドでは、noto-pdf-tsを使用した高度なレンダリングテクニックを説明します。
スケールの理解
scaleオプションは出力解像度を制御します。PDFは通常72 DPIで作成されるため:
| スケール | DPI | ユースケース |
|---|---|---|
| 0.5 | 36 | 小さいサムネイル |
| 1.0 | 72 | PDFの元のサイズ |
| 1.5 | 108 | デフォルト、バランスが良い |
| 2.0 | 144 | 高品質表示 |
| 3.0 | 216 | 印刷品質 |
// 例: サムネイルと高解像度バージョンを生成const pdf = await openPdf('/path/to/document.pdf');
// サムネイルfor await (const page of pdf.renderPages({ scale: 0.5 })) { await fs.writeFile(`thumb-${page.pageNumber}.jpg`, page.buffer);}
// 高解像度for await (const page of pdf.renderPages({ scale: 2.0, format: 'png' })) { await fs.writeFile(`hires-${page.pageNumber}.png`, page.buffer);}
await pdf.close();メモリ効率
noto-pdf-tsはメモリ効率の良い処理のために非同期ジェネレータを使用します:
// メモリ効率的 - 一度に1ページずつ処理for await (const page of pdf.renderPages()) { await processPage(page); // 前のページのリソースは次のページの前に解放される}非常に大きなPDFの場合、バッチ処理も可能です:
const BATCH_SIZE = 10;
for (let i = 1; i <= pdf.pageCount; i += BATCH_SIZE) { const endPage = Math.min(i + BATCH_SIZE - 1, pdf.pageCount);
for await (const page of pdf.renderPages({ pages: { start: i, end: endPage } })) { await processPage(page); }
// オプション: バッチ間で一時停止 await new Promise(resolve => setTimeout(resolve, 100));}並列処理
ページはメモリ効率のために順次レンダリングされますが、出力は並列で処理できます:
const pages: RenderedPage[] = [];
for await (const page of pdf.renderPages()) { pages.push(page);}
// すべてのページを並列で処理await Promise.all( pages.map(page => fs.writeFile(`page-${page.pageNumber}.jpg`, page.buffer)));CJKフォントサポート
noto-pdf-tsはPDFiumを通じて中国語、日本語、韓国語フォントの組み込みサポートを提供します。CJKフォントは追加の設定なしで自動的に処理されます。
単一ページのレンダリング
特定のページをレンダリングするには、renderPage()を使用:
const pdf = await openPdf('/path/to/document.pdf');
// 最初のページだけをレンダリングconst firstPage = await pdf.renderPage(1);await fs.writeFile('cover.jpg', firstPage.buffer);
// 最後のページをレンダリングconst lastPage = await pdf.renderPage(pdf.pageCount);await fs.writeFile('back.jpg', lastPage.buffer);
await pdf.close();出力寸法
レンダリングされたページの寸法は、PDFページサイズとスケールに依存します:
for await (const page of pdf.renderPages({ scale: 2.0 })) { console.log(`ページ ${page.pageNumber}: ${page.width}x${page.height} ピクセル`); // A4 PDF(595x842ポイント)の場合、約1190x1684ピクセルになります}