Мне было поручено создать (или найти что-то, что уже работает) централизованный сервер с API, который может возвращать файл PDF, передающий некоторые данные и имя шаблона, это должно быть надежное решение, предприятие готово. Цель следующая:
- Серия шаблонов для разных вещей компании. (Счета, заказы, планы заказов и т. Д.)
- Способ возврата PDF-файла из внешнего программного обеспечения (веб-сайтов, ERP и т. Д.)
- Может быть уже готовое корпоративное решение, но они настаивают на нестандартном.
- Может быть любым языком, но у нас нет собственных программистов на Java. Мы PHP / .NET, некоторые из нас балуются, но кривая обучения может быть немного крутой.
Итак, я читал. Один из способов, который, как мы думали, может быть возможным, - это установить сервер отчетов jasper и создать шаблоны в Jaspersoft Studio, а затем использовать API для возврата файлов PDF. Коллега поддерживает этот вариант, потому что в основном это делается, но 1º - это java, а 2º, я думаю, это все равно, что молотком расколоть орех.
Другой вариант, который мы использовали, - это использовать C # с iTextSharp для создания сервера и создать собственный API, который возвращает именно PDF-файл с необходимыми нам данными. При этом мы могли бы получить некоторые преимущества, например, использование уже созданного коннектора базы данных и извлечение большей части данных из базы данных, вместо того, чтобы передавать большой кусок данных, но поскольку он голый em >, на самом деле у него нет системы шаблонов. Мы могли бы создать что-то с помощью XMLWorker или классов C #, но это не совсем так просто, как перетаскивание. В этом случае я тоже читал про XFA, но документация на сайте iText вводит в заблуждение и непонятна.
Я также читал о некоторых других альтернативах, таких как PrinceXML, PDFBox, FOP и т. Д., Но концепция будет такая же, как у iText , нам придется сделать это самим.
Мой голос, даже если это больше работы, - это пойти по пути iText и использовать HTML / CSS для шаблонов, но мои коллеги утверждают, что шаблоны можно менять каждые две недели (я сомневаюсь, что это), и быть легким. HTML / CSS - это слишком много работы.
Итак, настоящий вопрос заключается в том, как к этому подходят другие компании? Я что-то упустил при поиске? Есть ли более простой способ добиться этого?
PS: Я не знал, будет ли SO подходящим местом для этого вопроса, но я в основном заблудился и рисковать «слишком широким вопросом» или тегом «не по теме» не кажется таким уж плохим.
ИЗМЕНИТЬ:
- Вход должен быть отправлен с тем же запросом. Если мы выберем маршрут C #, мы сможем получить ~ 70% данных из ERP напрямую, но в любом случае он должен принять почтовый запрос с некоторыми данными (шаблоном и данными, необходимыми для этого шаблона, такими как данные счета-фактуры или идентификатор счета-фактуры, если у нас есть доступ к ERP).
- На выходе должен быть PDF (не интересны другие форматы, только PDF).
- Шаблоны будут обновляться только ИТ-специалистами. (В основном мы, команда разработчиков).
- Что касается производительности, я не знаю, сколько мышц нам понадобится, но прямо сейчас, без какого-либо увеличения, мы ежедневно просматриваем ~ 500/1000 PDF-файлов, в основном печатаемых с 10 до 10:30 и с 12 до 13 часов. Затем, возможно, еще 100 человек до конца дня.
- ТОП-производительность не должна превышать ~ 10000 в день, когда планеты выравниваются, и в сезон распродаж (два раза в год). Это должно быть нашим потолком на долгие годы.
К шаблонам предъявляются некоторые требования:
- Have repeating blocks (invoice lines, for example).
- Используйте изображения в качестве фона, водяных знаков и блоков.
- Должен быть многоязычным (переводимым, с теми же данными).
- Есть несколько блоков, которые отображаются только при условии.
- Блоки, зависящие от страницы (верхний колонтитул PDF / верхний колонтитул страницы / нижний колонтитул страницы / нижний колонтитул PDF)
- Шаблон возможно должен будет произвести вычисления над некоторыми данными, я не думаю, что нам это когда-нибудь понадобится, но в будущем компания может попросить об этом.
PDF-файлы не нужно хранить, так как у нас есть система управления документами, возможно, в будущем мы сможем связать их.
Дополнительные данные: сейчас мы используем "Fast-Reports v2 VCL"