[nodejs] PDF파일 페이지 번호 없는 경우 페이지 자동으로 넣어주기
프로그래머가 아니라 일반인이면 PDF 페이지번호 추가해주는 사이트가 있으니 아래를 참고하시면 됩니다.
https://tools.pdf24.org/ko/add-page-numbers#s=1687481961009
여기선 nodejs와 pdf-lib 설치에 대해선 언급하지 않습니다.
아래는 간단한 소스 입니다.
PDF파일에 페이지 번호가 없어서 인쇄하는데 있어 페이지수가 적으면 문제가 안되지만 수십페이지만 되어도 읽을때 문제가 될 수 있습니다. 페이지가 바뀐다거나 아니면 인쇄할때 잘못되어 중간부터 인쇄할때 몇페이지 부터 인쇄해야 될지 찾는데 시간이 소요 될 수 있는 문제를 해결하려면 페이지번호가 들어가 있는것이 좋습니다.
/**
* PDF페이지에 페이지 번호 없는 경우 페이지 번호 자동으로 넣어주기
*
*
*/
import { degrees, PDFDocument, rgb, StandardFonts } from 'pdf-lib';
import fetch from "node-fetch";
import fs from "fs";
import os from "os";
import { info } from 'console';
// npm install --save @pdf-lib/fontkit
import fontkit from '@pdf-lib/fontkit'
(async () => {
const _DIR_ = process.cwd();
let pdf_file = _DIR_ + '/pdf_sample.pdf';
let is_file = fs.existsSync(pdf_file);
if ( is_file )
{
const existingPdfBytes = fs.readFileSync(pdf_file);
const pdfDoc = await PDFDocument.load(existingPdfBytes)
const totalPages = pdfDoc.getPageCount()
const pdfPages = pdfDoc.getPages()
const FONT_SIZE = 10;
for( var page = 1; page <= totalPages; page++ ) {
let pdfPage = pdfPages[page-1];
let pdfPageWidth = pdfPage.getSize()['width'];
let pdfPageHeight = pdfPage.getSize()['height'];
let pageData = page + ' / ' + totalPages;
let leftPos = pdfPageWidth - 100;
let topPos = 50;
pdfPage.drawText(pageData, {
'x' : leftPos,
'y' : topPos,
'size' : FONT_SIZE,
// 'font' : customFont,
'color' : rgb(0, 0, 0),
});
}
const pdfBytes = await pdfDoc.save()
var file = _DIR_ + '/ddd.pdf';
if ( fs.existsSync(file) ) {
fs.unlinkSync(file);
}
fs.writeFileSync(file, pdfBytes);
}
})();
프로그램이기 때문에 페이지번호 자동으로 넣어주기에서 필요하다면 페이지수 이외에 다른것도 넣을 수 있습니다.
여기는 빠져 있지만 회사의 로고의 이미지도 넣을 수 있겠습니다.
별도로 중간에 워터마트도 간략하게 넣을 수 있으니 샘플 사이트 보시면 됩니다.
혹시 PDF 파일 천페이지가 넘어서 메모리 문제가 생긴다면 아래를 참고하세요.
node --max-old-space-size=8192 pdf_page_insert.js
관련링크