sto creando una ad alta risoluzione (1200 dpi) documento PDF utilizzando QPrinter e QPainter. Sto cercando di disegnare il testo alla stessa risoluzione usando QTextDocument :: drawContents. La ragione per cui voglio usare QTextDocument è perché ho bisogno di includere molte tabelle e testo formattato nel mio documento.QTextDocument :: drawContents rende solo a 96 dpi
mio problema è che QTextDocument :: drawContents inserisce sempre il testo alla risoluzione dello schermo, che è di 96 dpi nel mio caso. Tutte le soluzioni che ho trovato finora suggeriscono di ridimensionare il testo per ottenere la dimensione corretta. Tuttavia, questo si traduce in testo di bassa qualità, che non posso permettermi.
La mia domanda: C'è un modo per attirare i contenuti di un QTextDocument ad alta risoluzione?
Il codice seguente crea un file PDF con 2 righe di testo, una disegnata utilizzando QPainter :: drawText e una disegnata utilizzando QTextDocument :: drawContents. Ho usato un font Arial 8pt per enfatizzare il problema della bassa qualità risultante dal ridimensionamento.
// Read the screen resolution for scaling
QPrinter screenPrinter(QPrinter::ScreenResolution);
int screenResolution = screenPrinter.resolution();
// Setup the font
QFont font;
font.setFamily("Arial");
font.setPointSize(8);
// Define locations to insert text
QPoint textLocation1(20,10);
QPoint textLocation2(20,20);
// Define printer properties
QPrinter printer(QPrinter::HighResolution);
printer.setOrientation(QPrinter::Portrait);
printer.setPaperSize(QPrinter::A4);
printer.setResolution(1200);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test.pdf");
// Write text using QPainter::drawText
QPainter painter;
painter.begin(&printer);
painter.setFont(font);
painter.drawText(textLocation1, "QPainter::drawText");
// Write text using QTextDocument::drawContents
QTextDocument doc;
doc.setPageSize(printer.pageRect().size());
QTextCursor cursor(&doc);
QTextCharFormat charFormat;
charFormat.setFont(font);
cursor.insertText("QTextDocument::drawContents", charFormat);
painter.save();
painter.translate(textLocation2);
painter.scale(printer.resolution()/screenResolution, printer.resolution()/screenResolution);
doc.drawContents(&painter);
painter.restore();
painter.end();
Il problema non sembra mostrare con un file PDF, perché il testo non viene memorizzato rasterizzato nel file PDF con entrambi i metodi ('QPainter' tratta testo in modo diverso, anche quando lo ruotate o lo ridimensionate). C'è qualche possibilità di cambiare nel lettore Adobe per riprodurre il problema di bassa qualità? – alexisdm
Ho usato Foxit Reader (con le impostazioni predefinite) per aprire il file PDF creato. Sto eseguendo il codice su un ambiente Windows e usando Qt 4.7.1, nel caso in cui questi facciano la differenza. Sono davvero sorpreso che la differenza non venga visualizzata su Adobe Reader. – d11
E 'davvero il fatto che sia richiesta una trasformazione di scala che mi dice che il testo viene disegnato a 96 dpi. Vedere cosa succede quando la trasformazione di scala viene omesso e/o quando il parametro passato al costruttore del secondo oggetto QPrinter viene modificato QPrinter :: ScreenResolution. – d11