Russian Qt Forum
Ноябрь 22, 2024, 12:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Препроводительная ведомость, вывод на печать  (Прочитано 14428 раз)
kostya2vntu
Гость
« : Июнь 18, 2012, 14:50 »

Здравствуйте.

Возникла задача печатать из программы на Qt4 довольно сложный документ (в аттаче).
Сам документ в формате xlsx. Некоторые поля должны заполняться из программы.

Вопросы:
1. Можно ли програмно модифицировать файл и сразу выводить на печать (на компьютере клиента ексель может и не стоять).
2. Если делать всё "руками" - например, сверстать html и скормить QTextDocument, потом отдать на печать - как проще сделать?

Пробовал верстать html - слишком медленно. К тому же в Qt поддерживается не всё подмножество свойств CSS. И не ясно как оно будет на клиентских ПК - шрифты разные и т.п. (программа для Windows/Linux).
Записан
Patrin Andrey
Гость
« Ответ #1 : Июнь 18, 2012, 15:53 »

Можно формировать html, грузить в QWebView и печатать.

Пробовал верстать html - слишком медленно.

Что значит медлено? Настолько медлено что этот процес занимает больше 1% времени от всей операции распечатать?

Записан
kostya2vntu
Гость
« Ответ #2 : Июнь 18, 2012, 15:57 »

Можно формировать html, грузить в QWebView и печатать.

Пробовал верстать html - слишком медленно.

Что значит медлено? Настолько медлено что этот процес занимает больше 1% времени от всей операции распечатать?



Медленно - в плане верстка занимает слишком много моего времени - много "мелочей" (центрирование текста, границы разной толщины, подчеркивания и т.д.) с которыми надо разбираться.
Записан
kostya2vntu
Гость
« Ответ #3 : Июнь 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.
Записан
Patrin Andrey
Гость
« Ответ #4 : Июнь 18, 2012, 17:28 »

По поводу вёрстки. Можно сделать готовый html а в местах, где надо что-то вставить, оставлять маркеры вида %@SomeFieldname@%, а при формировании просто читать весь шаблон, загонять его в QString и тупо replace ( "%@SomeFieldname@%", "Somevalue")
Записан
kostya2vntu
Гость
« Ответ #5 : Июнь 18, 2012, 22:51 »

По поводу вёрстки. Можно сделать готовый html а в местах, где надо что-то вставить, оставлять маркеры вида %@SomeFieldname@%, а при формировании просто читать весь шаблон, загонять его в QString и тупо replace ( "%@SomeFieldname@%", "Somevalue")
Так и делаю.
Записан
kostya2vntu
Гость
« Ответ #6 : Июнь 26, 2012, 12:59 »

Решил делать несколько другим способом.

1. Сформировать из шаблонов в экселе PDF-ки.
2. Преобразовать их в "формы" - добавить поля в которые можно будет програмно подставлять текст.
3. С помощью poppler заполнять поля, рендерить всё в изображение и выводить на печать.

плюсы: нет проблем с масштабированием на лист, не нужно тратить несколько дней на верстку, полное соответствие оригинальному "шаблону", проще поддерживать.
минусы: риск что вылезет какой-то "косяк", на что уйдет много времени; чтобы сделать "формы" - использую жутко платный Adobe Reader X (цена около $500) - триал версию, если всё получится - нужно будет найти что-то другое взамен ему.

Если всё получится - опишу решение здесь.
« Последнее редактирование: Июнь 26, 2012, 13:01 от kostya2vntu » Записан
kostya2vntu
Гость
« Ответ #7 : Июнь 26, 2012, 22:56 »

Собрал poppler под WindowsXP x32 и Qt 4.7 по этой инструкции - http://laconsigna.wordpress.com/2011/07/14/compiling-poppler-on-windows/
Правда убил на это около 5-ти часов - что-то не компилилось, чего-то не хватало, в двух местах код пришлось править. Свою инструкцию писать не буду - много было хаков, всего не вспомню.

Всё завелось, проблем с шрифтами нет, формы в пдф-ке отображаются корректно.
Записан
Patrin Andrey
Гость
« Ответ #8 : Июнь 27, 2012, 08:14 »

А что вы будете делать, если придётся заполнять документ, в котором есть таблица, и в эту таблицу надо вставлять дополнительные строчки?
Записан
kostya2vntu
Гость
« Ответ #9 : Июль 01, 2012, 16:30 »

А что вы будете делать, если придётся заполнять документ, в котором есть таблица, и в эту таблицу надо вставлять дополнительные строчки?
Тогда бы использовал QWebView и т.д. Но для текущей задачи быстрее будет имплементировать то решение, которое я выбрал.
Записан
CuteBunny
Гость
« Ответ #10 : Июль 03, 2012, 16:17 »

ncreport?
Записан
kostya2vntu
Гость
« Ответ #11 : Июль 03, 2012, 16:36 »

ncreport?
Уже смотрел на него, немного другая задача стоит, он плохо подходит - мне ведь нужно не создавать отчет, а заполнять уже готовую ведомость, при чем её внешний вид должен почти строго соответствовать образцу.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #12 : Июль 03, 2012, 16:47 »

http://code.google.com/p/unnstudioreport/
?
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
CuteBunny
Гость
« Ответ #13 : Июль 03, 2012, 16:51 »

ncreport?
Уже смотрел на него, немного другая задача стоит, он плохо подходит - мне ведь нужно не создавать отчет, а заполнять уже готовую ведомость, при чем её внешний вид должен почти строго соответствовать образцу.


Так ncreport так и работает, создаете шаблон-ведомости в NCReport Designer, формат xml, подаете на него данные в виде параметров в runtime либо из базы данных.

Хотя дело, конечно, Ваше, я просто советую:)
Записан
kostya2vntu
Гость
« Ответ #14 : Июль 03, 2012, 17:25 »

ncreport?
Уже смотрел на него, немного другая задача стоит, он плохо подходит - мне ведь нужно не создавать отчет, а заполнять уже готовую ведомость, при чем её внешний вид должен почти строго соответствовать образцу.


Так ncreport так и работает, создаете шаблон-ведомости в NCReport Designer, формат xml, подаете на него данные в виде параметров в runtime либо из базы данных.

Хотя дело, конечно, Ваше, я просто советую:)

Не хочу создавать с нуля шаблон ведомости в NCReport Designer. В данном случае с pdf проще - с экселя распечатал в пдф, потом вручную добавил поля для заполнения из программы (на что вчера потратил менее часа), и всё почти готово. И минимум проблем с оформлением и пропорциями.
+ Как бонус - если текст не помещается в поле, размер шрифта автоматически уменьшается.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 23.