You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iText中是否支持PDF的比例缩放功能(如1:100,而非更改页面尺寸)

iText中是否支持PDF的比例缩放功能(如1:100,而非更改页面尺寸)

当然支持!你提到的这类绘图比例(比如1:100、1mm=100mm),本质是要定义PDF中用户单位和实际物理单位的转换关系,这可以通过操作PDF规范(ISO 32000)里的**测量字典(Measure Dictionary)**来实现,iText完全支持直接配置这些底层字典来满足需求。

你已经找对了实现方向,我来帮你梳理下这段代码的作用:

首先,我们需要创建一个测量字典,用来定义整体的缩放比例和单位转换规则:

// R Represents the scale ratio of the drawing as per ISO32000
measureDict.Put(new PdfName("R"), new PdfString("1 mm = 10 mm")); //Alternative scales "1 cm = 1m", "10 cm = 5m", "1 mm = 20 mm"

// Add the /TargetUnitConversion field
// This represents the conversion of the units in the scale above. Only the units
// not the magnitude or scale factor. ie 2.54/72/100 for cm to m or 25.4/72 for mm to mm.
measureDict.Put(new PdfName("TargetUnitConversion"), new PdfNumber(0.3527778));
  • R字段:按照ISO32000要求,用人类可读的字符串描述绘图比例,比如"1 mm = 10 mm"就对应1:10的缩放关系。
  • TargetUnitConversion:定义单位转换系数,它是PDF默认用户单位(1/72英寸)到目标物理单位的换算值,这里的数值对应你需要的单位转换逻辑。

接下来,我们需要定义两个数字格式字典(NumberFormat Dictionary),分别控制源单位和目标单位的显示精度与格式:

PdfDictionary dDict = new PdfDictionary();
dDict.Put(PdfName.Type, new PdfName("NumberFormat"));
dDict.Put(PdfName.U, new PdfString("m")); // Unit of measurement for /D    
dDict.Put(PdfName.C, new PdfNumber(1));
dDict.Put(PdfName.D, new PdfNumber(100));
dDict.Put(new PdfName("SS"), new PdfString("")); // Example value for /SS

PdfDictionary xDict = new PdfDictionary();
xDict.Put(PdfName.Type, new PdfName("NumberFormat"));
xDict.Put(PdfName.U, new PdfString("mm")); // Unit of measurement for /X
xDict.Put(PdfName.C, new PdfNumber(3.5277778)); // This represents 25.4/72 * 10 (scale factor)
xDict.Put(PdfName.D, new PdfNumber(100)); // Higher denominator for precision
xDict.Put(new PdfName("SS"), new PdfString("")); // Example value for /SS
  • dDict:对应目标单位的格式定义,这里设置单位为米("m"),C是转换系数,D是分母,用来控制数值显示的精度(分母越大,精度越高)。
  • xDict:对应源单位的格式定义,这里设置单位为毫米("mm"),C是结合了缩放因子的转换系数(比如25.4/72是毫米到PDF用户单位的基础换算,再乘以缩放因子10得到这里的值),同样用D控制精度。

最后记得把这些字典关联到对应的PDF页面或者文档根字典中,这样PDF阅读器就能识别并应用这些缩放比例规则了。

备注:内容来源于stack exchange,提问作者Edward Strain

火山引擎 最新活动