Qt 生成word、pdf文件
需求:將軟體處理的結果儲存為一個報告文件,文件中包含表格、圖片、文字,格式為word的.doc和.pdf。生成word是為了便於使用者編輯。
開發環境:qt4.8.4+vs2010
在qt的官網上對於word的操作介紹如下:http://qt-project.org/wiki/Handling_Microsoft_Word_file_format 。即通過Word本身COM元件的形式,Qt的ActiveX框架來實現;還有通過xml來實現。本文主要介紹Qt ActiveX和html格式生成word文件。
下面舉例詳細說明pdf和word文件的生成:
1.pdf的生成
pdf文件裡要求有表格、圖片、文字,參考部落格:
QPrinter printer_text; printer_text.setOutputFormat(QPrinter::PdfFormat); printer_text.setOutputFileName(pdfname);//pdfname為要儲存的pdf檔名 QTextDocument text_document; QString html = GeneratePicWord();//自定義的函式,用來生成html程式碼 text_document.setHtml(html); text_document.print(&printer_text); QTextBlock it = text_document.end();
GeneratePicWord()函式的內容大致如下:
QString html; //文字部分 QDateTime current_date_time = QDateTime::currentDateTime(); QString current_date = current_date_time.toString("yyyy-MM-dd hh:mm:ss ddd"); html += "<h2 align=\"center\">育種管理模組</h2>"; html += "<h4 align=\"center\">" + current_date + "</h2><br>"; //圖片部分 html += "<img align=\"middle\" src = \"" + imagepath + "\" width=\"600\" height=\""+QString::number(showHeight) + "\"/><br>" ; //表格部分 html += "<table align=\"center\" border=\"0.2\" cellspacing=\"0\" cellpadding=\"0\" style=\"width: 100%; height: 100%;\">"; html +="<tr>"; QString fieldname; for ( int i = 0; i < fieldCount; ++i) { fieldname = fields[i].name(); html +="<td bgcolor=\"Silver\">" + fieldname + "</td>"; } html +="</tr></table>";
最後結果得到的pdf如圖:
2.word的生成
書籤主要在表格的第一行前兩列,分別是code,ndvi。表格下面有兩個書籤,分別是pic,pic2。用程式碼插入需要的文字和圖片:
QAxWidget *word = new QAxWidget("Word.Application",this, Qt::MSWindowsOwnDC);
word->setProperty("Visible", true);
//get all documents
QAxObject *documents = word->querySubObject("Documents");
//build a tempetate with .dot file
documents->dynamicCall("Add(QString)", QString::fromLocal8Bit("F:/Id.dot"));
//get the current actived document
QAxObject *document = word->querySubObject("ActiveDocument");
QString code = "code";
QAxObject *bookmark_code = document->querySubObject("Bookmarks(QVariant)", "code");
if ( !bookmark_code->isNull())
{
bookmark_code->dynamicCall("Select(void)");
bookmark_code->querySubObject("Range")->setProperty("Text", "textg");
}
QAxObject *bookmark_ndvi = document->querySubObject("Bookmarks(QVariant)", "ndvi");
if ( !bookmark_ndvi->isNull())
{
bookmark_ndvi->dynamicCall("Select(void)");
bookmark_ndvi->querySubObject("Range")->setProperty("Text", "ndvi");
}
QAxObject *bookmark_ndvi2 = document->querySubObject("Bookmarks(QVariant)", "ndvi");
if ( !bookmark_ndvi2->isNull())
{
bookmark_ndvi2->dynamicCall("Select(void)");
bookmark_ndvi2->querySubObject("Range")->setProperty("Text", "ndvi2");
}
QAxObject *bookmark_pic = document->querySubObject("Bookmarks(QVariant)", "pic");
if ( !bookmark_pic->isNull())
{
bookmark_pic->dynamicCall("Select(void)");
QAxObject *shapes = document->querySubObject("InlineShapes");
shapes->dynamicCall("AddPicture(Const QString&)", "F:\\CND.jpg");
}
document->dynamicCall("SaveAs (const QString&)", QString("F:/testword.doc"));
document->dynamicCall("Close(boolean)", false);
word->dynamicCall("Quit()");
得到的結果就不貼了。存在有兩個問題:1.在生成的word裡圖片的大小非常小,需要人為把它拉大才看得到;2.表格資料只會插入到第一行已經預設好書籤的位置。對於有多條資料,還不知道怎樣動態建立書籤來插入資料。在網上找了些資料,未能很好的通過模板書籤的方式來解決這兩個問題。
那麼想通過上面生成pdf時的html能不能直接儲存為.doc檔案呢?答案是能!而且節約了很多時間,只需一次生成固定格式的html,就可以儲存為pdf和doc檔案,多好的事情啊,為什麼要用Qt ActiveX呢。
當然不能直接把生成pdf的檔名改成doc就行了,還需要做下面一個事情:
QString html;
html += "<html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:w=\"urn:schemas-microsoft-com:office:word\" xmlns=\"http://www.w3.org/TR/REC-html40\"><head><meta http-equiv=Content-Type content=\"text/html; charset=gb2312\" >"; //這句可加可不加。主要是因為我在word裡把doc另存為html檔案後,看到有這麼個頭標籤,由此想到直接將html文件儲存為doc檔案。
html =GeneratePicWord();//該函式同生產pdf文件的一樣
QFile outFile(docname);
outFile.open(QIODevice::WriteOnly | QIODevice::Append );
QTextStream ts(&outFile);
ts<<html<<endl;
主要在後面那4行,將html輸出到doc檔案中去。
得到的結果如圖:
pdf和word的生成就完成了,具體得到的結果可能格式上還需要調整,html對於調格式還是很方便的。
注:轉載請註明出處
相關推薦
Qt 生成word、pdf文件
需求:將軟體處理的結果儲存為一個報告文件,文件中包含表格、圖片、文字,格式為word的.doc和.pdf。生成word是為了便於使用者編輯。 開發環境:qt4.8.4+vs2010 在qt的官網上
將jsp頁面生成word、excel、pdf文件
開發過程中,有時要求將顯示查詢結果的jsp頁面生成word、excel、pdf等型別的文件,甚至可能要求將那些格式的文件下載下來,因為這樣更符合客戶的需求,也更利於他們的辦公使用。 基於此,上網查閱了一些資料,現簡單整理一下,以供自己和大家學習。
Asp.net或C#使用word模板生成替換後的Word和pdf文件-總結
在企業管理專案開發中,經常會有使用給定的模板檔案,以及使用者提交到資料裡的資料,按照一定的格式,生成指定的word和pdf文件。在這裡進行一個總結:注意:(1)要再專案中新增引用:using System.Collections.Generic; using System.
利用python3爬蟲下載圖片、pdf文件
環境 語言環境:python3.6 作業系統:Win10 第三方庫 requests 網際網路上的資源大都是以二進位制形式儲存和運輸的,如圖片、pdf、音訊、視訊等,像.dat、.ts等這些不常用的檔案也都是二進位制。我們知道python3爬蟲是利用爬蟲模擬瀏覽器向服務端傳送請求
Java小技巧自動生成註釋、api文件
cmd 命令 javadoc的使用 win+R彈出執行視窗 輸入cmd回車,進入dos介面,輸入java -version,檢查java是否配置好。如下圖所示 配置好java後,我們新建一個含有公共類的java檔案,在裡面寫點東西。 然後儲存到資料夾test裡面
java對office、pdf文件線上預覽解析(融合進專案中)
最近在專案中要做一個文件的預覽,在網上搜了好多demo,都可以實現其功能,但是放在自己的專案中有點複雜。 先說明本人的開發環境(win7+tomcat7+maven+svn+myeclipse),接下來最直觀的專案需求,如下圖: 當用戶點選預覽的時候能看各種文件,其實在這
aspose利用word模板生成word、PDF
專案需求:表單歸檔時生成表單word、PDF檔案 先上效果圖 1、word模板(部分)書籤 2、生成結果圖 開始上程式碼 Dictionary<string, string> dictSource = new Dictionary<string,
通過swagger2markup+asciidoctorj生成html和pdf文件並解決asciidoctorj生成的pdf檔案中文顯示不全問題(maven方式及java程式碼方式)
通過swagger2markup+asciidoctorj生成html和pdf文件(maven方式及java程式碼方式) 任務:通過同事的json檔案生成相應的html和pdf文件 前言 開始時swagger2markup和asciidocto
利用QT生成Word文件
前段時間因一個專案的需要,需要用Qt生成Word報告,網上查閱並借鑑了相關資料終於解決了基本的問題。本文件中主要是基本資料的填充、資料表格和圖片幾種型別,所以是用word模板(.dot)和書籤進行操作。(網上看有種方法是利用巨集來進行操作,表示不是很懂,哈哈)。 一、
Qt實現生成PDF文件
Qt生成pdf方法網上也有很多,但是大多樹都是單獨生成文字的PDF或者單獨生成圖片的PDF,要把文字和圖片同時生成在一張PDF檔案上還真不那麼容易。 本文采用的兩種方法生成PDF,一種是使用html檔案的方法生成PDF檔案,另一種是採用QPainter繪製的方
java通過url線上預覽Word、excel、ppt、pdf、txt文件中的內容【只獲得其中的文字】
在頁面上顯示各種文件中的內容。在servlet中的邏輯 word: BufferedInputStream bis = null; URL url = null; HttpURLConnection httpUrl = null; // 建立連結 url
java 編碼填充 word 模板生成 word合同,並將word合同轉成pdf 文件
java 編碼填充 word 模板生成 word合同,並將word合同轉成pdf 文件 一、
Qt程序關於路徑、用戶目錄路徑、臨時文件夾位置獲取方法
lis 靜態函數 目錄下的文件 兩個 top 存儲 class ber ron 比如我們有一個程序在: C:/Qt/examples/tools/regexp/regexp.exe 1. 程序所在目錄 QString QCoreApplication::appl
ST MCU生成PDF+文件壓縮解壓
需要 ren aud 文件 無奈 .com 導致 壓縮解壓 str 之前碰到過,STM32F407上做文件壓縮,無奈壓縮文件時,哈夫曼編碼需要耗費很大的RAM,導致失敗。後來在論壇壇主的幫助下,了解了LZ77壓縮。 今天看論壇的時候,了解到MCU上,用pdflib庫,可以做
編輯PDF文件太難的話,只需要將PDF轉換成Word就行了
pdf pdf轉換 word 現在網上下載下來的很多文檔,資料,都是PDF格式的,而我們下載下來,希望可以摘取裏面的一部分內容來使用或者參考,又或者希望能夠修改裏面的一些內容或者數據,那我們應該如何做到呢?我們可以在PDF裏面直接進行編輯,不過這個需要借助其他的軟件,今天我們就不說這方面的方法,我
生成PDF文件
open() nbsp rec order name wid ons fwrite epo @Action("report_exportPdf") public String exportPdf() throws Exception{ //查詢出滿足當前
Java 使用 jacob 將 word 文檔轉換為 pdf 文件
打開文檔 image form 不用 以及 利用 lin sts source 網上查詢了許許多多的博客,說利用 poi、iText、Jsoup、jdoctopdf、使用 jodconverter 來調用 openOffice 的服務來轉換等等,我嘗試了很多種,但要麽顯
史上最強php生成pdf文件,html轉pdf文件方法
是不是 下載地址 註意 pdflib min views 開發者 lan 輸入 之前有個客戶需要把一些html頁面生成pdf文件,然後我就找一些用php把html頁面圍成pdf文件的類。方法是可謂是找了很多很多,什麽html2pdf,pdflib,FPDF這些都試過了,但是
頁面生成PDF文件。。。。
filesize .cn str cat 找到 req 百度網 百度網盤 range 終於找到一個能完美生成pdf文件的包了,TCPDF。 官網:www.tecnick.com 真的是找了好久。 我的百度網盤裏有這個,http://pan.baidu.com/s/1nv