如何从带有可复制文本的QGraphicsScene生成PDF文件?

18
我的代码通过将QGraphicsScene内容渲染到正确初始化的QPrinter上来生成PDF。在处理应用程序时,这些文本可以被编辑、复制到剪贴板等等。如何从QGraphicsScene生成PDF,使我的文本字符串也能被复制,或者这是不可能的,我需要为此创建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();

Qt规范将“可搜索”文本描述为其输出。这意味着基本字符正在被存储。据我所知,文本是否可以被选择更多地取决于PDF 阅读器而不是作者。 - spraff
尝试过几个阅读器,包括Mac OS X预览和Adobe Acrobat X。在预览中,文本字符串可选择,但复制时剪贴板只会得到空格符号。在Acrobat中,文本字符串根本无法选择。 - Mykyta Kozlov
1
你的代码可以在PDF文件中生成可选择的文本。我刚试过了!所以我不明白你的问题是什么... - CapelliC
很遗憾,只能在Mac的预览中选择,正如我之前所说,并不可复制。你使用的是哪个PDF阅读器? - Mykyta Kozlov
1个回答

3
看起来您需要使用QTextDocument,并将内容编写为HTML。请参阅我的答案以及对问题的评论:Qt4:将SQL表打印到PDF 编辑:我进行了调试会话(在Windows7中使用Visual Studio),并进入了scene-> render。在qgraphicsitem.cpp文件(在Qt 4.8.0中的第10067行)的某个步骤中调用了QGraphicsTextItem :: paint(...),您可以看到文本项存储在QTextDocument中。
我的结论(来自引用的问题):文本作为文本打印到pdf文档中,这意味着您无法选择或复制文本只是您的pdf查看器的一个缺陷。如果xpdf包括pdftotext可用于您的平台,则可以轻松验证此操作。

我使用了xpdf进行验证,但仍然无法复制。 - Mykyta Kozlov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接