QPrinter 및 QPainter를 사용하여 고해상도 (1200 dpi) PDF 문서를 만듭니다. QTextDocument :: drawContents 사용하여 같은 해상도로 텍스트를 그리려면 노력하고있어. QTextDocument를 사용하려는 이유는 내 문서에 여러 테이블과 서식있는 텍스트를 포함해야하기 때문입니다.QTextDocument :: drawContents는 96 dpi로만 렌더링됩니다.
제 문제는 QTextDocument :: drawContents가 항상 화면 해상도 (필자의 경우 96 dpi)에 텍스트를 삽입한다는 것입니다. 지금까지 발견 한 모든 해결책은 정확한 크기를 얻기 위해 텍스트 크기를 조정하는 것이 좋습니다. 그러나, 이것은 저 품질의 텍스트를 만들어 내지 못합니다.
내 질문 : QTextDocument의 내용을 고해상도로 그리는 방법이 있습니까?
아래 코드는 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();
문제는 PDF 출력을 표시하지 않는 것 ('QPainter' 심지어 다른 텍스트를 취급 회전하거나 크기를 재조정 할 때). 낮은 품질의 문제를 재현하기 위해 Adobe Reader에서 변경할 수있는 옵션이 있습니까? – alexisdm
Foxit Reader (기본 설정)를 사용하여 생성 된 PDF 파일을 열었습니다. Windows 환경에서 코드를 실행하고 Qt 4.7.1을 사용합니다. 차이점이 Adobe Reader에 표시되지 않는다는 사실은 사실 놀랍습니다. – d11
실제로 텍스트가 96dpi로 그려지는 스케일 변환이 필요하다는 사실이 사실입니다. 축척 변환이 생략되거나 두 번째 QPrinter 객체의 생성자에 전달 된 매개 변수가 QPrinter :: ScreenResolution으로 변경 될 때 어떤 일이 발생하는지 확인하십시오. – d11