Каков наилучший способ программного создания сложного PDF-файла? [закрыто]

avatar
dividebyzero
1 июля 2021 в 19:19
161
0
1

Проблема

Я пытаюсь разработать веб-приложение, которое позволит пользователям создавать свои собственные списки задач с помощью интуитивно понятного пользовательского интерфейса с намерением распечатать список задач, как только они будут довольны результатом. Идея состоит в том, что в левой половине браузера должны отображаться формы/кнопки/элементы управления для управления фактическим содержимым/стилем списка задач, а в правой половине браузера должен отображаться фактический документ задачи (pdf?) для просмотра в виде они вносят изменения (как то, что делается на обороте).

После завершения они смогут распечатать окончательный список дел в формате PDF. Главное требование к этой части — чтобы документ был «красивым». Я хочу максимально контролировать форматирование, цвет, графику и т. д., чтобы документ выглядел профессионально, а не просто так, как если бы вы печатали в PDF.

Более конкретные требования перечислены ниже:

  • Мне нужна возможность разбивать содержимое документа на столбцы, как это работает в многоцветном пакете LaTeX, и автоматически перемещать избыточное содержимое с одной страницы на новую страницу (также разбивая по столбцам).
  • Мне нужна возможность использовать точечные выноски (и другие типы, если это возможно) для разделения элементов списка дел и их действий. Например;
    Стирка.................................Развешивание для сушки
    Блюда......................................Убрать
    Автомобиль.................................................Мойка и воск
  • Мне нужна, например, возможность использовать векторную графику и цвета; поместить красную рамку вокруг названия важного списка дел.
  • Возможность использовать изображения тоже была бы кстати.
  • Использование node.js, но решения на других языках приветствуются.

Что я пробовал

LaTeX

LaTeX — достойный вариант, так как он поддерживает столбцы с использованием пакета multicol, точечные выноски с помощью \dotfill и простое преобразование в PDF, но при его использовании я обнаружил, что это не так просто, как хотелось бы, где тривиальные вещи (на мой взгляд), такие как создание цветной ограничивающей рамки вокруг заголовка, требовали дополнительных пакетов, которые было трудно использовать из-за отсутствия документации. Я также обнаружил, что, хотя есть много вещей, которые вы можете сделать, некоторые вещи намного сложнее или невозможно сделать по сравнению с чем-то вроде HTML и CSS.

HTML и CSS

Мне очень нравится идея HTML и CSS для этого из-за бесконечной настройки, но когда дело доходит до таких вещей, как столбцы и преобразование в красивый PDF, все становится сложнее. Я видел некоторые приемы CSS, используемые для создания точечных выносок, так что это не проблема, но выяснить, как разработать решение, которое будет легко обрабатывать динамические объемы контента (помещая переполненный контент на новую «страницу»), а затем конвертировать в PDF без ущерба для стиля или форматирования кажется более сложным.

PDFKit

PDFKit — это очень простой в использовании пакет node.js, который мне нравится, и даже имеет возможности столбцов, но, судя по тому, что я видел, ему не хватает возможности дальнейшей настройки любого текста в столбцах (например, создание заголовков, ограничивающих рамок, точечных выносок). , и т.д). Кажется, он поддерживает только обычный текст в столбцах.

Сводка

Я ищу лучший способ программно создавать красивые PDF-файлы на основе динамического содержимого. Возможные решения, с которыми я столкнулся, это HTML+CSS, LaTeX или PDFKit, каждое со своими недостатками. Я уверен, что есть множество других решений, о которых я не знаю, поэтому, если у кого-то есть какие-либо советы или предложения, я был бы очень признателен, если бы вы могли ими поделиться. Извините за длинное сообщение, я просто хотел убедиться, что вопрос понятен.
Источник
Kinglish
1 июля 2021 в 19:23
0

если у вас есть доступ к php - я использую domPDF, и это помогает мне. все на основе html/css]

Scb
1 июля 2021 в 19:23
0

Я использовал это в прошлом с довольно продвинутым CSS, и это оказалось великолепно: weasyprint.org

Ответы (0)