使用方法
- 将 Base64 字符串,或以 data:application/pdf;base64, 开头的 Data URI 粘贴到输入框中。
- 确认文件被识别为 PDF,并在查看器中阅读内容。
- 下载 PDF,保存到你的设备上。
从接口响应中复制 Base64
生成发票、快递面单、报表或已签署合同的服务,经常把 PDF 放在 JSON 里返回,例如 {"filename": "label.pdf", "data": "JVBERi0..."}。只需复制字段名后面引号之间的文本,并注意以下几点:
- 转义的斜杠。有些 JSON 编码器(例如 PHP 的
json_encode)会把每个/写成\/。/本身就是 Base64 的普通字符,所以粘贴前要把\/替换为/,或者先解析 JSON 再复制字段值。 - 引号和逗号。不要复制两端的引号和末尾的逗号。
- 换行。Base64 中的空格和真正的换行(例如按 76 个字符分行的值)不影响解码,不必删除。原始 JSON 里字面上的
\n或\r\n则不同,它们是反斜杠字符,必须删掉。
在浏览器开发者工具中,从解析后的视图里复制字段值,就能避开以上所有转义问题。
从电子邮件中提取 PDF 附件
邮件附件以 Base64 形式保存在原始邮件中。打开邮件源代码(Gmail 中为“显示原始邮件”,Thunderbird 中为“消息源代码”,Apple Mail 中为“原始来源”),找到邮件头包含 Content-Type: application/pdf(或文件名为 .pdf 的 application/octet-stream)以及 Content-Transfer-Encoding: base64 的部分。复制这些邮件头下方空行之后的整段文本,直到下一个以 -- 开头的行为止,那一行是 MIME 分隔符。直接粘贴到这里即可,换行会被忽略。
在自己的网页应用中显示 Base64 PDF
如果前端收到 Base64 格式的 PDF 并需要显示,使用 Blob URL 比 Data URI 更可靠,因为有些浏览器拒绝在新标签页中打开 Data URI:
const bytes = Uint8Array.from(atob(base64), c => c.charCodeAt(0));
const blob = new Blob([bytes], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
window.open(url); // 也可以设为 <iframe> 的 src
文档不再需要时,调用 URL.revokeObjectURL(url) 释放内存。另外,atob 只接受标准 Base64 字母表,URL 安全格式(含 - 和 _)需要先转换。
常见问题
为什么我的 Base64 没有被识别为 PDF?
JVBERi0 开头,这是 %PDF- 的编码。如果开头是引号、字段名或其他文字,请先删掉。如果以 SlZCRVJ 开头,说明 PDF 被编码了两次:先用 Base64 解码解一次,再把结果粘贴到这里。其他情况下,数据可能是别的文件类型,可以用 Base64 转文件识别。PDF 能下载但打不开,是哪里出了问题?
最常见的原因是 Base64 被截断了。日志、控制台和数据库工具经常截断很长的值,而 PDF 用来定位各页内容的交叉引用表位于文件末尾附近,缺少结尾的 PDF 无法读取。请重新复制完整的值,最好把原始响应直接保存为文件。
手机上预览是空白的,文件坏了吗?
不一定。有些移动浏览器无法在页面内显示 PDF。下载文件后用 PDF 阅读器打开,就能确认文件是否完好。
可以解码有密码保护的 PDF 吗?
可以。解码会逐字节还原文件,加密也会原样保留。预览可能会要求输入密码,也可能显示为空白;下载后的文件在任何 PDF 阅读器中输入密码即可打开。
文档会被上传到别处吗?
不会。解码和预览都在浏览器中进行,合同、工资单、病历等机密 PDF 都只留在你的设备上。