Node.js에서 PDF 양식 필드를 채우는 방법

This article was translated from English: Does it need improvement?
Translated
View the article in English

Node.js에서 PDF 양식을 프로그래밍 방식으로 채우면 데이터베이스 레코드를 사용한 애플리케이션 양식 채우기에서 대량의 개인화된 인증서 생성에 이르기까지 문서 워크플로우를 자동화할 수 있습니다. IronPDF for Node.js는 기존 PDF를 로드하고, 양식 필드에 값을 쓰고, JavaScript 환경을 벗어나지 않고 완성된 문서를 저장할 수 있는 간단한 API를 제공합니다.

이 가이드는 Install-Package, 라이선스 키 적용, 텍스트 필드, 체크박스, 드롭다운 및 라디오 버튼 채우기, 값을 잠그기 위해 양식 필드를 평면화, 출력 저장 등 전체 워크플로우를 다룹니다. 모든 코드 예제는 await@ironsoftware/ironpdf 패키지를 사용합니다.

빠른 시작: Node.js 에서 PDF 양식 작성하기

패키지를 설치한 후 몇 줄로 양식을 로드하고 채웁니다:

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/install.sh
npm install @ironsoftware/ironpdf
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/install.sh
npm install @ironsoftware/ironpdf
SHELL
:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/quickstart.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = "YOUR-LICENSE-KEY-HERE";

(async () => {
    const pdf = await PdfDocument.fromFile("./form.pdf");
    await pdf.setFormFieldValue("firstName", "Jane");
    await pdf.setFormFieldValue("email", "jane@example.com");
    await pdf.saveAs("./filled-form.pdf");
})();
JAVASCRIPT

Node.js에서 PDF 양식을 채우기 위해 어떤 필수 조건이 필요한가요?

아래 코드 예제를 실행하기 전에 세 가지를 확인하세요: 지원되는 Node.js 버전, IronPDF 라이선스 키, IronPdfEngine 바이너리.

Node.js 버전: IronPDF는 Node.js 18 이상을 필요로 합니다. 현재 LTS 릴리스를 공식 Node.js 웹사이트에서 다운로드하세요. 라이브러리는 모든 PDF 작업에 대해 Node.js 비동기 I/O를 사용하므로, await 또는 Promise 체인이 전반적인 표준 패턴입니다. Node.js의 오래된 버전은 패키지가 Node.js 18 이상의 기본 ESM 및 async_hooks 기능에 의존하기 때문에 지원되지 않습니다.

라이선스 키: 활성화된 IronPDF 라이선스 키는 전체 API를 해제합니다. 무료 체험을 시작해서 개발 및 테스트용 키를 얻거나, 생산 사용을 위한 라이선스 구매를 할 수 있습니다. 배포 옵션(환경 변수, 구성 파일, 비밀 관리자)은 라이선스 키 사용 가이드를 참조하세요.

IronPdfEngine: Node.js 패키지에 포함된 @@IronPdfEngine, 모든 실제 PDF 조작을 처리하는 크로스 플랫폼 렌더링 엔진. 설정 및 플랫폼별 주의 사항(Windows, Linux, macOS)은 IronPdfEngine 사용 문서에 나와 있습니다.

Node.js 코드에서 라이선스 키를 설정하는 방법은 무엇인가요?

애플리케이션 시작 시, @@PdfDocument호출 전에 한 번 라이선스 키를 적용하세요.

:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/license-setup.js
const { IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

// Apply once at startup -- before any PdfDocument operations
IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;
JAVASCRIPT

@@process.env.IRONPDF_LICENSE_KEY로 위에 보여진 대로 환경 변수에 키를 저장하면 자격 증명이 소스 제어에서 벗어납니다. 빠른 시작 개요는 다른 배포 환경을 위한 추가 초기화 패턴을 다룹니다.


Node.js 용 IronPDF 어떻게 설치하나요?

Node.js를 위한 IronPDF 설치는 단일 npm 명령어로 가능합니다. 프로젝트 디렉토리에서 실행하세요:

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/install-full.sh
npm install @ironsoftware/ironpdf
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/install-full.sh
npm install @ironsoftware/ironpdf
SHELL

패키지는 TypeScript 타입 선언과 함께 제공되므로, 별도의 @types 패키지 없이도 TypeScript 프로젝트는 완전한 IntelliSense 지원을 받을 수 있습니다. Windows, Linux 및 macOS에 대한 플랫폼별 바이너리는 설치 중 자동으로 다운로드됩니다. npm의 @Iron Software/ironpdf 패키지는 모든 게시된 버전 및 동료 패키지를 나열합니다.

TypeScript 프로젝트의 경우, 포함된 .d.ts 선언은 VS Code 및 TypeScript 언어 서비스를 지원하는 다른 편집기에서 상자 밖에서 제대로 작동하는 IntelliSense를 의미합니다.

기존 모노레포 또는 Docker 기반 워크플로우에 IronPDF를 추가하는 방법에 대한 지침은 Node.js를 위한 IronPDF 문서를 참조하세요.


PDF 양식을 프로그램으로 자동으로 채우는 방법은 무엇인가요?

PDF를 로드하고 그 폼 필드에 값들을 쓰려면 세 가지 비동기 호출이 필요합니다: PdfDocument.fromFile(), setFormFieldValue(), saveAs(). 아래 예시는 다수의 필드를 포함한 양식 애플리케이션을 채우고 결과를 평면화하여 값이 전달 후 변경되지 않도록 옵션으로 제공할 수 있습니다.

완전한 양식 채우기 예시는 어떻게 보이나요?

다음 예시는 여러 필드 유형이 있는 PDF를 로드하고, 이를 채우고 결과를 저장합니다. 채우기보다는 양식을 생성하는 것에 집중하려면, PDF 양식 예제 페이지를 참조하세요.

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/fill-pdf-form.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;

async function fillApplicationForm() {
    // Load the PDF containing form fields
    const pdf = await PdfDocument.fromFile("./forms/application-form.pdf");

    // Discover available field names before filling
    const fieldNames = await pdf.getFormFieldNames();
    console.log("Form fields:", fieldNames);

    // Text fields
    await pdf.setFormFieldValue("firstName", "Jane");
    await pdf.setFormFieldValue("lastName", "Doe");
    await pdf.setFormFieldValue("email", "jane.doe@example.com");
    await pdf.setFormFieldValue("phone", "+1-555-987-6543");

    // Date field
    await pdf.setFormFieldValue("dateOfBirth", "03/22/1988");

    // 체크박스 fields -- pass "true" or "false" as strings
    await pdf.setFormFieldValue("agreeToTerms", "true");
    await pdf.setFormFieldValue("subscribeNewsletter", "false");

    // Dropdown / select field
    await pdf.setFormFieldValue("country", "United States");

    // Multi-line text area
    await pdf.setFormFieldValue("comments", "Application submitted via automated workflow.");

    // Flatten the form to lock values -- prevents further editing
    // await pdf.flattenAllFormFields();

    await pdf.saveAs("./output/filled-application.pdf");
    console.log("Form saved.");
}

fillApplicationForm().catch(console.error);
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/fill-pdf-form.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;

async function fillApplicationForm() {
    // Load the PDF containing form fields
    const pdf = await PdfDocument.fromFile("./forms/application-form.pdf");

    // Discover available field names before filling
    const fieldNames = await pdf.getFormFieldNames();
    console.log("Form fields:", fieldNames);

    // Text fields
    await pdf.setFormFieldValue("firstName", "Jane");
    await pdf.setFormFieldValue("lastName", "Doe");
    await pdf.setFormFieldValue("email", "jane.doe@example.com");
    await pdf.setFormFieldValue("phone", "+1-555-987-6543");

    // Date field
    await pdf.setFormFieldValue("dateOfBirth", "03/22/1988");

    // 체크박스 fields -- pass "true" or "false" as strings
    await pdf.setFormFieldValue("agreeToTerms", "true");
    await pdf.setFormFieldValue("subscribeNewsletter", "false");

    // Dropdown / select field
    await pdf.setFormFieldValue("country", "United States");

    // Multi-line text area
    await pdf.setFormFieldValue("comments", "Application submitted via automated workflow.");

    // Flatten the form to lock values -- prevents further editing
    // await pdf.flattenAllFormFields();

    await pdf.saveAs("./output/filled-application.pdf");
    console.log("Form saved.");
}

fillApplicationForm().catch(console.error);
JAVASCRIPT

getFormFieldNames()을 호출한 후, 반환된 배열은 PDF 작성자가 사용한 필드 이름을 알려줍니다. 자신이 만들지 않은 양식과 통합할 때는 필드 이름에서 철자를 피하기 위한 가장 빠른 방법입니다.

킬 때 getFormFieldNames()을 열 번 호출하여 PDF에 있는 정확한 필드명을 출력하세요. setFormFieldValue() 후에 빈 필드가 나타나는 가장 일반적인 원인은 잘못된 이름을 하드코딩하는 것입니다.


Icon Quote related to 완전한 양식 채우기 예시는 어떻게 보이나요?

이 종류의 라이브러리 중 가장 좋아하는 것은 IronPDF입니다. PDF 파일을 빠르고 효율적으로 조작할 수 있습니다. 또한 PDF/A 형식으로 내보내기 및 PDF 문서의 디지털 서명과 같은 많은 유용한 기능을 가지고 있습니다.

Milan Jovanovic related to 완전한 양식 채우기 예시는 어떻게 보이나요?

Milan Jovanovic

마이크로소프트 MVP

사례 연구 보기
Icon Quote related to 완전한 양식 채우기 예시는 어떻게 보이나요?

IronOCR 덕분에 연간 $40,000를 수동 프로세싱에서 절약하고 생산성을 높이며 고부가가치 작업에 자원을 활용할 수 있습니다. 강력히 추천합니다.

Brent Matzelle related to 완전한 양식 채우기 예시는 어떻게 보이나요?

브렌트 마첼

최고 기술 책임자, OPYN

사례 연구 보기
Icon Quote related to 완전한 양식 채우기 예시는 어떻게 보이나요?

IronSuite는 우리의 운영에서 중요한 역할을 합니다. 이것들은 사업 전반에 걸쳐 효율성을 높이는 도구로, 평면도 생성 및 재고 관리 개선을 포함합니다.

David Jones related to 완전한 양식 채우기 예시는 어떻게 보이나요?

데이비드 존스

리드 소프트웨어 엔지니어, Agorus Build

사례 연구 보기

다른 양식 필드 유형을 어떻게 처리하나요?

IronPDF는 표준 AcroForm 필드 유형을 지원합니다: 텍스트 상자, 체크박스, 라디오 버튼, 드롭다운, 목록 상자 및 서명 필드. setFormFieldValue() 메서드는 모든 유형에 대해 문자열 값을 수용하며, 체크박스 및 라디오 필드의 경우, 허용된 값은 PDF 내 특정 필드 정의에 따라 다릅니다.

아래 테이블은 각 필드 유형에 맞는 값 형식을 보여줍니다:

PDF AcroForm 필드 유형 및 허용 값 형식
필드 유형값 형식
텍스트 / 멀티라인아무 문자열"Jane Doe"
체크박스"true" 또는 "false""true"
라디오 버튼옵션의 내보내기 값"여성"
드롭다운 (콤보)옵션의 표시 텍스트"미국"
리스트 박스 (멀티 선택)문자열 배열["Option1", "Option2"]
날짜 / 숫자문자열 표현"2024-06-15"

체크박스와 라디오 버튼은 어떻게 작동하나요?

체크박스는 "true"로 선택하고, "false"로 선택을 해제할 수 있습니다. 라디오 버튼은 선택할 옵션의 내보내기 값을 허용합니다 — 내보내진 문자열은 보통 PDF의 필드 속성에서 볼 수 있으며 표시 레이블과는 다릅니다.

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/field-types.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;

async function handleFieldTypes() {
    const pdf = await PdfDocument.fromFile("./forms/complex-form.pdf");

    // Radio button -- use the field's export value, not its display label
    await pdf.setFormFieldValue("gender", "Female");

    // 체크박스
    await pdf.setFormFieldValue("termsAccepted", "true");

    // Dropdown
    await pdf.setFormFieldValue("preferredContact", "Email");

    // Numeric field -- pass the number as a string
    await pdf.setFormFieldValue("invoiceAmount", "1250.00");

    // Date picker
    await pdf.setFormFieldValue("appointmentDate", "2024-06-15");

    await pdf.saveAs("./output/complex-form-filled.pdf");
}

handleFieldTypes().catch(console.error);
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/field-types.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;

async function handleFieldTypes() {
    const pdf = await PdfDocument.fromFile("./forms/complex-form.pdf");

    // Radio button -- use the field's export value, not its display label
    await pdf.setFormFieldValue("gender", "Female");

    // 체크박스
    await pdf.setFormFieldValue("termsAccepted", "true");

    // Dropdown
    await pdf.setFormFieldValue("preferredContact", "Email");

    // Numeric field -- pass the number as a string
    await pdf.setFormFieldValue("invoiceAmount", "1250.00");

    // Date picker
    await pdf.setFormFieldValue("appointmentDate", "2024-06-15");

    await pdf.saveAs("./output/complex-form-filled.pdf");
}

handleFieldTypes().catch(console.error);
JAVASCRIPT

멀티 선택 리스트 박스 필드는 동일한 패턴을 따릅니다. 여러 선택을 허용하는 필드에는 단일 값 대신 문자열 배열을 전달합니다. 서명 필드는 서명 그래픽을 나타내는 base64으로 인코딩된 이미지 문자열을 받을 수 있습니다.

중요한사용 setFormFieldValue()가 필드의 값을 변경하는 것처럼 보이지 않는 경우 필드 이름이 정확히 일치하는지 확인하세요 — PDF 필드 이름은 대소문자를 구분합니다. 문서에서 실제 이름을 나열할 때는 getFormFieldNames()을 사용하세요.


PDF 양식 필드를 채운 후 어떻게 평면화하나요?

PDF 양식을 평면화하면 모든 필드 값을 고정된 페이지 콘텐츠로 병합하고 인터랙티브 레이어를 제거합니다. 결과 문서는 더 이상 편집할 수 없어 배포 중 실수로 변경되는 것을 방지하고 모든 PDF 뷰어에서 일관된 렌더링을 보장합니다.

필드 값을 모두 설정한 후 저장하기 전에 로드된 문서에서 flattenAllFormFields()을 호출하세요.

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/flatten-form.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;

async function fillAndFlattenForm() {
    const pdf = await PdfDocument.fromFile("./forms/contract.pdf");

    // Fill the required fields
    await pdf.setFormFieldValue("signerName", "Jane Doe");
    await pdf.setFormFieldValue("signatureDate", "2024-06-15");
    await pdf.setFormFieldValue("agreementAccepted", "true");

    // Flatten -- converts interactive fields to static content
    await pdf.flattenAllFormFields();

    await pdf.saveAs("./output/contract-signed.pdf");
    console.log("Contract flattened and saved.");
}

fillAndFlattenForm().catch(console.error);
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/flatten-form.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;

async function fillAndFlattenForm() {
    const pdf = await PdfDocument.fromFile("./forms/contract.pdf");

    // Fill the required fields
    await pdf.setFormFieldValue("signerName", "Jane Doe");
    await pdf.setFormFieldValue("signatureDate", "2024-06-15");
    await pdf.setFormFieldValue("agreementAccepted", "true");

    // Flatten -- converts interactive fields to static content
    await pdf.flattenAllFormFields();

    await pdf.saveAs("./output/contract-signed.pdf");
    console.log("Contract flattened and saved.");
}

fillAndFlattenForm().catch(console.error);
JAVASCRIPT

평면화는 최종 전달에 적합합니다 — 서명 후 계약서, 발행 후 증명서, 승인 후 송장 등. 최종 결정 전에 추가 검토가 필요한 문서는 flattenAllFormFields()을 건너뛰고 저장하세요.

경고평면화는 저장된 사본에서 되돌릴 수 없습니다. 문서를 다시 생성해야 할 경우, 원본 작성되지 않은 PDF를 템플릿으로 보관하세요.


PDF 양식 자동화의 일반적인 사용 사례는 무엇입니까?

자동 양식 작성은 대량 문서 워크플로에서 수작업 데이터 입력을 제거합니다. 다음 시나리오는 개발자가 IronPDF로 구현하는 가장 빈번한 패턴을 다룹니다.

신청서 처리: 신청자 데이터를 데이터베이스 또는 REST API에서 가져와 금융 서비스, 보험 또는 정부 접수 워크플로의 PDF 양식을 채웁니다. 기입된 양식을 PDF 병합 예제를 사용하여 하나의 다중 페이지 제출 패킷을 생성합니다.

송장 및 영수증 생성: 항목 데이터, 고객 정보 및 계산된 총액으로 송장 템플릿을 채웁니다. HTML 헤더 및 푸터 예제에서 보여준 기법을 사용하여 페이지 헤더와 푸터를 추가하세요.

인증서 및 자격 증명 생성: 수령인 이름, 완료 날짜 및 과정 제목으로 인증서 템플릿을 개인화합니다. 발행 후 변조를 방지하기 위한 디지털 서명 예제를 사용하여 보안을 추가합니다. PDF/A 표준은 규제된 산업에서 인증서를 장기 보관에 일반적으로 요구됩니다.

보고서 생성: 분석 데이터나 설문 결과로 보고서 템플릿을 채웁니다. 기존 양식을 채우기보다는 처음부터 PDF 레이아웃을 구축해야 하는 경우 HTML to PDF 튜토리얼을 참조하세요.


Node.js에서 PDF 양식 작성을 위한 다음 단계는 무엇입니까?

이 가이드에서는 PDF를 로드하고 텍스트 필드, 체크박스, 드롭다운 및 라디오 버튼을 채우고, 값을 고정하여 양식을 평면화하고 완료된 문서를 저장하는 방법을 설명했습니다. 같은 PdfDocument 인스턴스는 추가 작업 — 디지털 서명 추가, 출력 압축, 텍스트 추출 —을 지원하며 파일을 다시 로드할 필요가 없습니다.

무료 체험을 시작하세요 프로젝트에서 IronPDF를 테스트하거나 라이선싱 옵션 보기에서 배포에 맞는 계획을 찾습니다.

당신이 할 수 있는 다른 일들을 알아볼 준비가 되셨나요? Node.js 튜토리얼 전체 컬렉션은 여기에서 확인하세요: Node.js의 HTML to PDF

자주 묻는 질문

Node.js를 사용하여 PDF 양식을 작성하려면 어떤 사전 준비가 필요합니까?

Node.js 18 이상, IronPDF 라이선스 키(무료 체험 가능), 그리고 IronPdfEngine 바이너리가 필요합니다. 이 엔진은 @ironsoftware/ironpdf 패키지에 번들로 포함되어 있으며 설치 시 자동으로 다운로드됩니다.

Node.js용 IronPDF를 어떻게 설치하나요?

npm install @ironsoftware/ironpdf를 프로젝트 디렉터리에서 실행합니다. 이 명령은 Windows, Linux, 및 macOS에 대한 패키지와 플랫폼별 바이너리를 설치합니다. TypeScript 타입 선언도 포함되어 있습니다.

PDF 양식에서 필드 이름을 어떻게 찾나요?

PDF를 PdfDocument.fromFile()로 로드한 후 await pdf.getFormFieldNames()를 호출하십시오. 이 메서드는 문서 내 모든 필드 이름 문자열의 배열을 반환합니다. PDF 필드 이름은 대소문자를 구분하므로 반환된 정확한 문자열을 사용하세요.

체크박스와 라디오 버튼은 어떤 값 형식을 수용하나요?

체크박스는 체크를 위해 "true" 문자열을, 체크 해제를 위해 "false" 문자열을 수락합니다. 라디오 버튼은 대상 옵션의 내보내기 값을 문자열로 수락합니다. getFormFieldNames()를 사용하고 PDF 필드 속성을 검사하여 올바른 내보내기 값을 찾으세요.

채워진 PDF 양식이 수정되지 않도록 하려면 어떻게 해야 하나요?

saveAs() 전에 모든 필드 값을 설정한 후 await pdf.flattenAllFormFields()를 호출하세요. 평면화는 필드 값을 정적 페이지 콘텐츠에 병합하고 대화형 양식 레이어를 제거합니다. 이 작업은 저장된 파일에서 되돌릴 수 없습니다.

IronPDF for Node.js를 TypeScript와 함께 사용할 수 있나요?

네. @ironsoftware/ironpdf 패키지는 TypeScript 선언(.d.ts 파일)을 함께 제공하므로, 별도의 types 패키지를 설치하지 않고도 VS Code 및 다른 편집기에서 전체 타입 검사와 IntelliSense를 사용할 수 있습니다.

Darrius Serrant
풀스택 소프트웨어 엔지니어 (웹 운영)

다리우스 세런트는 마이애미 대학교에서 컴퓨터 과학 학사 학위를 받았으며, Iron Software에서 풀 스택 웹 운영 마케팅 엔지니어로 근무하고 있습니다. 어린 시절부터 코딩에 매료되었던 그는 컴퓨팅이 신비로우면서도 접근하기 쉬운 분야라고 생각했고, 창의력과 문제 해결 능력을 발휘하기에 완벽한 매체라고 여겼습니다.

Iron Software에서 다리우스는 새로운 것을 만들고 복잡한 개념을 단순화하여 더 쉽게 이해할 수 있도록 하는 것을 즐깁니다. 그는 사내 개발자로서 학생들을 가르치는 데에도 자원하여 차세대 인재들과 전문 지식을 공유하고 있습니다.

다리우스에게 있어 그의 일은 가치 있고 실질적인 영향을 미치기 때문에 보람 있는 일입니다.

시작할 준비 되셨나요?
버전: 2026.6 방금 출시
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요?
샘플을 실행하세요 HTML이 PDF로 변환되는 것을 지켜보세요.