PDF 轉 Base64

把 PDF 文件編碼為 Base64,用於介面請求、電子郵件或嵌入網頁。內建檢視器會顯示 PDF 內容,複製結果之前可以先確認檔案是否正確。

完全在瀏覽器中執行,不會上傳任何資料。

使用方法

  1. 將 PDF 拖到上傳區域,或點選選擇檔案(最大 100 MB)。
  2. 檢視預覽,確認是正確的文件。
  3. 用於介面請求時選擇純 Base64,要嵌入網頁則選擇 Data URI。
  4. 複製結果,或下載為 .txt 檔案。

通過 JSON 介面傳送 PDF

JSON 沒有二進位型別,所以接收文件的 REST 介面通常要求以 Base64 字串提交。電子簽名平臺、開票和電子發票系統、列印郵寄服務、OCR 引擎以及文件歸檔系統都常用這種方式接收 PDF,欄位名一般是 content、file 或 documentBase64,檔名放在另一個欄位中。有些服務也用同樣的方式返回 PDF,可以用 Base64 轉 PDF 還原為檔案。

除非介面文件另有說明,請提交不換行的純 Base64,很多介面會拒絕仍帶有 data:application/pdf;base64, 字首的值。還要留意請求大小限制:7.5 MB 的 PDF 編碼後約為 10 MB。

如何認出 Base64 格式的 PDF

PDF 檔案以字元 %PDF- 加版本號開頭,這幾個位元組編碼為 Base64 後,總是以 JVBERi0 開頭。如果在介面響應、資料庫欄位或日誌檔案中看到以 JVBER 開頭的長字串,基本可以確定它是 PDF。傳送請求前也可以這樣快速檢查:如果字串的開頭不是這幾個字元,可能編碼了錯誤的資料,或者重複編碼了兩次。

在 HTML 中嵌入 PDF

藉助 Data URI,可以把整個 PDF 放進 HTML 頁面,無需另外託管檔案:

<embed src="data:application/pdf;base64,JVBERi0..." type="application/pdf" width="100%" height="600">

<iframe src="data:application/pdf;base64,JVBERi0..." width="100%" height="600"></iframe>

這種方式適用於帶有內建 PDF 檢視器的桌面瀏覽器,但也有侷限。很多移動瀏覽器根本不會在頁面內顯示 PDF。Chrome 等瀏覽器還會阻止網頁把整個標籤頁跳轉到 data: 網址,所以指向 data:application/pdf 的連結或 window.open 呼叫可能只會開啟空白頁,甚至毫無反應。如果要用 JavaScript 在新標籤頁中開啟 PDF,請先把 Base64 轉成 Blob URL。超過幾 MB 的文件,通常還是使用普通的檔案連結更合適。

在程式碼中編碼 PDF

# Python:構造 JSON 請求體
import base64, json
from pathlib import Path

pdf_b64 = base64.b64encode(Path('invoice.pdf').read_bytes()).decode('ascii')
body = json.dumps({'filename': 'invoice.pdf', 'content': pdf_b64})

// 瀏覽器:file 來自 <input type="file">
const reader = new FileReader();
reader.onload = () => {
  const pdfBase64 = reader.result.split(',')[1]; // 去掉 Data URI 字首
};
reader.readAsDataURL(file);

常見問題

為什麼 PDF 的 Base64 字串以 JVBERi0 開頭?
這幾個字元是 %PDF- 的 Base64 編碼,而每個 PDF 檔案都以這個檔案頭開始。看到它們,就說明字串裡裝的是 PDF。
轉換時 PDF 會被上傳嗎?

不會。檔案的讀取、編碼和預覽都在瀏覽器本地完成,合同、發票等機密文件不會離開你的裝置。

編碼會修改或壓縮 PDF 嗎?

不會。Base64 字串解碼後得到完全相同的位元組,密碼保護、數字簽名、表單欄位和後設資料都會原樣保留。編碼後的文字比 PDF 大約多 33%,如果想減小體積,請先壓縮 PDF 再編碼。

需要開啟換行嗎?

只有在格式要求時才需要,例如手動構造 MIME 郵件時,附件每行不能超過 76 個字元。JSON 介面和 HTML 中的 Data URI 都需要連續不斷行的字串。

PDF 檔案最大可以多大?

工具支援最大 100 MB 的檔案。用於介面時,實際上限通常更低,請檢視介面的最大請求大小,並記得 Base64 會增加約三分之一的體積。輸出很長時在頁面上顯示可能較慢,處理大文件時請使用「下載」。