Просмотр и печать документов - варианты

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Просмотр и печать документов - варианты

Сообщение wwswowsogon » 24.09.2022 11:19:36

Всем доброго времени суток!

Возникла задача:

Необходимо выводить на просмотр (или предварительный просмотр) с последующей печатью документы.
Структура документов в общем случае непредсказуемая, но не слишком сложная (скорее всего, текст в виде абзацев или без абзацев, возможны таблицы и различные типы выравнивания текста).
В принципе, для генерации подобных документов вполне хватает возможностей HTML+CSS. И, скорее всего, для формирования документа это и будет использоваться. Т. е. получаем HTML-страничку, которую нужно как-то вывести на просмотр и распечатать. Но не хочется каждый раз для этого запускать браузер.

У меня есть несколько вариантов, как это сделать.

1. Каким-то образом конвертировать HTML-страницу в PDF. Однако я не нашёл библиотеки для FPC, которая это умеет. Для PHP есть DOMPDF. Нет ли у нас чего-то подобного?
2. Использовать HTMLViewer. Но пока не очень понятно, умеет ли он делать предпросмотр и печать.
3. Использовать LazReport. Здесь не очень понятно, как он дружит с динамическим добавлением страниц и длинными абзацами. Зато, кажется, умеет конвертировать документы в PDF. :)
4. Генерировать из документа картинку (графический файл), который загружать в загодя реализованный просмотрщик (как это сделано в различных древних приложениях, использующих, например, FoxPro).

Если есть на этот счёт хорошие идеи, буду признателен.
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Просмотр и печать документов - варианты

Сообщение Sharfik » 25.09.2022 02:11:59

Расскажу что знаю.
1. HTMLViewer -если речь о компонентах в базе с Lazarus, то он очень сильно ограниченный. Я его использую, но уровень тамошнего развития HTML на уровне "школа 1-й класс". Если надо вывести текст и какие то таблицы с картинками, без супер форматирования, то все реализуемо. Главное разобраться с используемыми HTML тегами. CSS можно забыть. И HTML любит под экран подстраиваться, с шрифтами будут проблемы.
2. Не надо гнаться за прямой генерацией PDF, если нет времени на хорошую реализацию. Это трешь будет. Есть куча программ "PDF принтеров", некоторые PDF смотрелки устанавливают принтер вместе с собой, в Windows он встроен как один из принтеров в принципе.
Печатать будет пользователь или пользователю уже надо прислать PDF? Если первое, то лучше отправлять как на принтер.
3. HTML+CSS+Браузер пользователя = трешь. Неизвестно какой браузер будет, с какими настройками. Скорее всего полезут жалобы, что отображается не так как задумывалось.

В зависимости от содержимого, например таблички, текст, картинки, можно попробовать отдавать редактируемый документ пользователю в формате RTF, DOCX, ODT.
RTF - я не пробовал, но это древний способ, который должен работать везде. Хелп вроде есть https://wiki.freepascal.org/RichMemo/ru
DOCX, ODT - последний сейчас актуальнее, но читаются оба везде. Открытые форматы, это ZIP+XML.
Я устал от программ которые работают криво, не работают на отдельных ПК, требуют наличия Office, которые выводят все через OLE. Поэтому, когда делал для себя ПО, то распарсил DOCX и теперь по шаблону файла генерирую отчетные документы не заботься о совместимостях и том, что есть на ПК пользователя. Это охренительно удобно.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Просмотр и печать документов - варианты

Сообщение alexs » 26.09.2022 11:11:52

wwswowsogon писал(а):1. Каким-то образом конвертировать HTML-страницу в PDF. Однако я не нашёл библиотеки для FPC, которая это умеет. Для PHP есть DOMPDF. Нет ли у нас чего-то подобного?

Можно просто генерировать PDF - без промежуточного этапа html. Библиотеки есть.
wwswowsogon писал(а):2. Использовать HTMLViewer. Но пока не очень понятно, умеет ли он делать предпросмотр и печать.

Как уже выше написано - функционал достаточно примитивен. Сложная вёрстка отпадает.
wwswowsogon писал(а):3. Использовать LazReport. Здесь не очень понятно, как он дружит с динамическим добавлением страниц и длинными абзацами. Зато, кажется, умеет конвертировать документы в PDF. :)

Если получится формилизовать документ до уровня повторяющихся последователностей - то будет легко (ну или данные хранятся в каких либо БД). Редактор шаблонов отчётов - это очень вещь хорошая.
Если каждый раз надо изобретать уникальность - то по трудозатратам может быть сравнимо с п.1
wwswowsogon писал(а):4. Генерировать из документа картинку (графический файл), который загружать в загодя реализованный просмотрщик (как это сделано в различных древних приложениях, использующих, например, FoxPro).

Тут ограничение только в фантазии разработчика.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Просмотр и печать документов - варианты

Сообщение wwswowsogon » 26.09.2022 12:11:41

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

На моей памяти использовал одну библиотеку для создания PDF-документов, не помню, какую, и там была знатная проблема с кириллицей :)

RTF, если не ошибаюсь, не умеет таблицы.

По поводу ODT - думал об этом когда-то, но на тот момент отбросил из-за относительной сложности реализации. Однако, учитывая совокупность обстоятельств, возможно, этот момент настал.
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Просмотр и печать документов - варианты

Сообщение Sharfik » 27.09.2022 14:56:37

wwswowsogon писал(а):По поводу ODT - думал об этом когда-то, но на тот момент отбросил из-за относительной сложности реализации. Однако, учитывая совокупность обстоятельств, возможно, этот момент настал.

Могу выложить свое решение с DOCX, если есть желание доработать и поделиться потом в обратку.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Просмотр и печать документов - варианты

Сообщение wwswowsogon » 28.09.2022 20:44:20

Sharfik писал(а):
wwswowsogon писал(а):По поводу ODT - думал об этом когда-то, но на тот момент отбросил из-за относительной сложности реализации. Однако, учитывая совокупность обстоятельств, возможно, этот момент настал.

Могу выложить свое решение с DOCX, если есть желание доработать и поделиться потом в обратку.


Я думаю, если пойду путём конвертации в формат офисного пакета, выберу odt. Где-то здесь была инструкция по работе с ним. Сделаю - расскажу, что выбрал окончательно и что получилось. Если не забуду, конечно. Скорее всего, не очень скоро это будет.
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Просмотр и печать документов - варианты

Сообщение Ichthyander » 02.10.2022 12:57:40

Я делал бота, который тупо выводил два формата: odt и pdf. Я особо не замарачивался: специально подготовленный шаблон ODT, в котором делал замены блоков и ключей типа %%KEY%%, подставляя нужные значения строки и чисел. А ODT это просто ZIP файл с читаемыми XML файлами. Потом в PDF.
0) Подготовил шаблоны в ODT с ключами для подмены
1) ПРограмма подхватывает шаблон, распаковывает, делает соответствуюшие изменения и замены в XML файле, снова архивирует в ODT файл.
2) Дополнительно с помощью установленного LibreOFfice конвертирую полученный документ в PDF.
Работать будет как на сервера, так и на десктопе. Кроссплатформенно

https://gist.github.com/Al-Muhandis/0ac ... 51be9b3f2f ODT to PDF
https://gist.github.com/Al-Muhandis/e9e ... 20174b8e88 работа с ZIP / ODT
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 686
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Просмотр и печать документов - варианты

Сообщение MaratIsk » 04.10.2022 23:10:45

Sharfik писал(а):
wwswowsogon писал(а):По поводу ODT - думал об этом когда-то, но на тот момент отбросил из-за относительной сложности реализации. Однако, учитывая совокупность обстоятельств, возможно, этот момент настал.

Могу выложить свое решение с DOCX, если есть желание доработать и поделиться потом в обратку.


выкладывай. подобное делал для excel, но на C#
MaratIsk
постоялец
 
Сообщения: 117
Зарегистрирован: 20.08.2009 18:15:20

Re: Просмотр и печать документов - варианты

Сообщение Снег Север » 05.10.2022 15:15:24

Неужели никто не слыхал про wkhtmltopdf???
wkhtmltopdf and wkhtmltoimage are open source (LGPLv3) command line tools to render HTML into PDF and various image formats using the Qt WebKit rendering engine. These run entirely "headless" and do not require a display or display service.
https://wkhtmltopdf.org/index.html
Есть под все основные ОС.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Просмотр и печать документов - варианты

Сообщение Sharfik » 06.10.2022 04:55:49

MaratIsk писал(а):выкладывай. подобное делал для excel, но на C#

сделал тему, будет критика пиши там
viewtopic.php?f=10&t=43494&p=164963#p164963

Снег Север писал(а):Неужели никто не слыхал про wkhtmltopdf???

На меня не смотри, я не программист, я только лампочки развешиваю. И вообще букв слишком много в названии)))
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27

Рейтинг@Mail.ru