2011-12-12 30 views
17

Mã của tôi tạo pdf bằng cách hiển thị nội dung QGraphicsScene trên QPrinter được khởi tạo đúng cách. Trong khi giao dịch với ứng dụng, văn bản có thể được chỉnh sửa, sao chép vào clipboard, vv .. Làm thế nào tôi có thể tạo pdf từ QGraphicsScene, nơi chuỗi văn bản của tôi cũng có thể được sao chép, hoặc không thể và tôi cần tạo QTextDocument cho các tác vụ như vậy?Cách tạo tệp pdf từ QGraphicsScene bằng văn bản có thể sao chép được?

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

[Thông số Qt] (http://doc.qt.nokia.com/latest/qprinter.html#OutputFormat-enum) mô tả văn bản "có thể tìm kiếm" làm đầu ra của nó. Điều này ngụ ý rằng các ký tự cơ sở đang được lưu trữ. Theo như tôi biết, liệu văn bản có thể được chọn là nhiều chức năng của trình đọc PDF * hơn so với người viết hay không. – spraff

+0

Đã thử một số độc giả bao gồm Mac OS X Preview, Adobe Acrobat X. Trong chuỗi văn bản xem trước có thể chọn nhưng clipboard chỉ có ký hiệu khoảng trắng trong khi sao chép. Trong chuỗi văn bản Acrobat không thể chọn được. –

+1

mã của bạn tạo văn bản có thể chọn trong tệp PDF. Tôi vừa thử nó! Vì vậy, tôi không hiểu câu hỏi của bạn ... – CapelliC

Trả lời

3

Dường như bạn phải sử dụng QTextDocument và viết nội dung của bạn dưới dạng HTML. Xem câu trả lời của tôi và nhận xét của tôi cho câu hỏi: Qt4: Print a SQL table to PDF

EDIT: Tôi đã thực hiện một phiên gỡ lỗi (với Visual Studio trong Windows7) và được đưa vào scene-> render. Tại một số bước QGraphicsTextItem :: paint (...) trong tệp qgraphicsitem.cpp (dòng 10067 trong Qt 4.8.0) được gọi, nơi bạn có thể thấy rằng mục văn bản được lưu trữ trong một QTextDocument.

Kết luận của tôi (từ câu hỏi được tham chiếu): Văn bản được in dưới dạng văn bản sang tài liệu pdf, có nghĩa là bạn không thể chọn hoặc sao chép văn bản chỉ là một bản trình diễn của trình xem pdf. Nếu xpdf bao gồm pdftotext có sẵn cho nền tảng của bạn, bạn có thể dễ dàng xác minh điều này.

+1

Điều này có trả lời câu hỏi của bạn không? Nếu có, vui lòng chấp nhận câu trả lời. – hmuelner

+0

Tôi đã sử dụng xpdf để xác minh nhưng vẫn không thể sao chép được. –

Các vấn đề liên quan