Единица измерения PDFKit Node.js

Какая единица измерения используется в PDFKit (Node.js)? Например, мы используем:

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

Что означают 20(x) и 20(x)? Это сантиметр, миллиметр, дюйм? Могу ли я изменить его на любой знакомый формат, например cm, mm или inch?

Любые идеи?


person Hello World    schedule 26.07.2018    source источник


Ответы (1)


Как и большинство генераторов PDF (если не все), PDFKit использует точек, как указано в официальной документации в разделе Добавление страниц как PDF Points:

Свойство макета может быть книжным (по умолчанию) или альбомным. Свойство размера может быть либо массивом, указывающим [ширину, высоту] в пунктах PDF (72 на дюйм), либо строкой, указывающей предопределенный размер. Список предопределенных размеров бумаги можно увидеть здесь. По умолчанию буква.

...

Вы можете установить поля страницы двумя способами. Первый заключается в установке свойства поля (в единственном числе) на число, которое применяет это поле ко всем краям. Другой способ — установить свойство полей (во множественном числе) для объекта со значениями сверху, снизу, слева и справа. По умолчанию установлено поле шириной 1 дюйм (72 пункта) со всех сторон.

Эта единица применима не только при указании размеров макета, но и при использовании любого типа пронумерованной единицы для изменения сгенерированного PDF-файла. (например, текст рисунка, изображения, векторы и т. д. .)


Поскольку PDF является производным от PostScript, он также использует внутри ту же графическую модель, включая ту же базовую единицу измерения, что и PostScript, то есть баллы (72 points == 1 inch). Эта единица измерения представляет собой независимый от устройства способ использования и указания размеров.


Вы не можете изменить единицу измерения PDFKit. Чтобы использовать другие единицы измерения, а не баллы, вы должны сами рассчитать единицу и умножить на коэффициент в соответствии с баллами. Поскольку вы не привязаны к целочисленным точкам, вы также можете использовать числа с плавающей запятой при указании точек (например, 100.15).


Пример:

Если вы используете страницу размером A4 (то есть 8.27 × 11.69 inches или 210 × 297 mm), ее размеры округляются до 595 × 842 points (сокращенно pt):

  • 1pt is ~0.35mm, or ~0.04cm
  • 10pt is ~3.53mm, or ~0.35cm
  • 100pt is ~35.28mm, or ~3.53cm
  • 148.75pt (ширина четверти страницы) равно ~52.48mm или ~5.25cm
  • 297.5pt (половина ширины страницы) равно ~104.95mm или ~10.50cm

Если вам нужны пиксели, вы также должны основывать свои расчеты на определенном DPI, поэтому размер в пикселях страницы формата A4 с:

  • 72 DPI is 595 x 842px
  • 96 DPI is 794 x 1123px
  • 150 DPI is 1240 x 1754px
  • 300 DPI is 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');

Вы можете найти таблицу размеров бумаги с соответствующими размерами в пунктах. Эта таблица применима к PDFKit и к большинству (если не к любому) генераторов PDF.

person Rick    schedule 31.07.2018
comment
Что касается вашего если не какого-либо замечания: jsPDF по умолчанию использует миллиметры (мм). - person domsson; 18.02.2021