Меню

Pdf генератор node js

Создание файлов PDF в Node.js с помощью PDFKit

Формат PDF — один из наиболее распространенных форматов документов для передачи информации. В динамических веб-приложениях вам может потребоваться экспортировать данные в документ, и PDF обычно является популярным вариантом. В этой статье мы обсудим, как сгенерировать файлы PDF в NodeJS с помощью пакета NPM pdfkit .

PDFKit — это библиотека для создания PDF- файлов на JavaScript для Node.js, которая обеспечивает простой способ создания многостраничных PDF-документов для печати.

Начало работы с PDFKit

Создадим каталог проекта и инициализируем проект Node с настройками по умолчанию:

Затем давайте выполним install pdfkit :

Чтобы использовать модуль в проекте, мы импортируем его через require() :

Создание PDF-документа с помощью PDFKit

Чтобы создать PDF-документ, нам также потребуется импортировать модуль fs (файловой системы). Мы передадим содержимое нашего PDF-файла в записываемый поток fs , чтобы сохранить его. Давайте посмотрим, как это сделать:

Сначала мы импортируем необходимые модули, после чего создаем экземпляр PDFDocument . Этот экземпляр является читаемым потоком. Мы направим этот поток в записываемый поток, чтобы сохранить файл.

Для этого мы используем функцию pipe() и сохраняем результат в нашем корневом каталоге в SampleDocument.pdf . После создания мы можем добавить к нему содержимое с помощью функции text .

Когда мы запускаем код, в корневой папке нашего проекта создается файл PDF с именем SampleDocument.pdf :

Примечание. Прежде чем пытаться перезаписать существующий файл PDF, он должен быть свободным. Т.е. все окна с этим файлом PDF должны быть закрыты, иначе программа выдаст ошибку.

Форматирование текста в PDF файле

Конечно, pdfkit позволяет нам делать гораздо больше, чем просто добавлять в документ неформатированный текст. Давайте посмотрим на некоторые функции, которые он предлагает.

Размещение текста

По умолчанию модуль pdfkit отслеживает, где текст должен быть добавлен в документ, по сути, печатает каждый вызов функции text() в новой строке.

Вы можете изменить место печати текста на текущей странице, добавив координаты x и y того места, где вы хотите разместить текст, в качестве аргументов функции text() .

Это полезно, потому что позволяет точно настроить расположение текста, тем более что документы PDF имеют универсальный вид независимо от машины / ОС, на которой они открываются. Это также позволит вам, например, печатать текст поверх другого текста:

Запуск этого кода даст нам:

Перенос текста и выравнивание

Модуль pdfkit автоматически обертывает строки так, чтобы они помещались между полями или в предоставленных width (при написании текста в Столбцах). Другими словами, параметр lineBreak установлен в true по умолчанию. Вы можете изменить его на false при вызове функции text() :

Новые страницы также добавляются автоматически по мере необходимости, т.е. как только контент, который вы хотите добавить, не помещается на текущей странице целиком. Однако вы также можете переключиться на следующую страницу перед заполнением предыдущей, просто выполнив:

Что касается выравнивания, в pdfkit нам доступны обычные параметры — left (по умолчанию) right , center и justify . Обратите внимание, что установка определенного выравнивания с lineBreak установленным как false не будет работать, даже если текст может уместиться в строку.

Точно так же параметр align устанавливается путем передачи в функцию text() объекта, содержащего пары ключ-значение. Давайте посмотрим на несколько примеров выравнивания:

Выполнение приведенного выше кода даст нам PDF-файл, который выглядит следующим образом:

Стилизация текста

Модуль pdfkit также обеспечивает опции, которые могут быть использованы для стилизации текста в PDF — документах. Мы рассмотрим некоторые из наиболее важных опций стилизации, полный список опций вы можете найти в руководстве.

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

Читайте также:  Схема подключения лампы контроля генератора

Очень важно отметить, что такие функции как fillColor() (и позже font() , fontSize() и т.д.) будут воздействовать все вызовы text() после этого вызова:

При запуске этого кода будет создан файл PDF со следующим содержанием:

Изменение стилей в середине абзаца немного сложнее, поскольку при объединении нескольких функций text() в цепочку по умолчанию добавляется новая строка после каждой. Мы можем избежать этого, установив для параметр lineBreak первого вызова text() в false :

Что даст нам желаемый результат:

Создание списков

Чтобы добавить список элементов в документ PDF, в экземпляре PDFDocument есть функция list() , которая принимает массив строковых элементов (или вложенные массивы строк) и отображает их в виде маркированного списка:

Шрифты

PDFKit поставляется с 14 стандартными шрифтами, которые можно использовать в документах PDF. Любой из этих шрифтов можно передать функции font() класса PDFDocument и связать с text() :

Вы также можете добавить дополнительные шрифты, передав путь к файлу шрифта в качестве аргумента функции font() , а также имя конкретного шрифта, который вы хотите, если в файле есть набор шрифтов. В качестве альтернативы вы можете дать новому шрифту имя, чтобы к нему можно было получить доступ по этому имени, а не по пути к файлу:

Вызовы font() могут быть связаны с другими функциями, как в примере c fillColor() .

Вы также можете установить размер шрифта с помощью функции fontSize() . Давайте посмотрим на несколько примеров:

Запуск этого даст нам следующий PDF-файл в качестве вывода:

Добавление изображений

Еще одна распространенная вещь, которую вы можете добавить в свои PDF-файлы, — это изображения. Вы можете вызвать функцию image() в экземпляре документа и передать путь или URI изображения, которое вы хотите включить.

Вы также можете установить такие параметры, как ширина, высота, горизонтальное и вертикальное выравнивание изображения, передав объект, содержащий пары ключ-значение, в качестве аргумента функции image() . По умолчанию изображения загружаются в исходном размере.

Если вы установите width и height — изображение будет растянуто, чтобы соответствовать указанным параметрам. Если один из них не указан, изображение масштабируется пропорционально указанному параметру:

Запуск этого кода даст нам:

Вы также можете масштабировать изображение, задав коэффициент scale . Кроме того, вы можете указать массив fit или cover , в котором изображение будет масштабировано, чтобы соответствовать предоставленному прямоугольнику или покрывать его, соответственно. Если вы предоставляете массив fit или cover , вы также можете установить горизонтальное выравнивание ( align ) и вертикальное выравнивание ( valign ):

Источник

Pdf генератор node js

A JavaScript PDF generation library for Node and the browser.

PDFKit is a PDF document generation library for Node and the browser that makes creating complex, multi-page, printable documents easy. The API embraces chainability, and includes both low level functions as well as abstractions for higher level functionality. The PDFKit API is designed to be simple, so generating complex documents is often as simple as a few function calls.

Check out some of the documentation and examples to see for yourself! You can also read the guide as a self-generated PDF with example output displayed inline. If you’d like to see how it was generated, check out the README in the docs folder.

You can also try out an interactive in-browser demo of PDFKit here.

Installation uses the npm package manager. Just type the following command after installing npm.

  • Vector graphics
    • HTML5 canvas-like API
    • Path operations
    • SVG path parser for easy path creation
    • Transformations
    • Linear and radial gradients
  • Text
    • Line wrapping
    • Text alignments
    • Bulleted lists
  • Font embedding
    • Supports TrueType (.ttf), OpenType (.otf), WOFF, WOFF2, TrueType Collections (.ttc), and Datafork TrueType (.dfont) fonts
    • Font subsetting
    • See fontkit for more details on advanced glyph layout support.
  • Image embedding
    • Supports JPEG and PNG files (including indexed PNGs, and PNGs with transparency)
  • Annotations
    • Links
    • Notes
    • Highlights
    • Underlines
    • etc.
  • AcroForms
  • Outlines
  • PDF security
    • Encryption
    • Access privileges (printing, copying, modifying, annotating, form filling, content accessibility, document assembly)
  • Accessibility support (marked content, logical structure, Tagged PDF, PDF/UA)
  • Patterns fills
  • Higher level APIs for creating tables and laying out content
  • More performance optimizations
  • Even more awesomeness, perhaps written by you! Please fork this repository and send me pull requests.
Читайте также:  Ремень генератора h4m без кондиционера

The PDF output from this example (with a few additions) shows the power of PDFKit — producing complex documents with a very small amount of code. For more, see the demo folder and the PDFKit programming guide.

There are three ways to use PDFKit in the browser:

  • Use Browserify. See demo source code and build script
  • Use webpack. See complete example.
  • Use prebuilt version. Distributed as pdfkit.standalone.js file in the releases or in the package js folder.

In addition to PDFKit, you’ll need somewhere to stream the output to. HTML5 has a Blob object which can be used to store binary data, and get URLs to this data in order to display PDF output inside an iframe, or upload to a server, etc. In order to get a Blob from the output of PDFKit, you can use the blob-stream module.

The following example uses Browserify or webpack to load PDFKit and blob-stream . See here and here for examples of prebuilt version usage.

You can see an interactive in-browser demo of PDFKit here.

Note that in order to Browserify a project using PDFKit, you need to install the brfs module with npm, which is used to load built-in font data into the package. It is listed as a devDependency in PDFKit’s package.json , so it isn’t installed by default for Node users. If you forget to install it, Browserify will print an error message.

For complete API documentation and more examples, see the PDFKit website.

Источник

Generating a PDF with Express & Node.JS

In this article you’ll find a fun little tutorial of how to create a PDF file using a web form, Express and PDFKit. To get started it’ll use the express generator and after completing it you’ll have a simple web form that generates a PDF file if the user clicks on the button Create PDF. I’ll also point you in the right direction if you want to deploy the app using now.

First install the express application generator:

Then use this to generate a basic Express app:

Now go into this folder and install the dependencies using yarn:

Next add the dependency PDFKit

You can now start your app, using:

Then go to http://localhost:3000 in your browser. You should see something like: “Welcome to Express”.

Next we’re going to add our HTML using the templating engine Pug (formerly known as Jade). Open the file views/index.pug and replace the existing code with the following:

We also want to add some styling using Bootstrap and a theme from Bootswatch. In views/layout.pug add the following link directly above the existing link to style.css:

Now if you restart your app and visit http://localhost:3000 you should see a nicely formatted HTML form. Next we’re going to add the route for creating PDF files. Create the file routes/pdf and add the following code:

Читайте также:  Что то скрипит в генераторе

Then open app.js and require the new pdf route file just below the existing routes and add it as a route:

Your PDF rendering Express application is now ready for use! Start it with:

I hope you enjoyed this tutorial and feel free to ask me any questions. You can find me on Twitter as @vnglst.

You can also deploy your own Form to PDF app using now by Zeit.co. It’s easy and takes only a few seconds. Instructions can be found here: https://zeit.co/now

Thanks to Samer Buna for reviewing this!

EdgeCoders

We write about the new and leading edge technologies with a focus on JavaScript

Источник

Pdf-Generator (html-pdf-generator on NPM)

A NodeJs plugin to generate PDF from HTML template using Puppeteer and Vue.js.

See postman collection for more example,

If you need more functionality in your HTML template you can add the VueJs mixin in the global window.mixins array to extend default functionality. See the file mixin.js for more example.

Table of contents

Installation

Usage Example

Initialize

Use process.env if you passed the environment variables using node command. I recommend use a .env file and the package dotenv.

libs property in the Options object pass to pdfGeneratorInstance function is optional, is a list of VueJs mixin modules o components to be injected into the template. Can be pass it a VueJs library url by default is use this https://cdn.jsdelivr.net/npm/vue See pdfMergerDelegator info in PDF Merger Delegator.

Generate PDF in memory

Generate HTML in memory

Different headers/footers

To use different headers and footers in the PDF pages generated. Have to pass the property customPagesHeaderFooter passing the array of string with the page where the header/footer must to be added.

The pages in the array can be number as it generated on the browser or name

  • first —> Document page #1.
  • penult —> Previous to last document page.
  • last —> Last document page.
  • 1-3 —> Rage of pages, starting from page 1 to page 3.
  • 2-penult —> Rage of pages, starting from page 2 to previous to last page.

For each page ranges in the array customPagesHeaderFooter in the template have to be a element with the id=’page-header-‘ or id=’page-footer-‘ is important that the element is hidden.

As VueJs remove the css style tag by default, the element v-style is include in the library. v-style let you include the css to the header/footer.

Components

VueJs component are valid.

All the components must to be in separated file and reference it on the libs property.

PDF Merger Delegator

The PDF delegator is a helper that satisfy the interface

  • getPdfTotalPages function to get the total pages of the generated pdf
  • merge function to merge all pages generated by the Different headers/footers

The delegator is implemented using a library that can manipulate pdf. Like pdf-lib or other.

Why a delegator? due to the limitation of using Puppeteer to generate pdf with different header or footer as an only file is necessary a third library to merge the pdf generated with different headers and footers. Too right now is not possible to get the total pages of the document with Puppeteer.

Documentation

Interfaces

The options param is an object with the properties to config puppeteer, set the printing margin of the PDF and setting the JavaScript files to be loaded automatically into the template. See .env file in the demo app:

Источник

Adblock
detector