Как создавать PDF файлы из QGraphicsScene со скопируемым текстом?
Мой код создает pdf, отображая содержимое QGraphicsScene на правильно инициализированный QPrinter.
При обработке приложения такой текст можно редактировать, копировать в буфер обмена и т.д. Как я могу создать pdf файл из QGraphicsScene, где моя текстовая строка также может быть скопирована, или это невозможно, и мне нужно создать QTextDocument для таких задач?
QGraphicsTextItem* textItem = new QGraphicsTextItem ( text );
textItem->setPlainText ( text );
textItem->setTextInteractionFlags ( Qt::TextEditorInteraction );
textItem->setFlags( QGraphicsItem::ItemIsSelectable | textItem->flags() );
scene->addItem( textItem );
QPrinter pdfPrinter;
pdfPrinter.setOutputFormat( QPrinter::PdfFormat );
pdfPrinter.setPaperSize( QSize(scene->width(), scene->height()), QPrinter::Point );
pdfPrinter.setFullPage(true);
pdfPrinter.setOutputFileName( path );
QPainter pdfPainter;
pdfPainter.begin( &pdfPrinter);
scene->render( &pdfPainter );
pdfPainter.end();
Ответы
Ответ 1
Кажется, вам нужно использовать QTextDocument и написать свой контент в формате HTML. См. Мой ответ и мои комментарии к вопросу: Qt4: печать таблицы SQL в PDF
EDIT: я сделал сеанс отладки (с Visual Studio в Windows7) и перешел в сцену- > рендеринг. На каком-то этапе вызывается QGraphicsTextItem:: paint (...) в файле qgraphicsitem.cpp(строка 10067 в Qt 4.8.0), где вы можете видеть, что текстовый элемент хранится в QTextDocument.
Мое заключение (из упомянутого вопроса): текст печатается как текст в pdf-документ, а это означает, что ваша неспособность выбрать или скопировать текст - это просто артефакт вашего просмотра в формате pdf. Если xpdf, включая pdftotext, доступен для вашей платформы, вы можете легко проверить это.