[nodeJS] PDF-LIB 한글폰트 사용(Error: WinAnsi cannot encode )
백엔드의 PDF-LIB에서 폰트를 지정하지 않으면 오류가 발생 합니다.
영문은 문제 되지 않지만 한글의 경우 오류를 만나게 됩니다.
그렇기 때문에 커스텀 폰드를 지정해야 하는데 스탠다드폰트가 아닌 별도 폰트를 사용할 때 필요한 부분입니다.
Error: WinAnsi cannot encode "한"
이러한 오류를 만나게 된다면 한글을 사용할 수 없는 폰트이기 때문입니다.
import { PDFDocument, StandardFonts, rgb } from 'pdf-lib'
// Cannot import fontkit from @pdf-lib/fontkit
// Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@pdf-lib/fontkit' imported from
import fontkit from '@pdf-lib/fontkit'
import fs from "fs";
async function createPdf()
{
const pdfDoc = await PDFDocument.create();
// Error: WinAnsi cannot encode "한"
const fontfile = '/www/fonts/NanumGothic.ttf';
if ( fs.existsSync(fontfile) )
{
const fontBytes = fs.readFileSync(fontfile);
let customFont;
if (fontBytes) {
pdfDoc.registerFontkit(fontkit);
await pdfDoc.embedFont(fontBytes);
customFont = await pdfDoc.embedFont(fontBytes);
}
const page = pdfDoc.addPage()
const { width, height } = page.getSize()
const fontSize = 20
page.drawText('Creating PDFs in JavaScript is awesome! - 한글', {
x: 50,
y: height - 4 * fontSize,
size: fontSize,
font: customFont,
color: rgb(20, 30.53, 0.71),
});
}
const pdfBytes = await pdfDoc.save()
let file = '/www/pdf/result/test1.pdf';
if ( fs.existsSync(file) ) {
fs.unlinkSync(file);
}
fs.writeFileSync(file, pdfBytes);
let aStats = fs.statSync(file)
let filesize = aStats.size;
console.log('write pdf file: ', file);
}
텍스트를 지정하고 병합된 결과를 PDF 파일로 저장하는 예제 입니다.
높은 버전의 PDF 파일까지 지원이 되기 때문에 사용할만한 PDF 라이브러리 중 하나 입니다.
● 참고자료
https://pdf-lib.js.org/#examples
https://pdf-lib.js.org/docs/api/classes/pdffont
https://pdf-lib.js.org/docs/api/interfaces/embedfontoptions#index
https://pdf-lib.js.org/docs/api/classes/pdfdocument#registerfontkit
https://www.npmjs.com/package/@pdf-lib/fontkit
https://github.com/Hopding/pdf-lib/issues/548