2011-12-12 10 views
17

Il mio codice produce pdf mostrando il contenuto QGraphicsScene su QPrinter correttamente inizializzato. Mentre si tratta di un'applicazione tale testo può essere modificato, copiato negli appunti, ecc. Come posso produrre pdf da QGraphicsScene, dove è possibile copiare anche la mia stringa di testo, oppure è impossibile e ho bisogno di creare QTextDocument per tali compiti?Come produrre file PDF da QGraphicsScene con testo copiabile?

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

La [specifica Qt] (http://doc.qt.nokia.com/latest/qprinter.html#OutputFormat-enum) descrive il testo "ricercabile" come output. Ciò implica che i caratteri di base vengano memorizzati. Per quanto ne so, se il testo può essere selezionato è più una funzione del lettore PDF * rispetto allo scrittore. – spraff

+0

Ho provato diversi lettori, tra cui l'anteprima di Mac OS X, Adobe Acrobat X. Nella stringa di testo di anteprima è selezionabile ma gli appunti ricevono solo il simbolo dello spazio durante la copia. In Acrobat la stringa di testo non è affatto selezionabile. –

+1

il tuo codice produce testo selezionabile in file PDF. L'ho appena provato! Quindi non capisco la tua domanda ... – CapelliC

risposta

3

Sembra che sia necessario utilizzare un QTextDocument e scrivere il contenuto in formato HTML. Vedere la mia risposta e i miei commenti alla domanda: Qt4: Print a SQL table to PDF

MODIFICA: ho eseguito una sessione di debug (con Visual Studio in Windows7) e sono entrato in scena-> render. Ad un certo punto QGraphicsTextItem :: paint (...) nel file qgraphicsitem.cpp (riga 10067 in Qt 4.8.0) viene chiamato, dove si può vedere che l'elemento di testo è memorizzato in un QTextDocument.

La mia conclusione (dalla domanda di riferimento): il testo viene stampato come testo nel documento pdf, il che significa che l'impossibilità di selezionare o copiare il testo è solo un artefatto del visualizzatore di PDF. Se xpdf incluso pdftotext è disponibile per la tua piattaforma, puoi facilmente verificarlo.

+1

Hai risposto alla tua domanda? In tal caso, si prega di accettare la risposta. – hmuelner

+0

Ho usato xpdf per verificare, ma non è ancora possibile copiare. –

Problemi correlati