Название: Как напечатать такое в PDF Отправлено: elite05 от Декабрь 05, 2007, 13:43 При печати средствами QT с выводом в PDF возникла проблема,
как сделать перевод страницы (новую страницу) при печати в PDF? Метод QTextDocument::print(&printer) печатает весь документ, содержащий параграфы, таблицы, рисунки и т.д, а вставку принудительного разрыва страницы не поддерживает Метод QPrinter::newPage() работает только при отрисовке страниц через QPainter, можно ли как нибудь напечатать QTextDocument с разрывами страниц, не связываясь с QPainter Создаю QPrinter и прочее QPrinter printer(QPrinter::HighResolution); printer.setOutputFileName("print.pdf"); QTextDocument doc; QTextCursor cursor(&doc); пытаюсь печатать for(int cnt=0;cnt<2;cnt++) { cursor.insertText(tr("Новая страница %1").arg(cnt)); cursor.insertBlock(); doc.print(&printer); printer.newPage(); } В документ попадает только "Новая страница 1", а "Новая страница 0" затирается Понятно, что при печати на живом принтере таких проблем можно избежать Название: Re: Как напечатать такое в PDF Отправлено: pastor от Декабрь 05, 2007, 14:48 А чем не устраивает QPainter?
Советую посмотреть в демке demos\textedit файлик printpreview.cpp, а именно методы PreviewView::paintEvent и PreviewView::paintPage. имхо, все понятно. Немножко остаеться доделать под свои нужды Название: Re: Как напечатать такое в PDF Отправлено: elite05 от Декабрь 06, 2007, 14:42 А чем не устраивает QPainter? Советую посмотреть в демке demos\textedit файлик printpreview.cpp, а именно методы PreviewView::paintEvent и PreviewView::paintPage. имхо, все понятно. Немножко остаеться доделать под свои нужды Так понятно чем не устраивает. У класса QTextDocument есть метод print, а простого способа вставить разрыв страницы в нужном месте нет. Есть разница написать QTextDocument::print(&printer) или переделывать printpreview.cpp под свои нужды Название: Re: Как напечатать такое в PDF Отправлено: elite05 от Декабрь 06, 2007, 14:51 А кто может, что-нибудь сказать про следующее:
в разделе "Поддерживаемые комманды HTML" ("Supported HTML Subset") среди атрибутов CSS есть два "page-break-before" и "page-break-after" Кто-нибудь их использовал? Или где можно посмотреть примеры использования атрибутов CSS при формировании документов Rich Text в Qt Название: Re: Как напечатать такое в PDF Отправлено: pastor от Декабрь 06, 2007, 15:10 Так понятно чем не устраивает. У класса QTextDocument есть метод print, а простого способа вставить разрыв страницы в нужном месте нет. Есть разница написать QTextDocument::print(&printer) или переделывать printpreview.cpp под свои нужды Немножко разъясните... Если печатать вот так: Код: QPrinter printer(QPrinter::HighResolution); Оно печатает только одну страницу или все сплошной страницей? Название: Re: Как напечатать такое в PDF Отправлено: elite05 от Декабрь 06, 2007, 15:40 Все, спасибо, уже сам разобрался.
Должно быть вот так: QPrinter printer(QPrinter::HighResolution); printer.setOutputFileName("print.pdf"); QTextDocument doc; QTextCursor cursor(&doc); и далее: QTextBlockFormat textFormat; for(int cnt=0;cnt<2;cnt++) { // Печатаем страницу ... textFormat.setPageBreakPolicy(QTextFormat::PageBreak_AlwaysBefore); cursor.setBlockFormat(textFormat); cursor.insertText(tr("Новая страница %1").arg(cnt+1)); cursor.insertBlock(); textFormat.setPageBreakPolicy(QTextFormat::PageBreak_Auto); cursor.setBlockFormat(textFormat); } // Печатаем последнюю страницу ... doc.print(&printer); Название: Re: Как напечатать такое в PDF Отправлено: Krow от Сентябрь 30, 2008, 18:08 Тока не называть некропостером:
попытался сделать так.. cursor.insertText(text); всё работает. е асли как у меня методом insertHtml то insertBlock() не срабатывает в штмл. Код: QTextCursor cursor(&textDocument); |