Подтвердить что ты не робот

Как создавать 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();
4b9b3361

Ответ 1

Кажется, вам нужно использовать QTextDocument и написать свой контент в формате HTML. См. Мой ответ и мои комментарии к вопросу: Qt4: печать таблицы SQL в PDF

EDIT: я сделал сеанс отладки (с Visual Studio в Windows7) и перешел в сцену- > рендеринг. На каком-то этапе вызывается QGraphicsTextItem:: paint (...) в файле qgraphicsitem.cpp(строка 10067 в Qt 4.8.0), где вы можете видеть, что текстовый элемент хранится в QTextDocument.

Мое заключение (из упомянутого вопроса): текст печатается как текст в pdf-документ, а это означает, что ваша неспособность выбрать или скопировать текст - это просто артефакт вашего просмотра в формате pdf. Если xpdf, включая pdftotext, доступен для вашей платформы, вы можете легко проверить это.