代码之家  ›  专栏  ›  技术社区  ›  Hello World

pdfkit node.js测量单位

  •  0
  • Hello World  · 技术社区  · 8 年前

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

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

    什么? 20(x) 20(x) 代表什么?是厘米、毫米、英寸吗?我能把它改成类似的格式吗 cm , mm inch ?

    有什么想法吗?

    1 回复  |  直到 8 年前
        1
  •  4
  •   Rick Gal Koren    8 年前

    作为大多数PDF生成器 (如果没有) PDFKit使用 points 如官方文件所述 Adding pages 截面为 PDF点 :

    布局属性可以是纵向(默认)或横向。大小属性可以是指定[宽度,高度]的数组 PDF点数(72/英寸) 或指定预定义大小的字符串。这里可以看到预定义的纸张大小列表。默认值为Letter。

    可以用两种方法设置页边距。第一种方法是将Margin属性(单数)设置为一个数字,该数字将该Margin应用于所有边。另一种方法是将Margins属性(复数)设置为具有上、下、左和右值的对象。 默认值为1英寸(72点) 各边的边距。

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


    自从 PDF 来源于 PostScript ,它内部也使用相同的图形模型,包括与PostScript相同的基本测量单位,即 points ( 72 points == 1 inch ) . 这个测量单位是 设备独立的使用方法和说明尺寸 .


    不能更改PDFKIT的测量单位。 为了使用其他单位而不是点,你必须自己计算单位和 按点乘以系数 . 既然你是 未绑定到整数点 ,你可以使用 指定点时浮动 也是(例如: 100.15 )。


    例子:

    如果你使用 A4 -调整页面大小(即 8.27 × 11.69 inches 210 × 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 -页面大小:

    • 72 DPI 595 x 842px
    • 96 DPI 794 x 1123px
    • 150 DPI 1240 x 1754px
    • 300 DPI 2480 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生成器。