QPrinterとQPainterを使用して高解像度(1200 dpi)PDFドキュメントを作成しています。 QTextDocument :: drawContentsを使用して同じ解像度でテキストを描画しようとしています。 QTextDocumentを使用する理由は、ドキュメントに多数のテーブルと書式設定されたテキストを含める必要があるためです。QTextDocument :: drawContentsは96 dpiでレンダリングする
私の問題は、QTextDocument :: drawContentsは常に私の場合は96 dpiの画面解像度でテキストを挿入することです。私が今までに見つけたすべての解決策は、正しいサイズを得るためにテキストを拡大縮小することを提案しています。しかし、これは低品質のテキストをもたらします。
私の質問:QTextDocumentの内容を高解像度で描画する方法はありますか?
次のコードは、2行のテキスト(QPainter :: drawTextを使用して描画したものとQTextDocument :: drawContentsを使用して描画したもの)を含むPDFファイルを作成します。私は、スケーリングによる低品質の問題を強調するために、Arial 8ptフォントを使用しました。
// 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();
テキストがさえ方法( 'QPainter'は異なり、テキストを扱い、のいずれかでPDFファイルにラスタライズされ保存されていないため、問題は、PDF出力で表示されていないようですあなたがそれを回転させるか、または再スケーリングするとき)。低品質の問題を再現するためにAdobe Readerで変更するオプションがありますか? – alexisdm
作成したPDFファイルを開くためにFoxit Reader(デフォルト設定)を使用しました。私はWindows環境上でコードを実行しており、Qt 4.7.1を使用しています。私は実際にはAdobe Readerにその違いが表示されないことに驚いています。 – d11
実際には、テキストが96 dpiで描画されていることを示すスケール変換が必要です。縮尺変換が省略された場合や、2番目のQPrinterオブジェクトのコンストラクタに渡されたパラメータがQPrinter :: ScreenResolutionに変更された場合にどうなるかを確認してください。 – d11