2015-05-13 2 views
0

Ситуация такова: У нас есть сайт, который генерирует (большие) контракты-JSON, которые мы теперь хотим экспортировать в формате pdf с использованием интерфейса, поэтому javascript. На данный момент я использую pdfmake, но мне очень сложно получить макет, который остается неизменным для каждого контракта. Я бы предпочел иметь какой-то шаблон, который я мог бы заполнить значениями из JSON.Создание PDF-файла из шаблона с использованием Javascript

Лучшее, что я могу представить на данный момент, это написать шаблон в формате PDF с помощью LaTex и заполнить его рамкой шаблона и скомпилировать его с помощью компилятора LaTex. Однако я надеюсь, что вы можете сказать что-то более простое. Важно только, чтобы получить от JSON до pdf в один клик.

+0

До сих пор я предлагал «лучшее, что я могу придумать», так как я надеялся, что смогу избежать принуждения наших клиентов к компиляции java с помощью javascript-библиотеки LaTeX Compiler. Однако, похоже, только один: texlive.js, который, похоже, не работает в автономном режиме (чего я хочу, к сожалению). Поэтому я продолжу использовать pdfmake. С нетерпением ждем идей, чтобы сделать это проще (или, по крайней мере, более удобочитаемым). – Urr4

+0

. Считаете ли вы использование клиентских библиотек javascript, таких как jsPDF.js, для создания всей клиентской части PDF? –

+0

Я сделал, но я использовал pdfmake вместо jsPDF, потому что я читал несколько раз, что он позволяет лучше форматировать. – Urr4

ответ

1

Я провел некоторое исследование для аналогичного сценария. Ниже приведены три варианта, которые я в короткий список:

  1. HTML-PDF (модуль nodejs)
  2. WKTHMLTOPDF
  3. PhantomJS (даже первые два варианта используются phantomjs)
  4. jsPDF - можно использовать на стороне клиента
+1

Я дам эти варианты попробовать, когда ситуация снова возникнет, спасибо :) Как я уже сказал, в итоге я использовал pdfmake. Мне было очень сложно получить правильную форму, но это сработало. – Urr4

+0

Я также нашел texlive.js, который похож на клиентский компилятор LaTeX, который я хотел иметь вначале. – Urr4

0

Я закончил с использованием pdfmake. Сначала я понял это неправильно, что явилось причиной того, что я не мог редактировать pdf. Теперь я знаю, что вы можете хорошо компоновать свой документ, используя множество столбцов.

Я попытался прочитать файл .tex и заполнить его с помощью FreeMarker. Это работало очень хорошо, однако, не имея онлайн-компилятора LaTeX, мне пришлось бы заставить клиентов скомпилировать файлы .tex локально, которые я не хотел.

Однако, если у вас есть компилятор LaTeX локально, это должно работать.

+0

Как вы получили pdfmake для редактирования pdf? Я уже отбросил его, потому что документы никогда не упоминали даже загрузку pdf.Нам нужно что-то, что может сделать некоторые замены с пользовательскими данными в шаблоне, а затем сохранить его в новый файл. –

+0

Извините, я, возможно, использовал неправильное слово. Когда я сказал «редактировать», я имел в виду «повлиять на появление PDF-файла, который нужно создать». – Urr4

+0

Я не загружаю pdf-файл и не меняю его. Я генерирую только один из необработанных данных. – Urr4

0

После того, как это решение работает в течение некоторого времени, я хочу добавить, что изменение документа впоследствии (добавление таблицы, например) довольно сложно в этом сценарии. Если мне нужно будет сделать это снова, я бы, вероятно, попытался реализовать строительные блоки pdf в качестве латексных шаблонов с заполнителями. Подобно директивам в угловом. В процессе создания документа я бы прошел шаблон шаблона, создав Latex-Blocks (например, таблицы), используя данные, полученные мной из бэкэнд, и я бы использовал FreeMarker для заполнения сгенерированных данных в шаблонах, а затем поместил шаблоны в один полный латексный файл, содержащий весь pdf в латексе. Используя компилятор js-Latex, такой как texlive, я должен иметь возможность генерировать PDF из этого файла.

Все это теоретически и, вероятно, больше работы, чем то, что я сделал, но мне нравится это решение лучше, поскольку оно чище и проще в обслуживании. Учиться на своих ошибках :-)

Смежные вопросы