2011-12-12 141 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來驗證,但仍然沒有任何可複製的。 –