把PDF塞进二维码,这事儿比想象中简单。不需要复杂的后端服务,直接在浏览器里就能跑通。
核心思路很直白:二维码本质是文本容器,PDF是文件。我们要做的,就是把PDF变成一段能被二维码装下的"地址"——可以是下载链接,也可以是Base64编码后的文件本身。
先搭个架子
HTML结构只需要三样东西:放二维码的容器、引入生成库、执行脚本。
<div id="qr-box"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script>
处理PDF的两种路子
如果PDF已经存在网上,直接拿URL喂给二维码生成器:
new QRCode(document.getElementById('qr-box'), {
text: "https://yourdomain.com/files/report.pdf",
width: 200,
height: 200,
colorDark: "#000",
colorLight: "#fff"
});
扫码后跳转下载,干净利落。

要是PDF还在本地、或者需要离线使用,就得把文件转成Base64字符串塞进去。这时候要注意——二维码有容量上限,大约3KB左右。超过这个体积,二维码会变得密密麻麻难以识别。大文件建议先压缩,或者改用网盘链接中转。
一个完整的本地实现
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PDF转二维码</title>
</head>
<body>
<input type="file" id="pdfInput" accept=".pdf">
<div id="output"></div>
<img src="/uploads/20251015/60.png?t=1945159713" alt="" class="img-fluid" />
<script src="qrcode.min.js"></script>
<script>
document.getElementById('pdfInput').addEventListener('change', function(e) {
const file = e.target.files[0];
const reader = new FileReader();
<img src="/uploads/20251015/30.png?t=1895295807" alt="" class="img-fluid" />
reader.onload = function(event) {
// 取Base64的前2000字符,保证二维码可读性
const shortData = event.target.result.slice(0, 2000);
document.getElementById('output').innerHTML = '';
new QRCode(document.getElementById('output'), {
text: shortData,
width: 256,
height: 256
});
};
reader.readAsDataURL(file);
});
</script>
</body>
</html>

几个坑
- 中文文件名容易乱码,上传前建议重命名成纯英文
- 手机扫码识别Base64二维码时,部分老旧机型可能不支持数据URI自动解析
- 打印出来的二维码留足边距,别贴着边缘裁切
这套方案的优势在于零部署成本,双击HTML文件就能跑。适合临时生成、小批量使用,或者内网环境不便接入外部服务的场景。如果需要批量处理、追踪扫描数据,再考虑上云也不迟。
立即登录