当前位置:首页 / 网页制作 / HTML/Xhtml教程 / QT实现调用打印机来打印html中的网页及文件方法
QT实现调用打印机来打印html中的网页及文件方法
芯晴素材特效 分类:HTML/Xhtml教程 发布日期:2018-05-09

这篇文章介绍的内容是QT如何实现调用打印机来打印html中的网页及文件,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

工程里用到 QWebView,

所以要在.pro里加上 QT += webkit webkitwidgets

打印用到了 QPrinter,

所以要在.pro里加上 qtHaveModule(printsupport): QT += printsupport

直接附上源码吧,当然也是根据网上一些前辈的经验代码和实际使用情况改进而来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
#include <QTableWidget>
#include <QPainter>
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPrintDialog>
#include <QFileInfo>
#include <windows.h>
#include <QFileDialog>
#include <QtPrintSupport/QPrintPreviewDialog>
#include <QtPrintSupport/QPageSetupDialog>
#include <fstream>
#include <iostream>
#include <sstream>
#include <QWebView>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
    Q_OBJECT
public:   
   explicit Widget(QWidget *parent = 0);
    ~Widget();
     
private slots:
    void on_pushButton_clicked();   
    void printPreview(QPrinter *printer);
private:
    Ui::Widget *ui;   
    void doPrint();   
    void doPrintPreview();   
    void createPdf();   
    void setUpPage();   
    bool printFile(const QString & filePath);
 
};

实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include "Widget.h"
#include "ui_Widget.h"
 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);    //这里没用QFile文件读html文件,因为会使html网页中文成乱码
    QString strHtmltext;   
    std::string bufStr;   
    std::ifstream readFile;
    readFile.open("D:\\qqq.html");   
    if(readFile.is_open())
    {   
            while(getline(readFile, bufStr))
        {
            strHtmltext += QString(bufStr.data());
        }
        readFile.close();
    }
    ui->webView->setHtml(strHtmltext);
 
}
 
Widget::~Widget()
{    delete ui;
}//点击这里触发打印动作!
void Widget::on_pushButton_clicked()
{
 
    doPrint();
//    doPrintPreview();
//    printFile("D:/123.txt");
}
 
void Widget::doPrint()
{   
    // 创建打印机对象
    QPrinter printer;   
    // 创建打印对话框
    QString printerName = printer.printerName();   
    if( printerName.size() == 0)   
        return;
    QPrintDialog dlg(&printer, this);#if 0
    //如果编辑器中有选中区域,则打印选中区域
    if (ui->textEdit->textCursor().hasSelection())
        dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
#endif
    // 如果在对话框中按下了打印按钮,则执行打印操作
//    if (dlg.exec() == QDialog::Accepted)
    //这里使用默认打印机,不用每次选择打印机
    {
//       ui->textEdit->print(&printer);
        ui->webView->print(&printer);     
         
       // print the existing document by absoult path
      //  printFile("D:/myRSM.doc");
    }
}
// 打印预览void Widget::doPrintPreview()
{
    QPrinter printer;   
    // 创建打印预览对话框
    QPrintPreviewDialog preview(&printer, this);   
    // 当要生成预览页面时,发射paintRequested()信号
    connect(&preview, SIGNAL(paintRequested(QPrinter*)),this,SLOT(printPreview(QPrinter*)));
    preview.exec();
}
 
void Widget::printPreview(QPrinter *printer)
{
//    ui->textEdit->print(printer);
    ui->webView->print(printer);
}
 
// 生成PDF文件
void Widget::createPdf()
{
    QString fileName = QFileDialog::getSaveFileName(this, tr("导出PDF文件"), QString(), "*.pdf");   
    if (!fileName.isEmpty()) {  
        // 如果文件后缀为空,则默认使用.pdf
        if (QFileInfo(fileName).suffix().isEmpty())
            fileName.append(".pdf");
        QPrinter printer;       
        // 指定输出格式为pdf
        printer.setOutputFormat(QPrinter::PdfFormat);
        printer.setOutputFileName(fileName);
//        ui->textEdit->print(&printer);
        ui->webView->print(&printer);
    }
}
// 页面设置void Widget::setUpPage()
{
    QPrinter printer;
    QPageSetupDialog pageSetUpdlg(&printer, this);   
    if (pageSetUpdlg.exec() == QDialog::Accepted)
    {
        printer.setOrientation(QPrinter::Landscape);
    }   
    else
    {
        printer.setOrientation(QPrinter::Portrait);
    }
}
 
bool Widget::printFile(const QString & filePath)
{   
    // create a printer
    QPrinter printer;
    QString printerName = printer.printerName();   
    // no default printer or no file return false
    if( printerName.size() == 0 || filePath.size() == 0)   
        return false;
    QFileInfo fi(filePath);   
    if(!fi.exists())   
        return false;   
    int ret = 0;   
    //执行DOS命令调系统打印
    ret = (int)ShellExecuteW(NULL,
                  QString("print").toStdWString().c_str(),
                  filePath.toStdWString().c_str(),
                  NULL,
                  NULL,
                  SW_HIDE);   
    // if return number bigger than 31 indicate succ
    if (ret > SE_ERR_NOASSOC)   
        return true;   
    return false;
}

版权信息:本站所有资源仅供学习与参考,请勿用于商业用途,如有侵犯您的版权,请及时联系821794221#qq.com(#换@),我们将尽快处理。

您可能在找这些

  • 内容标签:

热门素材

强制打开QQ聊天窗口的代码

2013-01-03   浏览:8432

回到顶端插件ScrollUp

2017-03-18   浏览:374

内容倾斜幻灯片Tilted Items

2017-02-27   浏览:460

html5仿手机QQ拆红包游戏网页下载

2017-03-13   浏览:491

jQuery图片新闻组图幻灯切换网页下载

2017-03-13   浏览:368

jQ带日期区间日期选择插件

2017-03-14   浏览:392

跟随鼠标的JS时钟

2012-12-31   浏览:8182

跟随鼠标的幻影文字效果

2013-01-08   浏览:9057

jq hover鼠标滑过动画导航条

2017-03-17   浏览:479

css3高版本浏览器下垂直文字放大镜效

2017-03-09   浏览:165

网易时尚图片循环特效

2017-03-09   浏览:193

CSS3鼠标滑过渐变颜色旋转图标特效

2017-03-09   浏览:309