近期做了一个项目,这个项目需要调用QT 的通用接口实现跨平台打印pdf文件,遇到了一些坑特此纪录一下。

1, QPrinter printer(QPrinter::ScreenResolution);//构造打印对象

printer.setPageSize(QPrinter::A4); //页面设置

printer.setOrientation(QPrinter::Portrait);

2,QPrintDialog printDialog(&printer); //构造打印对话框

//QPrintPreviewDialog previewDialog(&printer);

//QObject::connect(&previewDialog,&QPrintPreviewDialog::paintRequested, widgetPdf, &WidgetPdf::onPrintPreview);  //previewDialog.exec();

if(printDialog.exec()) //最重要的一点,打印文件要读出文件内容,分页绘制至Printer

{

widgetPdf->onPrintPreview(&printer); //绘制内容

}

3,绘制内容显示

void WidgetPdf::onPrintPreview(QPrinter *printer)
{    printer->setWinPageSize(pageCount);    QPainter painter(printer);
    unsigned char *pageData = NULL;
    painter.begin(printer);
    for(int index = 0;index <pageCount;index++)
    {
         QPixmap pixmap;
         BASE_PAGE pageHandel = 0;
         BASE_DOC_LoadPage(docHandle,index,&pageHandel);
         BASE_PAGE_Render(pageHandel,pageWidth,pageHeight,&pageData);
         QImage image(pageData,pageWidth,pageHeight,QImage::Format_RGB32);
         pixmap = pixmap.fromImage(image);
         QRect rect = painter.viewport();
         QSize size = pixmap.size();
         size.scale(rect.size(), Qt::KeepAspectRatio);//此处保证图片显示完整
         painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
         painter.setWindow(pixmap.rect());
         painter.drawPixmap(0,0,pageWidth,pageHeight, pixmap);
         if(index < pageCount-1)
            printer->newPage();
    }
    painter.end();
}

QPrinter QPrintDialog QPrintPreviewDialog 打印PDF文件相关推荐

  1. 【第六篇】Qt学习与使用---在qt中打印PDF文件(不是生成PDF)

    1.目的 如题,打印pdf文件中的内容. 2.思路 (1)思路1:可以通过Poppler类来读取pdf中的内容,并转化成图片,再 打印这些图片.这个方法的瑕疵是,需要在打印的时候准确的写出一页图片在A ...

  2. java生成pdf_Java实现PDF文件生成并且打印pdf文件 demo

    ## Java实现PDF生成并且打印pdf文件(附demo) #### 目录: 0. 效果预览 1. 准备环境 2. Java如何调用打印机进行打印 3. Java如何生成pdf打印文件 4. 实现p ...

  3. 网页上打印PDF文件

    在网页上打印pdf文件,有两种方式:可以是在java后端通过调用iText PDF的jar包的方法实现PDF打印;也可以在前端调用lodop插件打印pdf文件. PDF文件的内容可以是表格,图片等等, ...

  4. net中c#教程 如何创建、合并、下载、打印pdf文件?

    net中c#操作pdf文档,有很多插件可以使用,这里推荐其中的一个,名字叫iTextSharp,Nuget直接搜就可以找到.它能够创建与合并pdf文件.至于下载和打印pdf文件,则是通过其他方法完成的 ...

  5. java打印pdf_java操作打印机打印pdf文件

    小弟近来用java开发系统需实现一个程序操控打印机直接打印pdf文档的功能,查阅API丛书后编写的代码如下: import javax.print.*; import javax.print.attr ...

  6. PowerBuilder 10 下调用FoxitPDFSDK_AX_Pro.ocx浏览打印PDF文件

    在PowerBuilder中浏览.打印PDF文件,该代码已经在PB 10.5版本下测试可用. 使用的控件为FoxitPDFSDK_AX_Pro.ocx,该控件无水印,亲测可用. 具体操作步骤如下: 1 ...

  7. java 连接打印机实现打印PDF文件的功能

    java 连接打印机打印PDF文件 需求背景是导出excel并且打印,excel导出设置和转PDF网上有很多资料,本文只记录连接打印机打印PDF的部分. 1: 需要引入maven配置 <depe ...

  8. 【项目管理】Java使用pdfbox调用打印机打印PDF文件

    [项目管理]Java使用pdfbox调用打印机打印PDF文件 1.项目前言 2.项目实现 3.关键代码 4.效果演示 5.问题处理 5.1 安装对应字体 5.2 修改对应代码 系统:Win10 Jav ...

  9. VBA PowerShell批量打印PDF文件

    循环打印Excel中的PDF文件 Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "Shell ...

最新文章

  1. html5网站测试工具,基于HTML5网页的前端技术测试技巧
  2. 网站SEO优化中几个不为人知的小细节分享!
  3. linux 安装centos
  4. SAP Spartacus B2B 页面 Disable 按钮的显示原理
  5. centos升级之共享文件夹
  6. 安卓USB开发教程 三 USB Accessory
  7. 447. Number of Boomerangs
  8. SpringBoot 自定义线程池
  9. 求链表的倒数第m个元素
  10. nodejs连接池连接mysql
  11. mongodb 的基本函数语法封装
  12. docker pipework
  13. 非专业人士观点(3)不要假如
  14. java逆向框架_JOOQ框架学习(1):逆向编译生成代码
  15. 高斯过程回归预测Matlab简单实现
  16. 解决win10下 Virtual Box USB功能无法使用问题
  17. Java爬取糗百段子
  18. 计算机网络(3)——三种常见的数据交换技术
  19. java家庭收支记账软件-day01
  20. 一个10年IT技术人的历程-Java架构师的演变

热门文章

  1. Levenshtein Distance算法JAVA代码与示例图解
  2. 天文学家对外星文明的分类如何指导我们探索AI?
  3. Thinkpad 电池设置 (Ubuntu)
  4. 小白专用微信公众号网页授权通过code获取用户信息
  5. JS+Flash图片轮换/切换--上下滑动效果
  6. 外星人m15r7键盘失灵问题解决
  7. 3th exercise逻辑斯特解决多分类问题
  8. Linux【命令篇】—— Linux操作系统常用指令大全
  9. [ 数据结构-C实现 ] 用堆解决TopK问题
  10. MySQL5.7.26错误问题 mysqld.exe: Error while setting value ‘STRICT_TRANS_TABLES, ...‘ to ‘sql_mode‘