Qt 打印文档(PDF)
Qt 打印文档(PDF)
- 在 .pro中添加:
QT += printsupport
- 在设计模式界面拖入一个 Text Edit,在mainwindow.h文件添加类的前置声明:
class QPrinter;
- 在mainwindow.h添加槽声明:
private slots://打印文档void doPrint();void doPrintPreview();void printPreview(QPrinter *printer);void createPdf();
- 在mainwindow.cpp文件中添加头文件:
#include <QPrinter>
#include <QPrintDialog>
#include <QPrintPreviewDialog>
#include <QFileDialog>
#include <QFileInfo>
#include <QAction>
- 在构造函数中定义:建立QPrinter类对象,它代表一个打印设备,创建一个打印话框,如果编辑器中有选中区域,则打印该区域,否则打印整个页面。
setWindowTitle("打印文档");setWindowIcon(QPixmap(":/new/prefix1/images/file.png"));QAction *action_print=new QAction(tr("打印"),this);QAction *action_printPreview=new QAction(tr("打印预览"),this);QAction *action_pdf=new QAction(tr("生成pdf"),this);connect(action_print,SIGNAL(triggered()),this,SLOT(doPrint()));connect(action_printPreview,SIGNAL(triggered()),this,SLOT(doPrintPreview()));connect(action_pdf,SIGNAL(triggered()),this,SLOT(creatPdf()));ui->toolBar->addAction(action_print);ui->toolBar->addAction(action_printPreview);ui->toolBar->addAction(action_pdf);
-
使用打印对话框来进行打印预览,关联它的paintRequsted()信号到自定义的槽上,在槽中调用编辑器的打印函数。
id MainWindow::createPdf() {QString fileName=QFileDialog::getSaveFileName(this,tr("导出PDF文件"),QString(),"*.pdf");if(!fileName.isEmpty()){if(QFileInfo(fileName).suffix().isEmpty())fileName.append(".pdf");//如果文件后缀为空,则默认使用.pdfQPrinter printer;printer.setOutputFormat(QPrinter::PdfFormat);//指定输出格式为pdfprinter.setOutputFileName(fileName);ui->textEdit->print(&printer);} }
-
全部代码(mainwindow.cpp):
#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QPrinter>
#include <QPrintDialog>
#include <QPrintPreviewDialog>
#include <QFileDialog>
#include <QFileInfo>
#include <QAction>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);setWindowTitle("打印文档");setWindowIcon(QPixmap(":/new/prefix1/images/file.png"));QAction *action_print=new QAction(tr("打印"),this);QAction *action_printPreview=new QAction(tr("打印预览"),this);QAction *action_pdf=new QAction(tr("生成pdf"),this);connect(action_print,SIGNAL(triggered()),this,SLOT(doPrint()));connect(action_printPreview,SIGNAL(triggered()),this,SLOT(doPrintPreview()));connect(action_pdf,SIGNAL(triggered()),this,SLOT(creatPdf()));ui->toolBar->addAction(action_print);ui->toolBar->addAction(action_printPreview);ui->toolBar->addAction(action_pdf);
}MainWindow::~MainWindow()
{delete ui;
}//打印
void MainWindow::doPrint()
{QPrinter printer;//创建打印机对象QPrintDialog dlg(&printer,this); //创建打印对话框//如果编辑器中由选中区域,则打印选中区域if(ui->textEdit->textCursor().hasSelection())dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);if(dlg.exec()==QDialog::Accepted){//如果在对话框中按下打印按钮//则执行打印操作ui->textEdit->print(&printer);}
}//打印预览
void MainWindow::doPrintPreview()
{QPrinter printer;QPrintPreviewDialog preview(&printer,this);//创建打印预览对话框//当要生成预览界面时,发射paintRequested()信号connect(&preview,&QPrintPreviewDialog::paintRequested,this,&MainWindow::printPreview);preview.exec();
}void MainWindow::printPreview(QPrinter *printer)
{}void MainWindow::createPdf()
{QString fileName=QFileDialog::getSaveFileName(this,tr("导出PDF文件"),QString(),"*.pdf");if(!fileName.isEmpty()){if(QFileInfo(fileName).suffix().isEmpty())fileName.append(".pdf");//如果文件后缀为空,则默认使用.pdfQPrinter printer;printer.setOutputFormat(QPrinter::PdfFormat);//指定输出格式为pdfprinter.setOutputFileName(fileName);ui->textEdit->print(&printer);}
}