个人网站建设方法,网站制作过程合理的步骤是( ),搭建小程序需要什么样的服务器,西安seo关键词排名优化需求#xff1a;将软件处理的结果保存为一个报告文档#xff0c;文档中包含表格、图片、文字#xff0c;格式为word的.doc和.pdf。生成word是为了便于用户编辑。
开发环境#xff1a;qt4.8.4vs2010
在qt的官网上对于pdf的操作介绍如下#xff1a;http://qt-project.org/…需求将软件处理的结果保存为一个报告文档文档中包含表格、图片、文字格式为word的.doc和.pdf。生成word是为了便于用户编辑。
开发环境qt4.8.4vs2010
在qt的官网上对于pdf的操作介绍如下http://qt-project.org/wiki/Handling_PDF 。即通过QPrinter类来创建pdf还有通过第三方库PoDoFo、Hummus。本文主要介绍的是用QPrinter类来创建pdf。
在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文档里要求有表格、图片、文字参考博客http://blog.sina.com.cn/s/blog_a6fb6cc90101gvnx.html。里面有介绍文字、图片、表格分别是怎样通过QPrinter类来实现的。但是遇到一个麻烦就是怎样把这三种格式的东西放在一起而且排版好呢用上述博客里的方法尝试之后最终确定使用第三种生成表格html格式的方式来得到
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 /h2br;
//图片部分
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; 2.word的生成
word的生成可以用QActiveX来实现。博客http://www.360doc.com/content/14/0227/16/7918060_356177077.shtml里说的比较详细了。首先新建一个模板文件Id.dot在模板文件中事先“插入”-》“书签”如下图所示 书签主要在表格的第一行前两列分别是code,ndvi。表格下面有两个书签分别是picpic2。用代码插入需要的文字和图片 QAxWidget *word new QAxWidget(Word.Application,this, Qt::MSWindowsOwnDC);word-setProperty(Visible, true);//get all documentsQAxObject *documents word-querySubObject(Documents);//build a tempetate with .dot filedocuments-dynamicCall(Add(QString), QString::fromLocal8Bit(F:/Id.dot));//get the current actived documentQAxObject *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());
只会插入到第一行已经预设好书签的位置。对于有多条数据还不知道怎样动 态创建 书签来插入数据。在网上找了些资料未能很好的通过模板书签的方式来解决这两个问题。 那么想通过上面生成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\headmeta http-equivContent-Type content\text/html; charsetgb2312\ ; //这句可加可不加。主要是因为我在word里把doc另存为html文件后看到有这么个头标签由此想到直接将html文档保存为doc文件。
html GeneratePicWord();//该函数同生产pdf文档的一样QFile outFile(docname);
outFile.open(QIODevice::WriteOnly | QIODevice::Append );
QTextStream ts(outFile);
tshtmlendl;
主要在后面那4行将html输出到doc文件中去。 得到的结果如图