Создание PDF-файлов с помощью JavaScript

268

Я пытаюсь преобразовать данные XML в файлы PDF с веб-страницы, и я надеялся, что смогу сделать это полностью в JavaScript. Мне нужно уметь рисовать текст, изображения и простые формы. Я хотел бы быть в состоянии сделать это полностью в браузере.

амеба
источник

Ответы:

446

Я только что написал библиотеку под названием jsPDF, которая генерирует PDF-файлы, используя только Javascript. Он еще очень молодой, и я скоро добавлю функции и исправления ошибок. Также есть несколько идей для обходных путей в браузерах, которые не поддерживают URI данных. Он лицензирован по либеральной лицензии MIT.

Я наткнулся на этот вопрос, прежде чем начал писать, и подумал, что вернусь и дам вам знать :)

Создание PDF-файлов в Javascript

Пример создания файла PDF "Hello World".

// Default export is a4 paper, portrait, using milimeters for units
var doc = new jsPDF()

doc.text('Hello world!', 10, 10)
doc.save('a4.pdf')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.debug.js"></script>

Джеймс Холл
источник
10
Я частично вдохновил jsPDF? Я узнал о jsPDF в тот день, когда вы объявили об этом. Выглядит великолепно до сих пор. Я закончил с Prawn, так как это просто лучшая библиотека для генерации PDF для моих требований. Я все еще хотел бы делать всю свою работу в браузере, так как я не уверен, что получу Ruby в системе, на которую я развертываю. Я очень внимательно слежу за jsPDF. Я хотел бы помочь, но мое время очень ограничено. Это может измениться в будущем.
амеба
7
Вы действительно вдохновляли это немного :), я смотрел в Интернете, чтобы увидеть, существует ли он уже, и видел, что некоторые люди сочтут это полезным. Дайте мне знать, если вы хотите помочь. Я @MrRio в твиттере.
Джеймс Холл
23
Это все еще очень живо. 0.9.0rc2 Дата выхода сегодня.
Джеймс Холл
87
@JamesHall, я хотел бы поблагодарить вас за всю работу, которую он должен выполнить, чтобы написать это, и за то, что MIT лицензировал его, чтобы сделать мир лучше, когда вы могли бы коммерциализировать его для своей собственной выгоды.
Чарльз Бернс
16
Могут ли downvoters предложить нам свои «лучшие» идеи или решения? Это отличное усилие.
Онур Йылдырым
138

Другая библиотека javascript, о которой стоит упомянуть, это pdfmake .

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

mg1075
источник
7
За этот ответ нужно голосовать гораздо чаще, pdfmake гораздо надежнее jspdf. Однако, только примечание, это обертка вокруг библиотеки PDFKit.
vittore
2
с другой стороны, jspdf не поддерживает utf-8, а pdfmake поддерживает utf-8 только для шрифтов по умолчанию.
Лев
"pdfmake.min.js - 0.1.22 - 9 часов назад" Он не умер, обновлено в этот день.
Зенбени
Из сравнения двух игровых площадок мне кажется, что jsPDF больше нацелен на «графическое» создание PDF, тогда как pdfmake больше нацелен на генерацию хорошо отформатированных «простых» документов, у него, похоже, гораздо больше возможностей для форматирования общего текста.
cslotty
Это IE дружелюбно?
Wildhammer
59

Я поддерживаю PDFKit , который также поддерживает pdfmake (уже упоминалось здесь). Он работает как в Node, так и в браузере, и поддерживает множество вещей, которых нет в других библиотеках:

  • Встраивание заданных шрифтов с поддержкой юникода.
  • Множество продвинутых текстовых макетов (столбцы, разрыв страницы, полный разрыв строки в юникоде, простой форматированный текст и т. Д.).
  • Работа над еще большим количеством шрифтов для продвинутой типографии (лигатуры OpenType / AAT, контекстная замена и т. Д.). Скоро: посмотрите ветку fontkit, если вам интересно.
  • Больше графики: градиенты и т. Д.
  • Создан с использованием современных инструментов, таких как browserify и streams. Используется как в браузере, так и в узле.

Посетите http://pdfkit.org/ для полного урока, чтобы увидеть, что может сделать PDFKit. А для примера того, какие виды документов могут быть созданы, посмотрите документы в формате PDF, сгенерированные из некоторых файлов Markdown с использованием самого PDFKit: http://pdfkit.org/docs/guide.pdf .

Вы также можете попробовать это в интерактивном режиме в браузере здесь: http://pdfkit.org/demo/browser.html .

devongovett
источник
Разве это не библиотека на стороне сервера? Я думаю, что обсуждение на стороне клиента библиотеки JS.
Ash Catchem
10
PDFKit работает как в Node, так и в браузере, как указано в ответе. Смотрите ссылку на демо-версию браузера.
Devongovett
Это сжимает изображения? Я работаю над веб-приложением, которое работает аналогично camscanner, и я ищу создание PDF с помощью javascript, чтобы использовать сжатие и многостраничный формат.
Тревор
@devongovett вы можете посмотреть на мой вопрос о вашей библиотеке?
Нинбит
8

Еще один интересный проект - texlive.js .

Это позволяет вам скомпилировать (La) TeX в PDF в браузере.

Kpym
источник
Пример "Привет, мир!" Выглядит хорошо, но для его завершения требуется около 30 секунд.
Сэм
2

Вы можете использовать этот бесплатный сервис, добавив ссылку, которая создает pdf из любого URL (например, http://www.phys.org ):

http://freehtmltopdf.com/?convert=http%3A%2F%2Fwww.phys.org&size=US_Letter&orientation=portrait&framesize=800&language=en

Боатенг
источник
1
Обновление: когда я пошел, чтобы проверить этот сервис freehtmltopdf.com, он сказал, что он больше не доступен. Похоже, это было удивительно!
Марк Дуйкер
проверил сейчас - работает. и это удивительно, я пользуюсь сервисом, где я плачу за каждый PDF, и мне нужно написать код, это такой способ решения проблемы.
Сергей Соб
-29

Даже если бы вы могли генерировать PDF в памяти в JavaScript, у вас все равно была бы проблема передачи этих данных пользователю. Для JavaScript трудно просто отправить файл пользователю.

Чтобы передать файл пользователю, вы должны выполнить отправку на сервер, чтобы браузер вызвал диалог сохранения.

С учетом сказанного, на самом деле не так уж и сложно создавать PDF-файлы. Просто прочитайте спецификацию.

Фрэнк Крюгер
источник
1
Это совсем не сложно, например, кажется, что он работает с Data-URI en.wikipedia.org/wiki/Data_URI_scheme (я делал это раньше, но не помню, использовал ли я Data-URI).
Бьорн
58
Вы можете легко создавать файлы в JavaScript в эти дни. (Я из будущего)
Дерек 功夫 會 功夫
5
Это действительно просто в наше время .. проверьте это, например: github.com/ChenWenBrian/FileSaver.js
Рой Риохас
9
@FrankKrueger, если вы удалите свой ответ, вы заработаете 6 баллов: P
Камил Келчевски
8
@FrankKreuger, «Иди почитай спецификации» - это почти никогда не правильный ответ на SO.
Кришнан Венкитесваран