1. 程式人生 > >QT呼叫印表機列印html網頁及檔案

QT呼叫印表機列印html網頁及檔案

工程裡用到 QWebView,
所以要在.pro里加上 QT += webkit webkitwidgets
列印用到了 QPrinter,
所以要在.pro里加上 qtHaveModule(printsupport): QT += printsupport

直接附上原始碼吧,當然也是根據網上一些前輩的經驗程式碼和實際使用情況改進而來:

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

實現:

#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;
}

相關推薦

QT呼叫印表機列印html網頁檔案

工程裡用到 QWebView, 所以要在.pro里加上 QT += webkit webkitwidgets 列印用到了 QPrinter, 所以要在.pro里加上 qtHaveModule(printsupport): QT += printsuppor

java實現二維碼生成呼叫印表機列印

在開發二維碼列印的過程中走過幾次彎路,所以在這裡特意將其記錄下來留作備忘。一開始參考其他博主寫的文章,有介紹通過編寫JAVA後臺程式碼來獲取本地預設印表機的驅動實現列印。BUT!這樣就導致在本地開發測試時看似一切正常,一旦專案部署到linux環境下,就會完全失效了(JAVA後臺程式碼去獲取linux本地的印表

JS 呼叫印表機列印網頁文件

有時前端的專案中需要新增列印的功能,首先要知道列印分為整體列印和區域性列印兩種,而區域性列印又可細分為區域性列印指定的部分,和區域性列印指定部分之外的部分。例項比文字看起來更清晰,下面我將用程式碼來描述1、整體列印這是最簡單的部分<button id="print1">列印全部</butto

JavaWeb開發,使用jqprint呼叫印表機列印頁面

1、實現頁面列印要引入jQuery和Jqprint。點選下載Jqprint外掛 1 2 <script language="javascript" src="jquery-1.4.4.min.js"></script> <scr

JavaWeb開發,使用js呼叫印表機列印頁面

首先,在html中,通過star和end來標記列印區域 1 2 3 4 5 6 7 8 <h1>這塊內容不需要列印</h1> <!--startprint--> <div class="content"> 這裡

Jquery呼叫印表機列印(包含去除頁首頁尾)

個人小說網站友書-綠色、純淨、無廣告歡迎廣大同行前來指點、閱讀 話不多說,直接上程式碼, function Print(data) { $.post("../../program/ashx/PrintAshx.ashx",

js呼叫印表機列印指定內容

function printById(id) {           html2canvas(document.getElementById(id), {               allowTaint : true,               taintTest : false,            

C# 呼叫印表機列印圖片

是基於WPF的。 具體程式碼如下,列印時會有一個小彈窗一閃而過,還在繼續找辦法改進 由於目前使用的方法所需的變數型別和程式裡需要列印的圖片的變數型別不一樣,所以這裡我將需要列印的照片先儲存為檔案,然

呼叫印表機列印案例

頁面涉及到列印功能可以參考該例子涉及的頁面不是很美觀,如果vue+elementUI,可美化頁面,或者其他框架都可使用,更好的也可以自定製。直接上程式碼:<!DOCTYPE html><html lang="zh"><head><me

Qt 呼叫印表機參考

參考1 http://blog.csdn.net/qq_28796345/article/details/51760431特別簡單的例子 參考2 http://blog.csdn.net/lpdpzc/article/details/9094421 有步驟總結也有程式碼示例

Qt呼叫印表機印表機預覽程式碼

轉載自點我呀 Date:  2016-6-15 Author: kagula Introduction:        一個簡單的列印和列印預覽示例程式碼。 Environment: [1]Windows 7 64bits [2]Qt Creator 3.6

頁面直接呼叫印表機列印pdf檔案

<div id="pdf"> </div> var pdfForm = document.getElementById("pdf"); 說明:doPrint是一個數組,裡面

html網頁設計細節總結實踐經驗總結

text 文件路徑 -1 div 提醒 進制的轉換 改換 slice 對話 1) <link rel=” ” type=”text/css” href=”__.css”>是空元素,僅包含屬性。用來定義文檔與外部資源的關系,常用於鏈接樣式表

HTML網頁的基本結構基礎功能

區分 blank strong target ref 功能 當前 設置 .html 一、HTML網頁的基本結構1、HTML——超文本標記語言,瀏覽器解析html標記後,展示內容2、H5——HTML5(目前流行比較火)3、網頁的基本結構  3.1靜態網頁的拓展名h

使用python把html網頁轉成pdf檔案

我們看到一些比較寫的比較好文章或者部落格的時候,想儲存下來到本地當一個pdf檔案,當做自己的知識儲備,以後即使這個部落格或者文章的連線不存在了,或者被刪掉,咱們自己也還有。 當然咱們作為一個coder,這樣的事情肯定不能手動儲存下來然後再轉成pdf存起來對不對,有失咱們碼農的身份,當然要自動化的來實現了~

NodeJs中的http-server的使用--解決chrome瀏覽器執行html和js檔案的時候,無法呼叫本地的檔案

  一、環境:已經安裝了nodeJS。 二、安裝http-server:    開啟cmd --》 輸入  npm install http-server -g  注意:需要-g ,否則會出現錯誤,並且點選執行start.bat的時候

Qt Creator 呼叫第三方庫libZPlay 解析音訊檔案 標題、專輯、檔名、藝術家

libZPlay libZPlay庫集成了所有支援格式(mp3, mp2, mp1, ogg, flac, ac3, aac, oga, wav and pcm )的編碼解碼器。 一、官網下載sdk http://libzplay.sourceforge.net/ 二、pro檔案修改:

載入本地json檔案,並利用批處理呼叫Chrome顯示html

載入本地json檔案 1.載入本地json檔案 為了除錯儲存在本地的json資料,需要進行讀入。一般使用jQuery來進行,但需要對瀏覽器進行一點設定。 Chrome瀏覽器中有一個啟動選項--allow-file-access-from-files,在啟動的時候需要設定一下。

C#呼叫TSC條碼印表機列印二維碼(轉)

#region 呼叫TSC印表機列印 /// <summary> /// 呼叫TSC印表機列印 /// </summary> /// <param name="title">列印的標題</param

C#呼叫TSC條碼印表機列印條碼(轉)

#region 呼叫TSC印表機列印條碼 /// <summary> /// 呼叫TSC印表機列印條碼 /// </summary> /// <param name="title">列印的標題&l