2011-12-12 11 views
17

Mój kod produkuje pdf, wyświetlając zawartość QGraphicsScene na poprawnie zainicjowanym QPrinter. Podczas pracy z aplikacją taki tekst można edytować, kopiować do schowka itp. Jak mogę wyprodukować pdf z QGraphicsScene, gdzie mój tekst może być również skopiowany, czy jest to niemożliwe i potrzebuję stworzyć QTextDocument dla takich zadań?Jak produkować pliki pdf z QGraphicsScene z kopiowalnym tekstem?

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

Specyfikacja [Qt spec] (http://doc.nokia.com/latest/qprinter.html#OutputFormat-enum) opisuje tekst "możliwy do wyszukania" jako wynik. Oznacza to, że przechowywane są podstawowe znaki. O ile mi wiadomo, to czy tekst może zostać wybrany, jest bardziej funkcją czytnika PDF * niż pisarza. – spraff

+0

Wypróbowałem kilka czytników, w tym Mac OS X Preview, Adobe Acrobat X. W trybie podglądu można wybrać tekst tekstowy, ale schowek pobiera tylko symbol spacji podczas kopiowania. W łańcuchu tekstowym Acrobat w ogóle nie można wybrać. –

+1

Twój kod generuje zaznaczony tekst w pliku PDF. Po prostu to wypróbowałem! Więc nie rozumiem twojego pytania ... – CapelliC

Odpowiedz

3

Wygląda na to, że musisz użyć QTextDocument i napisać swoją zawartość jako HTML. Zobacz moją odpowiedź i moje komentarze na pytanie: Qt4: Print a SQL table to PDF

EDYCJA: Zrobiłem sesję debugowania (z Visual Studio w Windows7) i wkroczyłem do sceny-> render. W pewnym kroku zostaje wywołany QGraphicsTextItem :: paint (...) w pliku qgraphicsitem.cpp (wiersz 10067 w Qt 4.8.0), gdzie widać, że element tekstowy jest przechowywany w QTextDocument.

Mój wniosek (z zadanego pytania): Tekst jest drukowany jako tekst do dokumentu PDF, co oznacza, że ​​niezdolność do wyboru lub skopiowania tekstu jest tylko artefaktem przeglądarki plików PDF. Jeśli xpdf zawierający pdftotext jest dostępny dla twojej platformy, możesz to łatwo zweryfikować.

+1

Czy to była odpowiedź na twoje pytanie? Jeśli tak, proszę przyjąć odpowiedź. – hmuelner

+0

Użyłem xpdf do weryfikacji, ale nadal nie można kopiować. –