実現したいこと
pdf-libで、日本語テキストをPDFに書き込みたい
前提
TypeScriptでPDFを編集できるアプリを作っています。
下記サイトを参考に、日本語でのテキスト入力実装中に、以下のエラーが発生しました。
https://symfoware.blog.fc2.com/blog-entry-2597.html
発生している問題・エラーメッセージ
Unhandled Runtime Error TypeError: fontkit.create is not a function > const customFont = await pdfDoc.embedFont(font, { subset: true });
該当のソースコード
import { CircularProgress } from "@mui/material"; import { PDFDocument } from "pdf-lib"; import React, { useEffect, useState } from "react"; const fontkit = require('@pdf-lib/fontkit'); export default function PaperPDF() { // pdf-libでのPDF表示 const [pdfUri, setPdfUri] = useState<string | null>(null); useEffect(() => { async function showPDF() { const url = "/paper.pdf"; const pdfBytes = await fetch(url).then((res) => res.arrayBuffer()); const pdfDoc = await PDFDocument.load(pdfBytes); // 日本語対応・フォントを追加 const font = await fetch('/MPLUS1p-Light.ttf').then(res => res.arrayBuffer()); if (!font) return pdfDoc.registerFontkit(fontkit) const customFont = await pdfDoc.embedFont(font, { subset: true }); const pages = pdfDoc.getPages(); const page = pages[0]; // 日付 page.drawText("12", { x: 10, y: 300, size: 10, font: customFont }); page.drawText("31", { x: 50, y: 300, size: 10, font: customFont }); page.drawText("月", { x: 100, y: 300, size: 10, font: customFont }); const dataUri = await pdfDoc.saveAsBase64({ dataUri: true }); setPdfUri(dataUri); } showPDF(); }, []); if (pdfUri === null) return <CircularProgress />; return <iframe src={pdfUri} style={{ width: "100%", height: 500 }} />; }
試したこと
下記サイトを参考に、react-pdfをinstall
https://stackoverflow.com/questions/73543912/attempted-import-error-create-is-not-exported-from-fontkit-imported-as-fo
補足情報(FW/ツールのバージョンなど)
"@pdf-lib/fontkit": "^1.1.1", "@react-pdf/font": "2.2.1", "@react-pdf/pdfkit": "2.1.0",

あなたの回答
tips
プレビュー