Qt提供了以文本、圖片、HTML等方式來實現對文檔的操作,主要用到了QPrinter類和QPainter類,用到了QFileDialog文件窗口、QPrintPreviewDialog預覽窗口類和QPrintDialog打印窗口類,Qt5也提供了QPdfWriter類來實現對pdf的操作,這里并不包括打開pdf文件,Qt沒有提供任何方法來直接像文件瀏覽器一樣打開pdf文件,可以用第三方庫來實現。
這里采用了圖片的方式來實現保存、預覽和打印,其實 三個功能基本上一樣。
1、保存PDF
(1)保存某個控件里的內容
一些輸入類控件可以直接調用print()函數,一些顯示類的控件可以直接調用render()函數,一些控件不具備這個功能。代碼如下:
void MainWindow::on_btnSave_clicked(){ 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->tableWidget->render(&printer); }}(2)保存某些控件里的內容
這里需要將要保存的所有內容放在一個容器里面,比如放在QWidget上,同樣可以用上面的方式來保存,下面用的是以圖片的方式來保存。代碼如下:
void MainWindow::on_btnSave_clicked(){ QString fileName = QFileDialog::getSaveFileName(this, tr("保存PDF文件"), QString(), "*.pdf"); if (!fileName.isEmpty()) { // 如果文件后綴為空,則默認使用.pdf if (QFileInfo(fileName).suffix().isEmpty()) { fileName.append(".pdf"); } QPrinter printerPixmap(QPrinter::HighResolution); //自定義紙張大小,這里要打印的內容都在stackedWidget上 printerPixmap.setPageSize(QPrinter::Custom); printerPixmap.setPaperSize(QSizeF(ui->stackedWidget->height(), ui->stackedWidget->width()), QPrinter::Point); //設置紙張大小為A4,這里注釋掉了,建議自定義紙張 ,否則保存的就會有很多空白 //printerPixmap.setPageSize(QPrinter::A4); //橫向打印 printerPixmap.setOrientation(QPrinter::Landscape); //設置輸出格式為pdf printerPixmap.setOutputFormat(QPrinter::PdfFormat); //設置輸出路徑 printerPixmap.setOutputFileName(fileName); //獲取界面的圖片 QPixmap pixmap = QPixmap::grabWidget(ui->stackedWidget, ui->stackedWidget->rect()); QPainter painterPixmap; painterPixmap.begin(&printerPixmap); QRect rect = painterPixmap.viewport(); int x = rect.width() / pixmap.width(); int y = rect.height() / pixmap.height(); //將圖像(所有要畫的東西)在pdf上按比例尺縮放 painterPixmap.scale(x, y); //畫圖 painterPixmap.drawPixmap(0, 0, pixmap); painterPixmap.end(); QMessageBox::information(this, tr("生成PDF"), tr("保存PDF文件成功"), QMessageBox::Ok); }}2、瀏覽
Qt沒有提供瀏覽pdf的方式,可以通過使用第三方庫Poppler來實現,這里是相關文件:官網,編譯好的庫文件,所有文件的文件包,實現pdf閱讀器。可以通過官方的源碼來編譯庫,不過可能會非常坎坷。
我試了這個方法,不過沒有成功,(⊙ 主站蜘蛛池模板: 邹城市| 垣曲县| 霍林郭勒市| 高雄县| 岗巴县| 元阳县| 磴口县| 渝中区| 河池市| 武隆县| 开江县| 资中县| 黎城县| 伽师县| 鹤峰县| 邵阳市| 张掖市| 罗源县| 都江堰市| 宝兴县| 太康县| 黄大仙区| 花莲县| 泸水县| 奉节县| 威海市| 象山县| 新干县| 太保市| 合川市| 衢州市| 昌图县| 山东省| 林芝县| 长阳| 盘山县| 中宁县| 二连浩特市| 驻马店市| 循化| 莫力|