是否可以在Qt中制作具有不同页面大小的pdf? [英] Is it possible to make a pdf with different page size in Qt?

查看:215
本文介绍了是否可以在Qt中制作具有不同页面大小的pdf?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

If the size of the page is same, then no problem, but I need the page size should be the size of Image(which is variable),

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();
}

推荐答案

您可能希望使用

You may wish to use QPdfWriter rather than QPrinter. You'll have to pick a PPI for the image, but if you want to save at 96 PPI, you could do something like

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();

这篇关于是否可以在Qt中制作具有不同页面大小的pdf?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆