使用Qt打印PDF文件

时间:2018-04-03 08:23:46

标签: c++ qt

我知道有关于这个问题的类似问题,但似乎没有一个问题可以解决我的问题。

我在我的小部件中有两个选项:一个允许用户将显示保存为PDF文件,另一个允许用户直接打印显示。

我的问题是,如果我使用Windows打印保存的PDF文件与使用Qt打印界面时似乎存在相当小的差异。我开始遵循的一个可能的解决方案是,当我首先打印界面以将PDF格式的界面保存为临时文件,之后尝试使用Qt打印该文件。

不幸的是,似乎我不能直接使用PDF文件而不将其转换为像素图或类似的东西。

这就是我设法以PDF格式导出的方式:

   QTextDocument doc;
   if (!ComputeDoc(doc))
     return false;

  QPrinter printer;
  printer.setOutputFileName(filePath);
  printer.setPaperSize(format);
  printer.setOutputFormat(QPrinter::PdfFormat);
  printer.setOrientation (orientation);
  printer.setFullPage(true);

  if(ok && !filePath.isEmpty())
  {
    QPainter painter(&printer);
    painter.setBackgroundMode(Qt::TransparentMode);
    painter.setRenderHint(
      (QPainter::RenderHint)(int)(
        QPainter::Antialiasing            |
        QPainter::TextAntialiasing        |
        QPainter::HighQualityAntialiasing |
        QPainter::SmoothPixmapTransform),
      true);

      painter.setPen(Qt::white);        
      doc.drawContents(&painter);
   }

这就是我最初尝试打印文件的方式:

  QTextDocument doc;
  if (!ComputeDoc(doc))
    return false;

  QPrinter printer;
  printer.setPaperSize(format);
  printer.setOrientation (orientation);
  printer.setFullPage(true);

  QPrintDialog printDialog(&printer, this);

  if(ok && printDialog.exec() == QDialog::Accepted)
  {
    QPainter painter(&printer);
    painter.setBackgroundMode(Qt::TransparentMode);
    painter.setRenderHint(
      (QPainter::RenderHint)(int)(
        QPainter::Antialiasing            |
        QPainter::TextAntialiasing        |
        QPainter::HighQualityAntialiasing |
        QPainter::SmoothPixmapTransform),
      true);

    painter.setPen(Qt::white);
    doc.drawContents(&painter);
  }

Image

正如您从打印中看到的那样,内部框架没有居中并且在纸张的左侧部分(图像翻转到右侧)有一条PDF格式的线条。很抱歉这个例子但是我无法发布整个页面。我希望这会给出一个小小的澄清。

有没有人知道用qt从磁盘打印PDF文件的解决方案?或者也许如何让Windows从qt打印到文件?

0 个答案:

没有答案