Название: Разделение стилей и документа при печати Отправлено: radislav72 от Январь 18, 2012, 21:35 Здравствуйте!
В папке приложения есть подпапка /templates, где расположены шаблоны для печати в формате html, и там же css- стили для задания внешнего вида таблиц, абзацев... Пробую печатать с использованием QWebView + QPrintPreviewDialog. Но при усановке контента для QWebView css-стили не подгружаются. Делаю так: Код: wv->setHtml(sTemplate, QUrl(QApplication::applicationDirPath() + "/templates")); Если стили добавить в сам html-шаблон, то все нормально. Но таких шаблонов много, и хотелось бы отделить оформление от их содержимого, чтобы одним css управлять всеми. В оках по setHtml пишут, что Цитировать External objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl Как правильно задавать етот "baseUrl"? Название: Re: Разделение стилей и документа при печати Отправлено: radislav72 от Январь 19, 2012, 10:31 Урл типа file:///c:/Projects... тоже не проходит
Название: Re: Разделение стилей и документа при печати Отправлено: _OLEGator_ от Январь 19, 2012, 11:09 Вам нужно установить URL WebView загружаемого шаблона, чтобы он относительно него нашел css.
Либо указать абсолютные пути к css перед вызовом setHtml. А чем QWebView::load ( const QUrl & url ) не подходит? Либо воспользоваться Код
Название: Re: Разделение стилей и документа при печати Отправлено: radislav72 от Январь 19, 2012, 12:08 Вам нужно установить URL WebView загружаемого шаблона, чтобы он относительно него нашел css. Спасибо за сочувствие :)Либо указать абсолютные пути к css перед вызовом setHtml. А чем QWebView::load ( const QUrl & url ) не подходит? Либо воспользоваться Код
Установить URL или использовать load неудобно, так как шаблоны содержат "метки" (placeholder's), которые программно заполняются нужными значениями- и только после етого текст шаблона устанавливается в WebView. В самом шаблоне указать жесткие абсолютные ссылки на css также не хорошо, так как на разных компах программа может быть в разных папках... не говоря о разных ОС. Путем рытья текста в Assistante нашел вроде бы выход: Код: wv->settings()->setUserStyleSheetUrl(QUrl::fromLocalFile("print.css")); Код: wv->settings()->setUserStyleSheetUrl(QUrl::fromLocalFile(QApplication::applicationDirPath() + "/templates/print.css")); Странное как по мне поведение... хотелось бы понять чего так. Название: Re: Разделение стилей и документа при печати Отправлено: _OLEGator_ от Январь 19, 2012, 13:37 Можно ставить такие же метки в шаблоне, которые заменять абсолютным путем.
Название: Re: Разделение стилей и документа при печати Отправлено: radislav72 от Январь 19, 2012, 17:26 Можно ставить такие же метки в шаблоне, которые заменять абсолютным путем. Можно, тоже подумывал о таком. Правда как-то казалось что должно быть "прямое" решение.И еще одно выплыло: html-файл с подгруженными стилями css в QWebView выглядит СИЛЬНО не так как в браузере. В Firefox, IE, Chrome страница выглядит по-одному, а в QWebView и стиль таблц не тот, и даже шрифты. Такое впечатление, что он использует свои стили, которые "перетирают" заданные. Может кто знает почему так и как сделать, чтоб отображение html было таким же, как в браузере. Ведь главная задумка- чтобы "продвинутые пользователи" могля сами редактировать стили и вид документа. Название: Re: Разделение стилей и документа при печати Отправлено: radislav72 от Январь 20, 2012, 17:38 Путем проб установлено, что лучше всего в шаблоне динамически перед отображением прописывать аблютный путь к файлу css.
А перед отображением диалога QPrintPreviewDialog вызывать QApplication::processEvents(). Иначе setHtml() не всегда срабатывает, хотя в доке пишут что html вроде загружается "immediality". Т.е. в целом для предпросмотра работает такой код: Код: QWebView *wv = new QWebView(this); Название: Re: Разделение стилей и документа при печати Отправлено: radislav72 от Январь 20, 2012, 18:00 Еще вопрос: может кто подскажет, а то уже утомился рыться в доках.
В окне предварительного просмотра перед печатью в заголовке пишется фраза типа "Предварительный просмотр: document1" Как можно вместо document1 задать свое "цивилизованное" имя? Т.е. как сам WindowTitle изменить, ясно- там можно любой текст записать. Но дело в том, что при печати на виртуальн. принтер все равно выскакивает название document1. Т.е., такое впечатление что где-то документу html присвоено какое-то название... Как его изменить? Название: Re: Разделение стилей и документа при печати Отправлено: radislav72 от Январь 22, 2012, 16:58 Как можно вместо document1 задать свое "цивилизованное" имя? В настройках QPrinter :) Код: QPrinter *printer = new QPrinter(QPrinter::HighResolution); Потом printer передать в QPrintPreviewDialog... |