Название: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июня 18, 2012, 14:50 Здравствуйте.
Возникла задача печатать из программы на Qt4 довольно сложный документ (в аттаче). Сам документ в формате xlsx. Некоторые поля должны заполняться из программы. Вопросы: 1. Можно ли програмно модифицировать файл и сразу выводить на печать (на компьютере клиента ексель может и не стоять). 2. Если делать всё "руками" - например, сверстать html и скормить QTextDocument, потом отдать на печать - как проще сделать? Пробовал верстать html - слишком медленно. К тому же в Qt поддерживается не всё подмножество свойств CSS. И не ясно как оно будет на клиентских ПК - шрифты разные и т.п. (программа для Windows/Linux). Название: Re: Препроводительная ведомость, вывод на печать Отправлено: Patrin Andrey от Июня 18, 2012, 15:53 Можно формировать html, грузить в QWebView и печатать.
Пробовал верстать html - слишком медленно. Что значит медлено? Настолько медлено что этот процес занимает больше 1% времени от всей операции распечатать? Название: Re: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июня 18, 2012, 15:57 Можно формировать html, грузить в QWebView и печатать. Пробовал верстать html - слишком медленно. Что значит медлено? Настолько медлено что этот процес занимает больше 1% времени от всей операции распечатать? Медленно - в плане верстка занимает слишком много моего времени - много "мелочей" (центрирование текста, границы разной толщины, подчеркивания и т.д.) с которыми надо разбираться. Название: Re: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июня 18, 2012, 16:03 Можно формировать html, грузить в QWebView и печатать. Код: A QWebView can be printed onto a QPrinter using the print() function. This function is marked as a slot and can be conveniently connected to QPrintPreviewDialog's paintRequested() signal. Как раз то что надо, спасибо. И с версткой проще будет чем при использовании обычного QTextDocument. Название: Re: Препроводительная ведомость, вывод на печать Отправлено: Patrin Andrey от Июня 18, 2012, 17:28 По поводу вёрстки. Можно сделать готовый html а в местах, где надо что-то вставить, оставлять маркеры вида %@SomeFieldname@%, а при формировании просто читать весь шаблон, загонять его в QString и тупо replace ( "%@SomeFieldname@%", "Somevalue")
Название: Re: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июня 18, 2012, 22:51 По поводу вёрстки. Можно сделать готовый html а в местах, где надо что-то вставить, оставлять маркеры вида %@SomeFieldname@%, а при формировании просто читать весь шаблон, загонять его в QString и тупо replace ( "%@SomeFieldname@%", "Somevalue") Так и делаю.Название: Re: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июня 26, 2012, 12:59 Решил делать несколько другим способом.
1. Сформировать из шаблонов в экселе PDF-ки. 2. Преобразовать их в "формы" - добавить поля в которые можно будет програмно подставлять текст. 3. С помощью poppler заполнять поля, рендерить всё в изображение и выводить на печать. плюсы: нет проблем с масштабированием на лист, не нужно тратить несколько дней на верстку, полное соответствие оригинальному "шаблону", проще поддерживать. минусы: риск что вылезет какой-то "косяк", на что уйдет много времени; чтобы сделать "формы" - использую жутко платный Adobe Reader X (цена около $500) - триал версию, если всё получится - нужно будет найти что-то другое взамен ему. Если всё получится - опишу решение здесь. Название: Re: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июня 26, 2012, 22:56 Собрал poppler под WindowsXP x32 и Qt 4.7 по этой инструкции - http://laconsigna.wordpress.com/2011/07/14/compiling-poppler-on-windows/
Правда убил на это около 5-ти часов - что-то не компилилось, чего-то не хватало, в двух местах код пришлось править. Свою инструкцию писать не буду - много было хаков, всего не вспомню. Всё завелось, проблем с шрифтами нет, формы в пдф-ке отображаются корректно. Название: Re: Препроводительная ведомость, вывод на печать Отправлено: Patrin Andrey от Июня 27, 2012, 08:14 А что вы будете делать, если придётся заполнять документ, в котором есть таблица, и в эту таблицу надо вставлять дополнительные строчки?
Название: Re: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июля 01, 2012, 16:30 А что вы будете делать, если придётся заполнять документ, в котором есть таблица, и в эту таблицу надо вставлять дополнительные строчки? Тогда бы использовал QWebView и т.д. Но для текущей задачи быстрее будет имплементировать то решение, которое я выбрал.Название: Re: Препроводительная ведомость, вывод на печать Отправлено: CuteBunny от Июля 03, 2012, 16:17 ncreport?
Название: Re: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июля 03, 2012, 16:36 ncreport? Уже смотрел на него, немного другая задача стоит, он плохо подходит - мне ведь нужно не создавать отчет, а заполнять уже готовую ведомость, при чем её внешний вид должен почти строго соответствовать образцу.Название: Re: Препроводительная ведомость, вывод на печать Отправлено: panAlexey от Июля 03, 2012, 16:47 http://code.google.com/p/unnstudioreport/
? Название: Re: Препроводительная ведомость, вывод на печать Отправлено: CuteBunny от Июля 03, 2012, 16:51 ncreport? Уже смотрел на него, немного другая задача стоит, он плохо подходит - мне ведь нужно не создавать отчет, а заполнять уже готовую ведомость, при чем её внешний вид должен почти строго соответствовать образцу.Так ncreport так и работает, создаете шаблон-ведомости в NCReport Designer, формат xml, подаете на него данные в виде параметров в runtime либо из базы данных. Хотя дело, конечно, Ваше, я просто советую:) Название: Re: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июля 03, 2012, 17:25 ncreport? Уже смотрел на него, немного другая задача стоит, он плохо подходит - мне ведь нужно не создавать отчет, а заполнять уже готовую ведомость, при чем её внешний вид должен почти строго соответствовать образцу.Так ncreport так и работает, создаете шаблон-ведомости в NCReport Designer, формат xml, подаете на него данные в виде параметров в runtime либо из базы данных. Хотя дело, конечно, Ваше, я просто советую:) Не хочу создавать с нуля шаблон ведомости в NCReport Designer. В данном случае с pdf проще - с экселя распечатал в пдф, потом вручную добавил поля для заполнения из программы (на что вчера потратил менее часа), и всё почти готово. И минимум проблем с оформлением и пропорциями. + Как бонус - если текст не помещается в поле, размер шрифта автоматически уменьшается. Название: Re: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июля 05, 2012, 00:30 Б***, уже почти всё сделал, и грабли.
В "формах" не отображаются русские символы, какая-то трабла с poppler-qt4 и кодировками, либо шрифтами... два часа уже убил, решения пока нет. Название: Re: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июля 05, 2012, 03:03 Скачал poppler-data, сделал так чтобы оно подхватилось (час искал с отладчиком куда-же его положить). Как результат - пропали предупреждения с лога, но текста всеравно нет :(
Название: Re: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июля 05, 2012, 03:05 Пока буду выводить вручную текст поверх QImage... хотя бы надежно. Осталось разобраться как подбирать размер шрифта чтобы текст помещался в заданное поле.
Название: Re: Препроводительная ведомость, вывод на печать Отправлено: kostya2vntu от Июля 05, 2012, 03:06 Где то тут на форуме уже видел... повторю:
poppler - геморой еще тот. |