1. Descritpion
React에서 PDF 템플릿을 편집하고 다운로드하는 과정입니다.
2. Prerequisite
다음과 같은 Library가 임포트되어야 합니다.
import React from 'react';
import { PDFDocument, rgb } from 'pdf-lib';
import fontkit from '@pdf-lib/fontkit';
import download from "downloadjs";
3. Example
다음과 같은 과정으로 PDF파일에 텍스트를 입력한 후 다운로드 합니다.
// PDF와 한글 폰트파일을 서버에서 읽어옵니다.
fetch(templateUrl).then(response => {
response.blob().then(blob => {
const templateContent = blob.arrayBuffer();
fetch(fontUrl).then(response => {
response.blob().then(blob => {
const fontContent = blob.arrayBuffer();
generateAndDownload(templateContent, fontContent);
});
});
});
});
// PDF의 1페이지를 읽어들여서 정해진 좌표에 한글 텍스트를 입력한 후 다운로드됩니다.
const generateAndDownload = async (
templateContent: Promise<ArrayBuffer>, fontContent: Promise<ArrayBuffer>
) => {
// PDF템플릿을 로드합니다.
const pdfDoc = await PDFDocument.load(await templateContent);
// Custom폰트를 사용하기 위해 fontKit을 등록합니다.
pdfDoc.registerFontkit(fontkit);
// 한글 폰트를 읽어옵니다.
const font = await pdfDoc.embedFont(await fontContent);
// PDF템플릿의 1페이지를 읽어옵니다.
const pages = pdfDoc.getPages();
const firstPage = pages[0];
const textInfo = {
x: 455,
y: 365,
size: 12,
font: font,
color: rgb(0.95, 0.1, 0.1),
lineHeight: 30
};
firstPage.setFont(textInfo.font);
firstPage.setFontColor(textInfo.color);
firstPage.setFontSize(textInfo.size)
firstPage.drawText("샘플 텍스트", {
x: textInfo.x,
y: textInfo.y
});
// 편집된 PDF파일을 다운로드합니다.
const pdfBytes = await pdfDoc.save();
download(pdfBytes, "sample.pdf", "application/pdf");
});
4. Reference
pdf-lib, downloadjs, @type/downloadjs
'Node.js > React' 카테고리의 다른 글
【Node.js/React #1】querySelectorAll("*") (0) | 2023.02.26 |
---|---|
【Node.js/React】두 번째 앱을 생성했다. 디버그 코드가 왜 두 번씩 출력되나? (0) | 2023.02.25 |
【Node.js/React】자발적인 React코드 생성은 처음이다. (0) | 2023.02.25 |