구조화된 문서 생성을 위한 JSON-PDF 변환 API
구조화된 JSON DocumentRequest 요청 데이터를 페이지, 좌표, 텍스트, 표, 바코드, 메타데이터, PDF/A 설정을 포함한 PDF로 변환합니다.
/api/v1/pdf/render 브라우저를 운영하거나 HTML/CSS를 보내거나 고객 파일을 저장하지 않고, 구조화된 애플리케이션 데이터를 재현 가능한 PDF 문서로 변환합니다. 자체 시스템은 페이지, 요소, 좌표, 설정, 업무 콘텐츠를 보내고, gPdf는 application/pdf 응답을 반환합니다.
이 API를 쓰는 경우
- 백엔드에 이미 구조화된 데이터가 있고 PDF 응답이 필요합니다.
- HTML 레이아웃 대신 명시적인 페이지, 좌표, 요소, 바코드, 설정을 사용하려고 합니다.
- 인보이스, 라벨, 보고서, 명세서, 생성 문서 묶음에 반복 가능한 출력이 필요합니다.
- 운영 토큰을 넣기 전에 Playground에서 요청 데이터를 테스트하려고 합니다.
대체하지 않는 것
- 임의의 HTML-PDF 변환이 필요합니다. gPdf는 브라우저 DOM이 아니라 DocumentRequest JSON을 사용합니다.
- 팀이 안정적인 template_id 계약을 원합니다. 레이아웃을 게시한 뒤 Template Render를 사용하세요.
- Factur-X 또는 ZUGFeRD 전자 인보이스 패키징이 필요합니다. E-Invoice Render 엔드포인트를 사용하세요.
호출할 endpoint
/api/v1/pdf/render
JSON Render가 이 처리 흐름의 기본 경로입니다.
/api/v1/template-render
관련 API 경로, 템플릿 계약 또는 capability 조회가 필요할 때 사용합니다.
최소 request
POST /api/v1/pdf/render - 한 페이지 JSON DocumentRequest.
{
"pages": [
{
"size": "a4",
"elements": [
{
"type": "text",
"x": 20,
"y": 24,
"content": "Hello from gPdf",
"style": {
"font_size": 18,
"font_family": "NotoSans-Regular"
}
}
]
}
]
}
gPdf가 처리하는 것
- 페이지와 요소로 구성된 DocumentRequest 렌더링.
- 텍스트, 표, 이미지, 벡터 바코드, 선, 도형, 워터마크, 메타데이터, PDF/A 설정.
- Latin, CJK, 이모지 지원 글꼴, 기타 지원 스크립트의 글꼴 임베딩과 대체 폰트 처리.
- 실패 시 공통 gPdf 오류 코드 envelope와 함께 반환되는 바이너리 PDF 응답.
자체 시스템이 책임지는 것
- 업무 데이터, 필드 매핑, 문서의 업무상 의미.
- 요청 ID, 재시도와 멱등성 전략, 파일명, 응답 이후의 저장.
- 렌더링 전의 세금, 인보이스, 운송사, 컴플라이언스, 고객별 규칙.
운영 전 체크리스트
- 추적성을 위해 X-Request-Id를 생성해 전달합니다.
- 실제 트래픽을 보내기 전에 OpenAPI 또는 문서 기준으로 요청 데이터를 검증합니다.
- API base URL을 설정 가능하게 두고 bearer token은 소스 코드 밖에 저장합니다.
- 출력을 inline 모드로 둘지 attachment 모드로 둘지 결정합니다.
- 중요 레이아웃에는 golden PDF 테스트를 추가해 템플릿이나 데이터 변경이 드러나게 합니다.
지원 범위의 경계
- 이 API는 HTML-PDF 변환이 아니며 Chromium을 실행하지 않습니다.
- API는 사용자가 설명한 문서를 렌더링합니다. 데이터에서 법적 또는 업무상 의미를 추론하지 않습니다.
- 반복되는 레이아웃에는 대개 Template Render가 더 나은 공개 계약입니다.
JSON Render 흐름이 맞는 경우
JSON Render는 가장 낮은 수준의 공개 렌더링 경로입니다. 애플리케이션이 페이지 크기, 요소, 좌표, 스타일, 메타데이터, 출력 모드, 선택적 PDF/A 설정 등 문서 구조를 직접 보냅니다. 문서 레이아웃을 코드로 생성하거나 팀이 PDF를 픽셀 수준으로 제어하려는 경우에 맞는 계층입니다.
API 계약은 명시적입니다. 자체 시스템이 텍스트 요소를 보내면 gPdf는 텍스트 요소를 렌더링합니다. 바코드 요소를 보내면 gPdf는 바코드를 벡터 PDF 콘텐츠로 그립니다. gPdf는 요청 데이터에서 업무 의도를 읽지 않으며, 인보이스 번호, 운송사 추적 값, 세금 필드가 올바른지 판단하지 않습니다.
Template Render로 전환할 시점
같은 레이아웃을 여러 시스템에서 반복적으로 사용한다면 템플릿으로 게시하고 template_id와 data[]를 함께 POST /api/v1/template-render로 호출하세요. 이렇게 하면 레이아웃 관리가 각 호출자에서 빠져나오고 ERP, OMS, WMS, SaaS 백엔드에는 안정적인 필드 계약이 생깁니다.
레이아웃 생성, 일회성 문서, 프로그램으로 생성되는 문서에는 JSON Render를 사용하세요. 레이아웃이 고정되어 있고 요청마다 바뀌는 것이 업무 데이터뿐이라면 Template Render를 사용하세요.
운영 형태
운영 환경에서는 PDF 요청을 다른 중요한 API 호출과 같이 다루세요. 요청 ID를 포함하고, 타임아웃을 설정하며, 재시도가 멱등적으로 동작하게 하고, 응답 메타데이터를 로깅합니다. 보관이 필요하다면 반환된 PDF는 자체 시스템에만 저장하세요. 표준 렌더링 응답 이후 gPdf 렌더링 경로는 상태를 보관하지 않습니다.
FAQ
- 이것은 HTML-PDF 변환 API인가요?
- 아니요. gPdf는 페이지, 요소, 좌표, 설정을 포함한 구조화된 JSON DocumentRequest를 받습니다. 브라우저를 실행하거나 임의의 HTML/CSS를 실행하지 않습니다.
- 먼저 어떤 엔드포인트를 호출해야 하나요?
- 레이아웃을 직접 제어하려면 POST /api/v1/pdf/render부터 시작하세요. 레이아웃이 안정적인 template_id 계약이 되어야 할 때 POST /api/v1/template-render로 옮기면 됩니다.
- API가 PDF를 직접 반환하나요?
- 예. 렌더링이 성공하면 application/pdf를 반환합니다. 오류는 API-XXX 코드와 req_id를 포함한 공통 JSON 오류 envelope를 사용합니다.
- 통합을 만들기 전에 테스트할 수 있나요?
- gPdf Playground에서 JSON 요청 데이터를 대화형으로 테스트한 다음, 같은 DocumentRequest 형태를 백엔드 클라이언트로 옮기면 됩니다.