【问题标题】:PDFKit Node.js measurement unitPDFKit Node.js 测量单位
【发布时间】:2019-01-03 12:39:02
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: javascript node.js printing pdfkit node-pdfkit


    【解决方案1】:

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

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

    ...

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

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


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


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


    示例:

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

    • 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 大小的页面的像素大小: p>

    • 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');

    You can find a table of paper sizes with corresponding dimensions in points. 此表适用于 PDFKit 以及大多数(如果没有的话) PDF 生成器。

    【讨论】:

    • 关于你的"if not any" 备注:jsPDF 默认使用毫米(mm)。
    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多