You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PDF中生成最小二维码?基于Form XObject的实现方案咨询

在PDF中生成最小体积二维码的实用方案

要做最小尺寸(体积)的二维码,核心是用矢量绘制+Form XObject复用,完全不需要依赖第三方图像库,直接用PDF原生指令就能实现,下面是具体步骤:

1. 定义可复用的黑方块Form XObject

Form XObject是PDF里的"可复用组件",先定义一个1×1单位的纯黑方块(单位可选pt,也可自行调整),后续所有黑块都能直接调用它:

% 定义名为/Square的Form XObject
/Square <<
    /Type /XObject
    /Subtype /Form
    /BBox [0 0 1 1] % 组件边界框,1×1大小
    /Resources << >>
    /Length 20
>> stream
0 0 1 1 re  % 绘制1×1的矩形路径
g           % 设置填充色为黑色
f           % 填充矩形
endstream

这段代码是告诉PDF:存在一个名为Square的组件,内容是1×1的黑方块,后续用/Square Do即可调用。

2. 在页面中定位并复用黑方块

在PDF的页面内容流里,用cm矩阵变换指令指定每个黑方块的位置,再调用Square组件:

% 示例:在(10,10)、(11,10)、(10,11)位置绘制黑方块
q                     % 保存当前绘图状态
1 0 0 1 10 10 cm      % 将坐标系平移到(10,10)
/Square Do            % 绘制黑方块
Q                     % 恢复绘图状态

q
1 0 0 1 11 10 cm
/Square Do
Q

q
1 0 0 1 10 11 cm
/Square Do
Q

cm指令前四个参数控制缩放/旋转(这里1 0 0 1代表不缩放旋转),最后两个是X、Y坐标,修改这两个值就能将黑方块定位到二维码对应位置。若需要更大的方块,把前两个1替换为目标尺寸即可,比如2 0 0 2 10 10 cm就是2×2的黑方块。

3. 结合二维码数据批量生成指令

先把二维码转换为N×N的二维矩阵(1代表黑块,0代表白块),遍历矩阵:

  • 遇到值为1的位置,生成上述q/cm/Do/Q指令;
  • 遇到0直接跳过,PDF默认背景为白色,无需绘制白块。

为什么这是最小体积的方案

  • 矢量绘制:无位图二进制数据,所有内容都是轻量的PDF指令,体积远小于嵌入位图二维码;
  • 组件复用:仅需定义一次黑方块,多次调用避免重复代码,进一步压缩PDF体积。

内容的提问来源于stack exchange,提问作者ebeg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:12:42