PDFKit Node.js 测量单位

13

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

doc.text(20, 20, 'Message')
< p > 20(x)和20(x)代表什么?是厘米、毫米还是英寸?我能改成像cm、mm或者inch这样更熟悉的格式吗? < /p > < p > 有什么想法吗?< /p >
1个回答

27
作为大多数PDF生成器(如果不是所有的),PDFKit也使用,正如官方文档在添加页面部分中所述的PDF点一样:
引用: 布局属性可以是纵向(默认)或横向。尺寸属性可以是一个数组,指定[宽度、高度] 以PDF点(每英寸72个),或者是指定预定义尺寸的字符串。可以在此处查看预定义纸张大小列表。默认值为信纸。
... 您可以通过两种方式设置页面边距。第一种方法是将margin属性(单数)设置为数字,该数字适用于所有边缘。另一种方法是将margins属性(复数)设置为带有顶部、底部、左侧和右侧值的对象。默认值为1英寸(72点)的边距。 当修改生成的PDF时,这个单位不仅适用于指定布局尺寸,而且适用于任何类型的编号单位。(例如绘制文本、图像、矢量等)

由于PDF源自PostScript,因此它在内部也使用相同的图形模型,包括与PostScript相同的基本测量单位72个点== 1英寸。这个测量单位是设备无关的使用和说明尺寸的方式


你无法更改PDFKit的测量单位。如果要使用除点之外的其他单位,则必须自己计算单位并按照点数乘以因子。由于不限于整数点,因此在指定点时也可以使用小数(例如:100.15)


例子:

如果您使用一个A4纸张(尺寸为8.27 × 11.69英寸210 × 297毫米),其尺寸将被舍入为595 × 842点(简写为pt):

  • 1pt约为0.35毫米0.04厘米
  • 10pt约为3.53毫米0.35厘米
  • 100pt约为35.28毫米3.53厘米
  • 148.75pt(四分之一页宽)约为52.48毫米5.25厘米
  • 297.5pt(半页宽)约为104.95毫米10.50厘米

如果您需要像素,还必须根据特定的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生成器(如果不是所有的话)


1
关于您的“if not any”评论:jsPDF默认使用毫米(mm)。 - domsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接