QT如何完成調(diào)用打印機(jī)來(lái)打印html中的頁(yè)面及文件
發(fā)表時(shí)間:2023-09-12 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]這篇文章介紹的內(nèi)容是QT如何實(shí)現(xiàn)調(diào)用打印機(jī)來(lái)打印html中的網(wǎng)頁(yè)及文件,有著一定的參考價(jià)值,現(xiàn)在分享給大家,有需要的朋友可以參考一下工程里用到 QWebView, 所以要在.pro里加上 QT += webkit webkitwidgets 打印用到了 QPrinter, 所以要在.pro里加上 ...
這篇文章介紹的內(nèi)容是QT如何實(shí)現(xiàn)調(diào)用打印機(jī)來(lái)打印html中的網(wǎng)頁(yè)及文件,有著一定的參考價(jià)值,現(xiàn)在分享給大家,有需要的朋友可以參考一下
工程里用到 QWebView,
所以要在.pro里加上 QT += webkit webkitwidgets
打印用到了 QPrinter,
所以要在.pro里加上 qtHaveModule(printsupport): QT += printsupport
直接附上源碼吧,當(dāng)然也是根據(jù)網(wǎng)上一些前輩的經(jīng)驗(yàn)代碼和實(shí)際使用情況改進(jìn)而來(lái):
#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);
};
實(shí)現(xiàn):
#include "Widget.h"
#include "ui_Widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this); //這里沒(méi)用QFile文件讀html文件,因?yàn)闀?huì)使html網(wǎng)頁(yè)中文成亂碼
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;
}//點(diǎn)擊這里觸發(fā)打印動(dòng)作!
void Widget::on_pushButton_clicked()
{
doPrint();
// doPrintPreview();
// printFile("D:/123.txt");
}
void Widget::doPrint()
{
// 創(chuàng)建打印機(jī)對(duì)象
QPrinter printer;
// 創(chuàng)建打印對(duì)話(huà)框
QString printerName = printer.printerName();
if( printerName.size() == 0)
return;
QPrintDialog dlg(&printer, this);#if 0
//如果編輯器中有選中區(qū)域,則打印選中區(qū)域
if (ui->textEdit->textCursor().hasSelection())
dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
#endif
// 如果在對(duì)話(huà)框中按下了打印按鈕,則執(zhí)行打印操作
// if (dlg.exec() == QDialog::Accepted)
//這里使用默認(rèn)打印機(jī),不用每次選擇打印機(jī)
{
// ui->textEdit->print(&printer);
ui->webView->print(&printer);
// print the existing document by absoult path
// printFile("D:/myRSM.doc");
}
}
// 打印預(yù)覽void Widget::doPrintPreview()
{
QPrinter printer;
// 創(chuàng)建打印預(yù)覽對(duì)話(huà)框
QPrintPreviewDialog preview(&printer, this);
// 當(dāng)要生成預(yù)覽頁(yè)面時(shí),發(fā)射paintRequested()信號(hào)
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("導(dǎo)出PDF文件"), QString(), "*.pdf");
if (!fileName.isEmpty()) {
// 如果文件后綴為空,則默認(rèn)使用.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);
}
}
// 頁(yè)面設(shè)置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;
//執(zhí)行DOS命令調(diào)系統(tǒng)打印
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;
}
相關(guān)推薦:
JS調(diào)用打印機(jī)打印Web頁(yè)面
HTML網(wǎng)頁(yè)打印
web打印實(shí)現(xiàn)幾種方法
使用JavaScript實(shí)現(xiàn)頁(yè)面打印
以上就是QT如何實(shí)現(xiàn)調(diào)用打印機(jī)來(lái)打印html中的網(wǎng)頁(yè)及文件的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
網(wǎng)站建設(shè)是一個(gè)廣義的術(shù)語(yǔ),涵蓋了許多不同的技能和學(xué)科中所使用的生產(chǎn)和維護(hù)的網(wǎng)站。