首页 > 解决方案 > PDFKit Node.js 测量单位

问题描述

PDFKit (Node.js) 中使用的度量单位是什么?例如我们使用:

doc.text(20, 20, 'Message')

20(x)20(x)代表什么?是厘米、毫米还是英寸?我可以将其更改为任何熟悉的格式,例如cm,mminch吗?

有任何想法吗?

标签: javascriptnode.jsprintingpdfkitnode-pdfkit

解决方案


作为大多数 PDF 生成器(如果没有的话),PDFKit 也使用,如官方文档中的添加页面部分中所述,作为PDF 点

布局属性可以是纵向(默认)或横向。size 属性可以是指定 [width, height] 的数组,单位为 PDF points (72 per inch),也可以是指定预定义大小的字符串。可以在此处查看预定义的纸张尺寸列表。默认为字母。

...

您可以通过两种方式设置页边距。第一种是将边距属性(单数)设置为一个数字,它将边距应用于所有边缘。另一种方法是将边距属性(复数)设置为具有顶部、底部、左侧和右侧值的对象。默认值为所有边的 1 英寸(72 磅)边距。

该单位不仅适用于指定布局尺寸时,而且适用于任何类型的编号单位用于修改生成的 PDF 时。 (例如绘制文本、图像、矢量等)


由于PDF是从PostScript派生的,它内部也使用相同的图形模型,包括与 PostScript 相同的基本测量单位,即 ( 72 points == 1 inch)。此测量单位是独立于设备的使用和说明尺寸的方式


您不能更改 PDFKit 的测量单位。为了使用其他单位而不是点,您必须自己计算单位并根据点乘以一个因子。由于您不受整数点的约束,因此在指定点时也可以使用浮点数(例如:)100.15


例子:

如果您使用A4大小的页面(即8.27 × 11.69 inches210 × 297 mm),则其尺寸将四舍五入为595 × 842 pointspt简而言之):

  • 1pt~0.35mm, 或~0.04cm
  • 10pt~3.53mm, 或~0.35cm
  • 100pt~35.28mm, 或~3.53cm
  • 148.75pt(四分之一页宽)是~52.48mm~5.25cm
  • 297.5pt(半页宽)是~104.95mm~10.50cm

如果您需要像素,您也必须根据特定的DPI进行计算,因此A4尺寸页面的像素大小为:

  • 72 DPI595 x 842px
  • 96 DPI794 x 1123px
  • 150 DPI1240 x 1754px
  • 300 DPI2480 x 3508px

对于初学者,这是一个简单的脚本,列出了转换为您提到的点后的基本单位及其值:

function mmToPt (mm) {
  return mm * 2.83465;
}

function cmToPt (cm) {
  return cm * 28.3465;
}

function inchToPt (inch) {
  return inch * 72;
}

const units = [
  1,
  2,
  3,
  5,
  10,
  15,
  20,
  25,
  50,
  100,
  150,
  250,
  500,
  1000
];

function convert (unit) {
  let name;
  let converter;
  
  switch (unit) {
    case 'mm':
      name = 'millimeters';
      converter = mmToPt;
      break;
    
    case 'cm':
      name = 'centimeters';
      converter = cmToPt;
      break;
      
    case 'inch':
      name = 'inches';
      converter = inchToPt;
      break;
  }
  
  console.log(`Convert ${name} to points:`);
  
  units.forEach(u => {
    let converted = converter(u).toFixed(2);
    
    // get rid of unneeded .00 decimals
    if (+converted === parseInt(converted, 10)) {
      converted = +converted;
    }
    
    console.log(`${u}${unit} is ${converted}pt, so in doc.text(${converted}, ${converted}, 'Message')`);
  });
  
  console.log('--------------------------------------------');
}

convert('mm');
convert('cm');
convert('inch');

您可以找到一张带有相应尺寸的纸张尺寸表(以磅为单位)。此表适用于 PDFKit 和大多数(如果不是的话)PDF 生成器。


推荐阅读