Створення 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 в той день, коли ви оголосили про це. Поки що виглядає чудово. Я закінчила роботу з креветкою, оскільки це легко найкраща бібліотека поколінь PDF для моїх потреб. Я все одно хотів би виконати всю свою роботу в браузері, оскільки я не позитивний, я отримаю Рубі в системі, в яку я розгортаюсь. Я дуже уважно спостерігаю за jsPDF. Я хотів би допомогти, але мій час дуже обмежений. Це може змінитися в майбутньому.
амеба

7
Ви дещо надихнули це :), я озирався в Інтернеті, щоб побачити, чи він уже існує, і побачив, що деякі люди вважають його корисним. Повідомте мене, якщо ви хочете допомогти. Я @MrRio на Twitter.
Джеймс Холл

23
Це ще дуже сильно живе. 0.9.0rc2 Випущено сьогодні.
Джеймс Холл

87
@JamesHall, я хотів би подякувати вам за всю роботу, яку потрібно зробити, щоб написати це, і за ліцензування MIT, щоб зробити світ кращим місцем, коли ви могли комерціалізувати його для власних вигод.
Чарльз Бернс

16
Чи можуть судноводці запропонувати нам свої «кращі» ідеї чи рішення? Це відмінне зусилля.
Onur Yıldırım

138

Ще одна бібліотека javascript, яку варто згадати, - pdfmake .

Підтримка веб-переглядача не настільки сильна, як jsPDF, і, здається, не існує варіантів для форм, але параметри форматування тексту є більш досконалими, ніж параметри, доступні зараз у jsPDF.


7
Цю відповідь слід прихиляти набагато більше, pdfmake настільки надійніший, ніж jspdf. Однак лише бічна примітка, вона обертається навколо бібліотеки PDFKit.
vittore

2
З іншого боку, у jspdf немає підтримки utf-8, а у pdfmake є підтримка utf-8 лише для шрифтів за замовчуванням.
Лев

"pdfmake.min.js - 0.1.22 - 9 годин тому" Він не мертвий, оновлено в цей день.
zenbeni

Якщо порівнювати два майданчики, мені здається, що jsPDF більше орієнтований на "графічне" створення PDF, тоді як pdfmake орієнтований більше на створення добре відформатованих "простих" документів, мабуть, є набагато більше варіантів для загального форматування тексту.
cslotty

Це IE дружнє?
Wildhammer

59

Я підтримую PDFKit , який також надає повноваження pdfmake (вже згадувалося тут). Він працює як у вузлі, так і в браузері, і підтримує купу речей, які інші бібліотеки не:

  • Вбудовування підзаданих шрифтів із підтримкою unicode.
  • Багато вдосконалених матеріалів макета тексту (стовпці, розбиття сторінок, повне розбиття рядків унікоду, основний текст із багатою формою тощо).
  • Робота над ще шрифтом для розширеної типографії (OpenType / AAT-лігатури, контекстна підміна тощо). Незабаром: якщо вам цікаво, перегляньте відділення шрифту.
  • Більше графічних матеріалів: градієнти тощо.
  • Створений за допомогою сучасних інструментів, таких як перегляд веб-сторінок та потоки. Використовується як у браузері, так і у вузлі.

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

Ви також можете спробувати його інтерактивно в браузері тут: http://pdfkit.org/demo/browser.html .


Це не бібліотека на сервері? Я думаю, що дискусія ведеться на клієнтській бібліотеці js.
Еш Катхем

10
PDFKit працює як у вузлі, так і у браузері, як зазначено у відповіді. Дивіться посилання на демонстрацію браузера.
devongovett

Це стискає зображення? Я працюю над веб-додатком, який функціонує аналогічно camscanner, і шукаю створення PDF через javascript, щоб використовувати стиснення та формат декількох сторінок.
Тревор

@devongovett Ви можете подивитися на моє запитання щодо вашої бібліотеки?
нінбіт

8

Ще один цікавий проект - texlive.js .

Це дозволяє компілювати (La) TeX в PDF у браузері.


Привіт зі світовим привітанням виглядає чудово, але для завершення потрібно 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 (я це робив раніше, але не пам'ятаю, чи використовував я URI-файли даних).
Бьорн

58
Сьогодні ви можете легко створювати файли в JavaScript. (Я з майбутнього)
Derek 朕 會 功夫

5
Сьогодні це дуже просто. Перевірте це, наприклад: github.com/ChenWenBrian/FileSaver.js
roy riojas

9
@FrankKrueger, якщо ви видалите свою відповідь, ви отримаєте 6 очок: P
Kamil Kiełczewski

8
@FrankKreuger, "Іди читати специфікації" майже ніколи не є правильною відповіддю на ТАК.
Крішнан Венкітесваран
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.