Я печатаю виджет (вкладку из QTabWidget) с его содержимым с этим кодом:
void MainWindow::print()
{
quint8 tabIndex = quint8(ui->tabWidget->currentIndex());
CharacterSheetWidget* widget = dynamic_cast< CharacterSheetWidget* >( ui->tabWidget->widget(tabIndex) );
QString filePath = QFileDialog::getSaveFileName(this, QString(tr("Print as PDF...")), QString(), "PDF file (*.pdf)");
if(filePath.isEmpty())
return;
QPrinter printer;
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName(filePath);
printer.setPaperSize(QPrinter::A4);
printer.setResolution(300);
printer.setFullPage(false);
printer.setPageMargins(5, 5, 5, 5, QPrinter::Millimeter);
QString originalStyle = widget->styleSheet();
widget->setStyleSheet("background-color:white;");
QPainter painter;
painter.begin(&printer);
double xscale = printer.pageRect().width() / double(widget->width());
double yscale = printer.pageRect().height() / double(widget->height());
double scale = qMin(xscale, yscale);
painter.translate(printer.paperRect().center());
painter.scale(scale, scale);
painter.translate(- widget->width()/ 2, - widget->height()/ 2);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
widget->render(&painter);
painter.end();
widget->setStyleSheet(originalStyle);
}
, но он печатает его с большим количеством места справа и снизу. Я хотел бы напечатать его с минимальной областью содержимого.
Например, на этом изображении вы видите, что оно печатает красную область в PDF, я хотел бы, чтобы оно печатало синюю область.
Как мне поступить (если вам нужна дополнительная информация, пожалуйста, скажите мне)?