2011-12-12 78 views
17

我的代码通过QGraphicsScene内容呈现到正确的初始化QPrinter来生成PDF文件。 虽然处理应用程序,例如文本可以编辑,复制到剪贴板等我怎样才能生成PDF从QGraphicsScene,在我的文本字符串也可以复制,或者它是不可能的,我需要建立另外,QTextDocument这样的任务?如何从QGraphicsScene生成可复制文本的PDF文件?

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(); 
+0

的[Qt的规格](http://doc.qt.nokia.com/latest/qprinter.html#OutputFormat-enum)描述 “可搜索的” 文本作为其输出。这意味着基本字符正在被存储。据我所知,是否可以选择文本更多是PDF *阅读器*的功能,而不是作者。 – spraff

+0

试了读者包括Mac OS X预览,使用Adobe Acrobat X中预览文本字符串是可选的,但剪贴板只能得到象征空间复制时。在Acrobat中,文本字符串根本不可选。 –

+1

您的代码会生成PDF文件中的可选文本。我只是试过了!所以我不明白你的问题... – CapelliC

回答

3

看来您必须使用QTextDocument并将您的内容编写为HTML。编辑:我做了一个调试会话(与Windows7中的Visual Studio),并进入场景 - >渲染。请参阅我的答案和我对这个问题的意见:Qt4: Print a SQL table to PDF

编辑:在文件qgraphicsitem.cpp(Qt中4.8.0线10067)一些步骤QGraphicsTextItem ::涂料(...)被调用,在这里你可以看到文本项被存储在另外,QTextDocument。

我的结论(从引用的问题):文本打印成文本的PDF文档,这意味着你无法选择或复制的文本只是你的PDF阅读器的假象。如果包含pdftotext的xpdf可用于您的平台,则可以轻松验证此操作。

+1

这是否回答了您的问题?如果是这样,请接受答案。 – hmuelner

+0

我用xpdf来验证,但仍然没有任何可复制的。 –