是否可以在Qt中制作不同页面大小的pdf

Is it possible to make a pdf with different page size in Qt?

本文关键字:pdf Qt 是否      更新时间:2023-10-16

如果页面的大小相同,那么没有问题,但我需要页面大小应该是图像的大小(这是可变的),

void DgJpgToPdf::convertToPdf( const QStringList& theImagePathList, const QString& theOutputFileName )
{
    QPrinter printer;
    printer.setOrientation(QPrinter::Portrait);
    printer.setOutputFormat( QPrinter::PdfFormat );
    printer.setOutputFileName( theOutputFileName );
    QPainter painter;    
    painter.begin( &printer );
    //printer.newPage();
    foreach( QString  fileName, theImagePathList ){
        QImage imgObj( fileName );    
        printer.setPaperSize( QSizeF(imgObj.width(), imgObj.height()), QPrinter::DevicePixel );        
        painter.drawImage( 0, 0, imgObj );
        printer.newPage();
    }
    painter.end();
}

您可能希望使用QPdfWriter而不是QPrinter。你必须为图像选择一个PPI,但如果你想以96 PPI保存,你可以做一些类似的事情

QPdfWriter pdfWriter(theOutputFileName);
pdfWriter.setTitle(theDocumentTitle);
pdfWriter.setCreater(yourApplicationName);
const qreal horizontalMarginMM = 2.0;     // 2mm margin on each side
const qreal verticalMarginMM = 2.0;
QPagedDevice::Margins margins;
margins.left = margins.right = horizontalMarginMM;
margins.top = margins.bottom = verticalMarginMM;
pdfWriter.setMargins(margins);
bool newPage = false;
QPainter painter;
painter.begin(&pdfWriter);
foreach (const QString& fileName, theImagePathList) {
  QImage imageObj(fileName);
  if (newPage)
    pdfWriter.newPage();
  newPage = true;
  qreal pageWidthMM = imgObj.width() / 96.0 * 25.4 + 2*horizontalMarginMM;
  qreal pageHeightMM = imgObj.height() / 96.0 * 25.4 + 2*verticalMarginMM;
  imgObj.setDotsPerMeterX(96.0 / 25.4 * 1000.0);
  imgObj.setDotsPerMeterY(96.0 / 25.4 * 1000.0);
  pdfWriter.setPageSizeMM(QSizeF(pageWidthMM, pageHeightMM));
  painter.drawImage(0, 0, imageObj);
}
painter.end();