PDFKit Node.js度量单位

Hel*_*rld 1 javascript printing pdfkit node.js node-pdfkit

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

doc.text(20, 20, 'Message')
Run Code Online (Sandbox Code Playgroud)

什么是20(x)20(x)立场?是厘米,毫米,英寸吗?我可以把它改成任何熟悉的格式一样cmmminch

有任何想法吗?

Ric*_*ick 5

由于大多数PDF生成器(如果没有的话),PDFKit使用下的正式文件中也规定作为添加页面部分为PDF要点

layout属性可以是纵向(默认)或横向。size属性可以是在PDF点中指定[宽度,高度]的数组(每英寸72个),也可以是指定预定义大小的字符串。可以在此处看到预定义纸张尺寸的列表。默认为字母。

...

您可以通过两种方式设置页边距。第一种是通过将margin属性(单数)设置为一个数字,将该margin应用于所有边缘。另一种方法是将margins属性(复数)设置为具有top,bottom,left和right值的对象。默认值为所有边距均为1英寸(72点)

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


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


您不能更改PDFKit的度量单位。为了使用其他单位而不是点,您必须计算自己的单位并根据points乘以一个因子。由于您没有绑定到整数点,因此在指定点时也可以使用浮点数(例如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');
Run Code Online (Sandbox Code Playgroud)

您可以找到一张纸张尺寸表,其中包含以磅为单位的相应尺寸。该表适用于PDFKit和大多数(如果没有的话) PDF生成器。