Qt 如何从QGraphicscene生成具有可复制文本的pdf文件?

Qt 如何从QGraphicscene生成具有可复制文本的pdf文件?,qt,printing,pdf-generation,Qt,Printing,Pdf Generation,我的代码通过将QGraphicscene内容呈现到正确初始化的QPrinter上来生成pdf。 在处理应用程序时,此类文本可以编辑、复制到剪贴板等。我如何从QGraphicscene生成pdf,其中我的文本字符串也可以复制,或者这是不可能的,我需要为此类任务创建QTextDocument QGraphicsTextItem* textItem = new QGraphicsTextItem ( text ); textItem->setPlainText ( text ); textIt

我的代码通过将QGraphicscene内容呈现到正确初始化的QPrinter上来生成pdf。 在处理应用程序时,此类文本可以编辑、复制到剪贴板等。我如何从QGraphicscene生成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();

似乎您必须使用QTextDocument并将内容编写为HTML。请参阅我对问题的回答和评论:

编辑:我做了一个调试会话(在Windows7中使用VisualStudio)并进入了场景->渲染。在某个步骤中,调用了文件qgraphicsitem.cpp(Qt 4.8.0中的第10067行)中的QGraphicsTextItem::paint(…),您可以看到文本项存储在QTextDocument中


我的结论(来自参考问题):文本作为文本打印到pdf文档中,这意味着无法选择或复制文本只是pdf查看器的一个伪制品。如果xpdf包括pdftotext可用于您的平台,您可以轻松验证这一点。

将“可搜索”文本描述为其输出。这意味着正在存储基本字符。据我所知,是否可以选择文本更多地是PDF阅读器的功能,而不是编写器的功能。尝试了多个阅读器,包括Mac OS X Preview、Adobe Acrobat X。在预览中,文本字符串是可选的,但剪贴板在复制时只获得空格符号。在Acrobat中,文本字符串根本不可选择。您的代码在PDF文件中生成可选择的文本。我刚试过!所以我不明白你的问题…不幸的是,它只能在mac的预览中选择,正如我之前写的,不可复制。您使用了什么pdf查看器?这是否回答了您的问题?如果是这样,请接受答案。我使用xpdf进行验证,但仍然无法复制。