Skip to content

Base64 转 PDF / 文件 · PDF 转 Base64

Base64转PDF在线解码:纯 Base64、带 data:application/pdf 前缀的字符串、含 \/ 转义的 JSON 值甚至整段接口响应都能直接粘贴,按文件头识别真实类型,内嵌预览、一键下载;PDF 被截断、其实是图片或 16 进制时明确提示。也支持 PDF/文件转 Base64,本地处理不上传。

无追踪 浏览器中运行 免费
解码和编码全部在浏览器本地完成,Base64 和文件都不会上传。

读取方式:

这段 Base64 是什么文件?看开头就知道

每种文件都以固定的「魔数」字节开头,所以它的 Base64 也以固定的字符开头。下表的前缀由本工具同一个引擎根据真实文件头现场算出。

Base64 开头 文件类型 魔数(16 进制)
JVBERi0 PDF 25 50 44 46 2D
iVBORw0KGgoAAAANSUhEU PNG 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
/9j/ JPEG FF D8 FF
R0lGOD GIF 47 49 46 38
UEsDB ZIP / DOCX / XLSX / PPTX 50 4B 03 04
0M8R4KGxGu Office 97–2003 (DOC/XLS/PPT) D0 CF 11 E0 A1 B1 1A E1
H4sI Gzip 1F 8B 08
UklGR RIFF (WebP / WAV / AVI) 52 49 46 46
SUQz MP3 (ID3) 49 44 33
e1xydG RTF 7B 5C 72 74 66
行为已对照 RFC 4648、RFC 2045、RFC 2397,以及 PDF、PNG、ZIP、Office 的文件签名核对。 — Go Tools 工程团队 · 2026年9月30日

由开发 Go Tools 编码类工具的工程师撰写并审核。本页引用的每个长度、前缀和示例都由页面自身的引擎算出,并由自动化测试逐项核对。

Base64转PDF速查

JVBERi0 开头的 Base64 是什么文件?

JVBERi0 = PDF 是 PDF。所有 PDF 都以 `%PDF-` 这几个字节开头,编码成 Base64 就是 `JVBERi0`。同理,`iVBORw0KGgo` 开头是 PNG,`/9j/` 是 JPEG,`UEsDB` 是 ZIP(DOCX、XLSX 也是 ZIP 格式)。

Base64 比原文件大多少?

+33.3% 每 3 个字节变成 4 个字符,大约多出 33.3%:1 MB(1,048,576 字节)的 PDF 编码后是 1,398,104 个字符。如果像邮件附件那样每 76 个字符换一次行,是 1,434,896 个字符,多出约 36.8%。

什么是 Base64 编码的 PDF?

Base64 用 64 个安全的文本字符(A–Z、a–z、0–9、+、/)加上填充符 = 来表示任意字节,每 3 个字节写成 4 个字符。这样,PDF 这类二进制文件就能放进只能传文本的地方:JSON 字段、XML 节点、邮件正文、数据库的文本列。Base64转PDF 就是把这一步倒过来:把字符还原成字节,按 .pdf 保存。麻烦在于,实际拿到的 Base64 很少是干净的——带 data: 前缀、带 JSON 转义、带换行,或者用的是另一套字母表,不少转换工具会默默生成一个打不开的文件。

%PDF-1.4          → bytes 25 50 44 46 2D 31 2E 34
JVBERi0xLjQ=      → the same bytes in Base64
data:application/pdf;base64,JVBERi0xLjQ=   → data URI form

功能特点

拿到什么就粘什么

data URI 前缀、\/ 与 \n 转义、引号、MIME 换行、URL 安全的 - _、URL 里复制来的 %2B %2F、PEM 头尾、缺失的 = 填充都能自动处理,而且每一步都写在输入框下方。

整段 JSON 响应直接解

把 {"code":0,"data":{"file":"JVBERi0…"}} 原样粘进来,自动取最像 Base64 的字段并显示它的路径(如 data.file),不用再手动把字符串抠出来。

按文件头识别真实类型

PDF、PNG、JPEG、GIF、WebP、DOCX、XLSX、PPTX、ZIP、GZIP、MP3、MP4 等 50 多种格式按开头的魔数识别。前缀写错了也没关系,下载时用的是真实扩展名。

告诉你为什么打不开

PDF 缺 %%EOF(复制不全或被字段长度截断)、Base64 被编码了两次、把 16 进制当成 Base64、数据是 gzip 压缩过的、PDF 已加密——这些情况都会单独提示。

内嵌预览

PDF 用浏览器自带阅读器打开,图片和 SVG 直接显示,文本和 JSON 以文本显示。HTML 只显示源码、不渲染,因为渲染出来的脚本会在本站页面里运行。

PDF / 任意文件转 Base64

拖入最大 50 MB 的文件,输出纯 Base64 或 data URI,可选 URL 安全或每 76 字符换行,同时给出准确的体积膨胀比例。

Python、Java、JavaScript 等语言的 Base64 转 PDF 写法

Python

base64.b64decode

open('out.pdf', 'wb').write(base64.b64decode(s))。有 - 和 _ 时用 urlsafe_b64decode;b64decode 默认会丢弃换行等非法字符,传 validate=True 才会报错。

Java

java.util.Base64

Files.write(Path.of("out.pdf"), Base64.getMimeDecoder().decode(s))。getDecoder() 不接受换行;getUrlDecoder() 用于 - 和 _。

Node.js

Buffer

fs.writeFileSync('out.pdf', Buffer.from(s, 'base64'))。Buffer 两套字母表都接受、会忽略空白,但遇到其他非法字符也只是静默跳过、不报错,所以最好检查结果是否以 %PDF- 开头。

浏览器 JavaScript

atob / Uint8Array.fromBase64

先转成 Uint8Array 再创建 Blob。Uint8Array.fromBase64() 是较新的内置方法,使用前确认目标浏览器是否支持。

PHP

base64_decode

file_put_contents('out.pdf', base64_decode($s, true))。第二个参数传 true 开启严格模式,否则非法字符会被静默丢弃。

C#

Convert.FromBase64String

File.WriteAllBytes("out.pdf", Convert.FromBase64String(s))。允许空白字符,不接受 - 和 _。

命令行

base64 -d / certutil

macOS 和 Linux:base64 -d < in.txt > out.pdf。Windows:certutil -decode in.txt out.pdf。

Base64 转 PDF 示例

PDF 的纯 Base64

JVBERi0xLjQKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4K…
PDF · 版本 1.4 · 保存为 file.pdf

以 JVBERi0 开头,也就是 %PDF-。无需清理,直接解码。

从 JSON 响应里复制出来的字符串

"data:application\/pdf;base64,JVBERi0xLjQK…"
读取方式:去掉了两侧引号 → 还原了 JSON 转义 → 去掉了 data URI 前缀(application/pdf)

PHP 的 json_encode 以及部分 Java 序列化库会把 / 写成 \/。粘进不处理转义的解码器,反斜杠就是非法字符。

整段接口响应

{"code":0,"data":{"name":"invoice.pdf","file":"JVBERi0xLjQK…"}}
读取方式:从 JSON 中取出字段 data.file

不用手动截取字符串,工具会取最像 Base64 的字段,并写明取的是哪个字段。

声明是 PDF,实际是 PNG

data:application/pdf;base64,iVBORw0KGgoAAAANSUhEUgAA…
提示:data URI 声明为 application/pdf,但内容是 PNG,已按 file.png 保存

很多工具会照前缀写出一个任何阅读器都打不开的 .pdf。这里以文件头为准,不以声明为准。

把 16 进制当成了 Base64

255044462d312e370a…
提示:这看起来是 16 进制——按 16 进制读是一个 PDF。[按 16 进制解码]

16 进制的字符全都是合法的 Base64 字符,所以按 Base64 解码不会报错,只会默默得到一堆乱码。25 50 44 46 正是 %PDF。

Base64 转 PDF 怎么用

  1. 1

    原样粘贴 Base64

    纯 Base64、data:application/pdf;base64,…、从 JSON 里复制出来带 \/ 转义的字符串,或者整段接口响应都行。字符串特别长时,用「打开 .txt 文件」比粘贴更快。

  2. 2

    看一眼「读取方式」

    输入框下方会列出每一步清理:去掉了前缀、还原了转义、补了填充、从 JSON 的哪个字段取的值。输入有问题时,报错会指出具体是哪个字符、在第几位。

  3. 3

    核对文件类型和提示

    徽标显示的是按文件头(魔数)识别出的真实类型。不是 PDF、data URI 声明的类型与内容不符、PDF 末尾缺 %%EOF(被截断)时,都会出现黄色提示并说明原因。

  4. 4

    预览并下载

    PDF 用浏览器自带的阅读器内嵌显示,图片和文本直接显示。需要的话改一下文件名,点「下载」即可。要把文件转成 Base64,切到「PDF / 文件 → Base64」页签拖入文件。

Base64 转 PDF 打不开?常见错误

把 data URI 前缀一起解码

data:application/pdf;base64, 不是 Base64 的一部分。不去掉它,严格的解码器会报错(: 和 ; 是非法字符),宽松的解码器则会把开头几个字节解错,文件不再以 %PDF- 开头。

✗ 错误
base64.b64decode(value)  # value = 'data:application/pdf;base64,JVBERi0…'
✓ 正确
b64 = value.split(',', 1)[1] if value.startswith('data:') else value
pdf = base64.b64decode(b64)

把解码后的字节当文本写入

PDF 是二进制文件。把解码结果转成字符串再按文本编码写盘,非法字节会被替换、换行符会被改写,交叉引用表随之损坏,文件就打不开了。

✗ 错误
fs.writeFileSync('out.pdf', Buffer.from(b64, 'base64').toString())
✓ 正确
fs.writeFileSync('out.pdf', Buffer.from(b64, 'base64'))

用严格解码器解带换行的 Base64

Java 的 Base64.getDecoder() 遇到换行会报错,而邮件里、Linux base64 命令输出的 Base64 每 76 个字符换一次行。改用 MIME 解码器,或先去掉空白。

✗ 错误
byte[] pdf = Base64.getDecoder().decode(wrapped);  // IllegalArgumentException
✓ 正确
byte[] pdf = Base64.getMimeDecoder().decode(wrapped);

用标准解码器解 URL 安全的 Base64

JWT 和很多 URL 参数用 -、_ 代替 +、/,并省略 = 填充。标准解码器要么拒绝,要么解出错误的字节。

✗ 错误
base64.b64decode(token_part)  # contains - and _
✓ 正确
base64.urlsafe_b64decode(token_part + '=' * (-len(token_part) % 4))

把 atob() 的结果直接当文本用

浏览器里的 atob 返回的是「二进制字符串」,一个字符对应一个字节。直接传给 new Blob([str]) 会按 UTF-8 编码,大于 127 的每个字节都变成两个字节。要先转成 Uint8Array。

✗ 错误
new Blob([atob(b64)], { type: 'application/pdf' })
✓ 正确
const bytes = Uint8Array.from(atob(b64), c => c.charCodeAt(0));
new Blob([bytes], { type: 'application/pdf' })

字符串被截断

PDF 以 %%EOF 结尾。Base64 被数据库字段长度、日志单行长度或复制不全截断后,照样能解码,但阅读器会报错或缺页。拿它的长度和发送方给出的长度对一下。

✗ 错误
SELECT LENGTH(pdf_b64) FROM docs;  -- 65535: suspiciously round
✓ 正确
ALTER TABLE docs MODIFY pdf_b64 LONGTEXT;  -- or store the bytes in a BLOB

什么时候需要 Base64 转 PDF

接口把 PDF 以 Base64 返回
电子发票、电子签章、快递面单这类接口常把文件放在 JSON 里返回。先把响应粘到这里看看文件对不对,再去写保存文件的代码。
排查 Base64 转 PDF 后打不开
代码保存出来的 PDF 空白或报损坏时,把同一段 Base64 粘到这里:是被截断、被编码了两次、根本不是 PDF,还是完全正常——正常就说明问题出在你写文件的那段代码。
在 JSON 请求里上传文件
很多上传接口要求 {"filename": …, "content": "<base64>"} 这种格式。在这里把文件转成 Base64,拼成 Postman 或 cURL 的测试请求。
把文件嵌进 HTML、CSS 或邮件
生成 data URI,用于内嵌的 PDF 链接、字体或小图片;或者生成每 76 字符换行的 Base64,放进 MIME 邮件正文。
从日志和数据库里取回附件
存在文本列里、打印在日志里的文件可以直接还原出来——如果提示缺 %%EOF,说明字段或日志行太短,把内容截断了。

Base64 文件编码原理

为什么 Base64 会大 33%
每个字符承载 6 位,所以 3 个字节(24 位)要用 4 个字符表示,带填充时长度是 4 × ⌈n ÷ 3⌉:100 KB(102,400 字节)编码后是 136,536 个字符。MIME 格式每 76 个字符加一个 CRLF 换行,1 MB 就从 1,398,104 个字符变成 1,434,896 个。
标准字母表与 URL 安全字母表
RFC 4648 定义了两套字母表,只有最后两个字符不同:标准版是 + /(第 4 节),URL 与文件名安全版是 - _(第 5 节)。URL 安全的 Base64 通常省略 = 填充。同一个字符串里两套混用,说明它被改过或者是拼接出来的。
填充与不可能的长度
= 填充让长度凑成 4 的倍数。没有填充时,长度除以 4 余 2 或余 3 都能补回来;余 1 则任何合法的 Base64 都不可能出现——说明复制时丢了或多了一个字符。= 出现在中间,通常是两段 Base64 被拼在了一起。
文件类型由魔数决定
文件在开头几个字节里声明自己的格式:PDF 是 %PDF-,PNG 是 89 50 4E 47,DOCX、XLSX 这类基于 ZIP 的格式是 50 4B 03 04。这些字节决定了 Base64 的前几个字符,所以不解码也能看出类型——见工具里的对照表。
怎样判断 PDF 被截断
PDF 以 %%EOF 结尾。如果最后 1,024 个字节里找不到它,文件几乎可以肯定被截短了。PDF 头允许出现在前 1,024 个字节内的任意位置,大多数阅读器仍能打开这种文件,所以这里只提示、不拒绝。

用 Base64 传文件的建议

文件名和 MIME 类型随数据一起传
Base64 本身不带文件名和类型。把它们放在旁边({"filename": "invoice.pdf", "mime": "application/pdf", "content": "…"}),或者直接用 data URI,接收方就不必去猜。
接收端先校验魔数
保存之前检查解码结果是否以 %PDF- 开头。一行代码就能拦住取错字段、重复编码、把错误页面当文件编码这几类问题。
大文件改用 multipart 或下载链接
Base64 让体积多出三分之一,而且整串都要放在内存里。文件超过几 MB 时,multipart/form-data 或预签名下载链接对两端都更轻。
数据库里存字节,不存 Base64
BLOB/bytea 列比 Base64 文本小三分之一,也不会像 VARCHAR 那样被静默截断。只在接口边界上做 Base64 编码。

Base64 转 PDF 常见问题

Base64 怎么转 PDF?
把 Base64 粘到本页输入框里,会立即解码,PDF 直接显示在预览区,点「下载」就能保存为 .pdf。data:application/pdf;base64, 前缀、引号、换行和 JSON 转义都不用手动删,会自动处理。
Base64 转成 PDF 后打不开是什么原因?
常见原因有五个:把 data: 前缀一起解码了;解码后的字节按文本而不是二进制写入;字符串被截断(末尾没有 %%EOF);Base64 被编码了两次;或者它根本不是 PDF,比如是 PNG 图片或一段 JSON 报错信息。把同一段字符串粘到这里,每种情况都会给出对应提示。
文件会上传到服务器吗?
不会。解码、类型识别、预览和编码全部由浏览器里的 JavaScript 完成,粘贴的内容和拖入的文件都不会发送到任何地方,发票、合同、证件这类文件也可以放心处理。
怎么看出一段 Base64 是什么文件?
看开头:JVBERi0 是 PDF,iVBORw0KGgo 是 PNG,/9j/ 是 JPEG,R0lGOD 是 GIF,UEsDB 是 ZIP(DOCX、XLSX、PPTX 都是 ZIP),H4sI 是 gzip。本工具会读取解码后的魔数显示类型,并按对应扩展名保存。
Base64 转文件:能转 Word、Excel、图片或压缩包吗?
能。任何类型的文件都可以解码,扩展名由内容决定。DOCX、XLSX、PPTX 能从 ZIP 容器里分辨出来,老版的 DOC、XLS 识别为 Office 97–2003 格式。图片、音频和视频可以预览,其余类型直接下载。
PDF 怎么转 Base64?
切到「PDF / 文件 → Base64」页签,把 PDF 拖进去。可以选纯 Base64 或 data URI,还可以勾选 URL 安全或每 76 字符换行,然后复制,或下载为 .txt 文件。
Base64 和 data URI 有什么区别?
data URI 是在 Base64 前面加上声明类型的头:data:application/pdf;base64,JVBERi0…,浏览器可以把它直接当链接或 src 打开。接口一般只要逗号后面的 Base64 部分。
为什么提示「这不是 PDF」?
因为解码出来的字节不以 %PDF- 开头,显示的类型就是这些字节的真实格式。常见的意外有:扫描件其实是 PNG 或 JPEG、是 DOCX、是装了几个 PDF 的 ZIP,或者对方把一段 JSON / HTML 报错信息编码成了 Base64 发过来。
「末尾没有 %%EOF」是什么意思?
每个 PDF 都以 %%EOF 标记结尾。缺了它,说明 Base64 几乎肯定被截断了:只复制了一部分、被数据库字段(例如 MySQL 的 TEXT,最多 65,535 字节)截短,或者被日志单行长度限制切断。请重新拿到完整的字符串,解码无法补回丢失的数据。
「又解码了一次」是什么意思?
解码出来的内容本身还是一段 Base64 文本。这通常是你的代码编码了一次,框架或 HTTP 客户端又编码了一次。只有内层解出来是可识别的文件时,工具才会自动再解一层,普通文本不会被误拆。
有大小限制吗?
粘贴的文本最多 100 MB,编码方向的文件最多 50 MB。Base64 很长时,用「打开 .txt 文件」比粘贴快。文本预览只显示前 100,000 个字符,下载的文件始终是完整的。
手机上 PDF 预览为什么是空白的?
手机浏览器对内嵌 PDF 的支持不一致,有的只显示第一页,有的什么都不显示。点「在新标签页打开」或「下载」即可,文件本身没有问题。

ASCII 码表与在线转换器

编码和格式化

完整 ASCII 码表:128 个字符的十进制、十六进制、八进制、二进制对照,支持字符转 ASCII 码、ASCII 码转字符双向转换。控制字符附各语言转义写法与终端 ^M 记法,并说明你会在哪儿真的遇到它。浏览器本地运行,不上传。

条形码生成器 — 免费在线生成条码

编码和格式化

在线免费生成 EAN-13、UPC-A、Code 128、Code 39 等 15 种条形码,导出无损 SVG 或高清 PNG。输入 12 位自动补校验位;末位写错会直接告诉你应该是几,并一键改好。支持批量生成打包下载。

Base64 解码与编码工具

编码和格式化

免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。

Base64 转图片转换工具

编码和格式化

在浏览器中把 Base64 字符串或 data URI 解码还原为图片。预览、读取尺寸与 MIME,再下载为 PNG、JPG、GIF、SVG。无需上传。

CSV 转 JSON 转换器

编码和格式化

在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。

编码转换与中文乱码恢复

编码和格式化

粘贴乱码即可自动还原原文。工具枚举 UTF-8、GBK、Big5、Shift_JIS、EUC-KR 等编码组合并按可信度排序,标出哪一条经过往返校验、能逐字复现。同时提供各编码下的字节对照与 hex 反解。免费在线,全程在浏览器内完成,内容不上传。