기존 pdf 파일에 이미지, 텍스트를 추가 할 일이 있어 pdf-lib 라이브러리를 사용중 에러 발생.. 한글 텍스트를 추가 하려고 하니 Error: WinAnsi cannot encode 에러가 발생하며 한글 텍스트 추가가 되지 않았다.
알아보니 폰트에서 한글을 지원해주지 않을시 발생하는 에러이다. 그래서 한글을 지원해주는 폰트를 추가하여 설정해줘야 한다.
해결 방법
1. Google 에서 무료로 제공해주는 Fonts 중에 한글 지원 폰트 다운로드
- https://fonts.google.com/specimen/Nanum+Gothic?query=Nanum
한글 지원 확인.
2. pdf-lib 에 폰트 설정
import fontkit from '@pdf-lib/fontkit'
import fs from 'fs'
import { PDFDocument } from 'pdf-lib'
const existingPdfBytes = await fs.promises.readFile(pdfFileArg)
const pngImageBytes = await fs.promises.readFile(qrImageArg)
// Create a new PDFDocument
const pdfDoc = await PDFDocument.load(existingPdfBytes)
// Embed the PNG image bytes
const pngImage = await pdfDoc.embedPng(pngImageBytes)
// Get the width/height of the PNG image scaled down to 50% of its original size
const pngDims = pngImage.scale(0.5)
// Add a blank page to the document
const page = pdfDoc.addPage()
pdfDoc.registerFontkit(fontkit)
// 한글 사용시 폰트 따로 설정해줘야함.
if (fs.existsSync(fontFileArg)) {
const fontBytes = await fs.promises.readFile(fontFileArg) // 다운 받은 폰트 파일.
const fontForHangul = await pdfDoc.embedFont(fontBytes)
...
}
참고자료
- https://github.com/Hopding/pdf-lib/issues/548
- https://github.com/Hopding/pdf-lib/issues/1152
'IT > Javascript' 카테고리의 다른 글
[npm] github npm private package 작성기 (0) | 2023.10.25 |
---|---|
[javascript] axios 는 GET params 에 null, undefined, 빈 배열 값은 담지 않는다. (0) | 2022.12.15 |
[javascript] moment 라이브러리 deprecated (0) | 2021.09.27 |