PDF를 Base64로 변환하는 방법
- PDF를 상자에 놓거나 파일 선택 창에서 고르세요. 여러 PDF를 한 번에 넣어도 됩니다.
- 출력 형식에서 형식을 고르세요. 이 페이지는 대부분의 API가 원하는 일반 Base64로 시작합니다.
- 원시 MIME 이메일에 넣을 문자열일 때만 76자에서 줄 바꿈을 선택하세요. JSON과 HTML에는 꺼 두세요.
- 출력 복사를 누르세요. 큰 문서라면
yourfile.pdf.b64.txt를 저장하는 .txt로 저장을 쓰세요.
정보 줄에는 파일 이름, 크기, MIME 형식이 표시되고, 아래 카운터에는 인코딩 후 크기와 오버헤드가 나옵니다. PDF는 브라우저가 읽을 뿐 업로드되지 않으며, 페이지의 Content Security Policy가 Cloudflare 조회수 집계 외에는 네트워크 요청을 허용하지 않습니다.
Base64 PDF가 쓰이는 곳
JSON은 원시 바이트를 담을 수 없으므로, 요청 본문으로 문서를 받는 서비스는 Base64로 받습니다. 전자 서명 플랫폼, 세금계산서와 회계 시스템, OCR과 문서 파싱 서비스, PDF를 읽는 AI 모델이 모두 이 방식을 씁니다. 필드 이름은 API마다 다르지만, 형태는 보통 파일 이름, MIME 형식, Base64 문자열입니다.
PDF를 직접 읽는 AI 모델도 대개 같은 방식으로 파일을 받습니다. Base64 데이터와 미디어 형식 application/pdf를 별도 필드로, 또는 data URI 하나로 받습니다. 파일 크기와 페이지 수를 제한하는 경우가 많으니 긴 문서는 인코딩 전에 나누세요.
MIME 이메일의 첨부 파일은 한 줄이 최대 76자인 Base64입니다. 메시지를 직접 조립하거나 SMTP 라이브러리를 테스트한다면, 76자에서 줄 바꿈이 다음과 같은 파트의 본문을 정확히 만들어 줍니다.
Content-Type: application/pdf; name="invoice.pdf"
Content-Disposition: attachment; filename="invoice.pdf"
Content-Transfer-Encoding: base64
JVBERi0xLjcKJeLjz9MK...
JSON을 받는 메일 발송 API는 대신 줄 바꿈 없는 첨부 파일을 필드에 넣기를 원합니다. 자세한 내용은 이메일 속 Base64에 있고, EML 디코더는 원시 메시지에서 첨부 파일을 꺼내 줍니다.
여러 PDF를 인코딩하려면 한꺼번에 놓고 모두 JSON으로 복사를 누르세요. 문서마다 {name, type, size, data} 객체가 하나씩 든 배열을 받습니다. 테스트 데이터베이스 시드나 대량 가져오기에 유용합니다.
다운로드 링크가 필요하면 HTML <a download> 출력을 쓰세요. 누르면 PDF가 저장되는 링크가 만들어집니다.
<a href="data:application/pdf;base64,JVBERi0xLjcK..." download="invoice.pdf">invoice.pdf</a>
단일 파일 HTML 리포트에 편리합니다. download 없이 data URI로 링크하면 대개 실패합니다. Chrome은 페이지가 시작한 최상위 창의 data: URL 이동을 막으므로, 클릭해도 아무것도 열리지 않거나 빈 탭이 열립니다. Firefox는 PDF에 예외를 두기 때문에 링크가 한 브라우저에서는 되고 다른 브라우저에서는 안 될 수 있습니다.
작은 PDF를 Base64 상수로 저장해 두면, 옆에 픽스처 파일 없이도 단위 테스트에서 업로드나 파싱 경로를 실행할 수 있습니다.
PDF의 Base64 시작 부분
모든 PDF는 %PDF-와 버전 번호, 그리고 줄 바꿈으로 시작합니다. Base64에서는 이 헤더를 쉽게 알아볼 수 있습니다.
| 파일 헤더 | Base64 |
|---|---|
%PDF-1.4 + 줄 바꿈 | JVBERi0xLjQK |
%PDF-1.5 + 줄 바꿈 | JVBERi0xLjUK |
%PDF-1.7 + 줄 바꿈 | JVBERi0xLjcK |
%PDF-2.0 + 줄 바꿈 | JVBERi0yLjAK |
출력이 JVBERi0로 시작하지 않는다면, 고른 파일이 PDF가 아니거나 헤더 앞에 쓰레기 데이터가 있는 것입니다. PCFET0NUWVBF(<!DOCTYPE)나 PGh0bWw(<html)로 시작하는 문자열은 HTML이며, 다운로드 링크가 오류 페이지를 .pdf 이름으로 저장한 경우가 많습니다.
인코딩된 PDF의 크기
Base64 출력은 3바이트마다 4문자이고, 줄 바꿈은 76자마다 줄 바꿈 문자를 하나씩 더합니다.
| PDF 크기 | Base64 길이 | 76자에서 줄 바꿈 시 |
|---|---|---|
| 100 KB | 136,536자 | 138,332자 |
| 1 MB | 1,398,104자 | 1,416,500자 |
| 5 MB | 6,990,508자 | 7,082,488자 |
| 10 MB | 13,981,016자 | 14,164,976자 |
| 25 MB | 34,952,536자 | 35,412,437자 |
크기는 2진 단위입니다(1 MB = 1,048,576바이트). API의 요청 크기 제한은 파일 크기가 아니라 인코딩 후 크기와 비교하세요. API가 multipart 업로드나 사전 서명된 URL도 받는다면, 그 방식은 오버헤드가 없어 수십 메가바이트짜리 문서에 더 알맞습니다. 크기 계산기가 어떤 크기든 이 계산을 해 줍니다.
이 도구는 큰 PDF도 브라우저에서 인코딩하지만, 약 48 MB가 넘는 출력은 클립보드에 복사하지 않습니다. 그럴 때는 .txt로 저장을 쓰세요.
코드에서 PDF 인코딩하기
Python, JSON 본문 만들기:
import base64, json
from pathlib import Path
path = Path("invoice.pdf")
data = base64.b64encode(path.read_bytes()).decode("ascii")
body = json.dumps({"filename": path.name, "content": data})
Node.js:
import { readFile } from "node:fs/promises";
const b64 = (await readFile("invoice.pdf")).toString("base64");
const payload = JSON.stringify({ filename: "invoice.pdf", content: b64 });
GNU coreutils와 jq가 있는 셸(-w 0은 줄 바꿈을 끕니다):
base64 -w 0 invoice.pdf > invoice.b64
jq -n --rawfile content invoice.b64 '{filename: "invoice.pdf", content: $content}'
filename과 content 키는 자리 표시자이니 API 문서에 나온 이름을 쓰세요. 더 많은 옵션은 Python의 Base64와 Node.js의 Base64에 있습니다.
자주 생기는 문제
- API가 Base64가 올바르지 않다고 합니다. 대개 API가 Base64만 원하는데
data:application/pdf;base64,접두사가 들어갔거나,-w 0없는base64,openssl base64(64자에서 줄 바꿈), 76자에서 줄 바꿈에서 생긴 줄 바꿈이 남아 있는 경우입니다. URL-safe Base64를 거부하는 API도 있습니다. - 디코딩한 PDF가 손상되었거나 비어 있습니다. 로그 한 줄 길이 제한, 너무 짧은 데이터베이스 열, 스프레드시트 셀 같은 곳에서 문자열이 잘렸습니다. 길이를 위 표와 비교하세요. PDF의 마지막 바이트는
%%EOF이므로, 완전한 인코딩은 이 표시로 끝나는 데이터로 디코딩됩니다. - 내 컴퓨터에서는 PDF가 열리는데 받는 쪽은 빈 페이지를 봅니다. Base64는 문서를 바꾸지 않으므로 PDF 자체의 문제입니다. 글꼴 누락, 특이한 PDF 버전, 손상된 상호 참조 테이블 등이 원인입니다. Base64를 PDF로로 문자열을 디코딩해 결과를 열어 보세요.
- Base64는 암호화가 아닙니다. 문자열을 가진 사람은 누구나 문서를 디코딩할 수 있습니다. 기밀 PDF라면 전송 채널을 보호하거나 암호화하세요. 인코딩과 암호화의 차이를 참고하세요.
자주 묻는 질문
PDF를 JSON 요청으로 보내려면 어떻게 하나요?
파일을 일반 Base64로 인코딩하고, API 문서에 나온 파일 내용 필드에 문자열을 넣으세요. 대개 파일 이름과 application/pdf MIME 형식이 함께 들어갑니다. JSON 출력은 name, type, size, data가 든 객체를 바로 만들어 주므로 이를 고쳐 쓰면 됩니다.
비밀번호로 보호된 PDF도 Base64로 변환할 수 있나요?
네. Base64는 암호화된 상태 그대로 바이트를 인코딩합니다. 인코딩된 파일은 여전히 보호되어 있고, 디코딩한 사람도 열려면 비밀번호가 필요합니다.
Base64로 인코딩된 PDF는 어떻게 알아보나요?
%PDF-의 인코딩인 JVBERi0로 시작합니다. 그다음 문자가 버전을 알려 줍니다. 예를 들어 PDF 1.7은 JVBERi0xLjc입니다.
Base64 PDF 링크를 누르면 빈 탭이 열리는 이유는 무엇인가요?
Chrome은 페이지가 최상위 창을 data: URL로 이동시키는 것을 막고, 다른 브라우저도 이를 제한합니다. 파일을 여는 대신 저장하는 HTML <a download> 출력을 쓰거나, JavaScript로 Blob URL을 만드세요.
PDF를 Base64로 바꾸면 얼마나 커지나요?
파일 크기의 약 4/3입니다. 3 MB PDF는 약 4 MB의 텍스트가 됩니다. 출력 아래의 오버헤드 카운터가 정확한 값을 보여 주며, Base64를 PDF로로 되돌릴 수 있습니다.