reporting.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. #include "reporting.h"
  2. #include "ui_reporting.h"
  3. #include <QDesktopWidget>
  4. #include <QToolBar>
  5. #include <QVBoxLayout>
  6. #include <QAxWidget>
  7. #include <QAxObject>
  8. #include<QDebug>
  9. #include<QFileDialog>
  10. #include<QMessageBox>
  11. Reporting::Reporting(QWidget *parent) :
  12. QWidget(parent),
  13. ui(new Ui::Reporting)
  14. {
  15. ui->setupUi(this);
  16. QToolBar* locToolBar = new QToolBar(tr("报告"),this); //创建工具栏
  17. locToolBar->addAction(ui->saveAction);
  18. connect (ui->saveAction,SIGNAL(triggered(bool)),this,SLOT(fileSave()));
  19. locToolBar->addAction(ui->openAction);
  20. connect (ui->openAction,SIGNAL(triggered(bool)),this,SLOT(openAction()));
  21. locToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
  22. QVBoxLayout *Layout = new QVBoxLayout();//图片合成主界面垂直布局
  23. Layout->addWidget(locToolBar); //设置工具栏和编辑器上下布局
  24. }
  25. Reporting::~Reporting()
  26. {
  27. delete ui;
  28. }
  29. void Reporting::fileSave(){
  30. QString number=ui->numberEdit->text();//字号
  31. QString wtdw=ui->wtdwEdit->text();//委托单位
  32. QString sjr=ui->sjrEdit->text();//送检人
  33. QDate slrqEdit=ui->slrqEdit->date();
  34. QString slrq=QString::number(slrqEdit.year())+"年"+QString::number(slrqEdit.month())+"月"+QString::number(slrqEdit.day())+"日";//送检日期
  35. QString qkzy=ui->qkzyTextEdit->toPlainText();//案(事)件情况摘要
  36. QString jc=ui->jcTextEdit->toPlainText();//检材
  37. QString yb=ui->ybTextEdit->toPlainText();//样本
  38. QString jdyq=ui->jdyqEdit->text();//鉴定要求
  39. QDate jyksrqEdit=ui->jyksrqDateEdit->date();
  40. QString jyksrq=QString::number(jyksrqEdit.year())+"年"+QString::number(jyksrqEdit.month())+"月"+QString::number(jyksrqEdit.day())+"日";//检验开始日期
  41. QString jydd=ui->jyddEdit->text();//检验地点
  42. QString jy=ui->jyTextEdit->toPlainText();//检验
  43. QString jcjy=ui->jcjyTextEdit->toPlainText();//检材检验
  44. QString ybjy=ui->ybjyTextEdit->toPlainText();//样本检验
  45. QString bdjy=ui->bdjyTextEdit->toPlainText();//比对检验
  46. QString lz=ui->lzTextEdit->toPlainText();//论证
  47. QString jdyj=ui->jdyjTextEdit->toPlainText();//鉴定意见
  48. QString fj=ui->fjEdit->text();//附件
  49. QString jdr1=ui->jdr1Edit->text();//鉴定人1
  50. QString jdr2=ui->jdr2Edit->text();//鉴定人2
  51. QString sqqzr=ui->sqqzrEdit->text();//授权签字人
  52. QDate rqEdit=ui->rqDateEdit->date();
  53. QString rq=QString::number(rqEdit.year())+"年"+QString::number(rqEdit.month())+"月"+QString::number(rqEdit.day())+"日";//检验开始日期
  54. QString zp1=ui->zp1Edit->text();//照片1地址
  55. QString zp2=ui->zp2Edit->text();//照片2地址
  56. QString wzbh1=ui->wzbh1Edit->text();//照片2物证编号
  57. QString zp3=ui->zp3Edit->text();//照片3
  58. QString wzbh2=ui->wzbh2Edit->text();//照片3物证编号
  59. QString zp4=ui->zp4Edit->text();//照片4
  60. QString outFileName = QFileDialog::getSaveFileName(this, QStringLiteral("请输入要保存的名字:"),".", "Microsoft Word 97-2003(*.doc);;Microsoft Word 2007-2013(*.docx)");
  61. if (outFileName.isEmpty()) {
  62. QMessageBox::warning(this, tr("警告"),tr("输入的文件名为空!"),QMessageBox::Ok);
  63. return ;
  64. }
  65. // 新建一个word应用程序,并设置为不可见
  66. QAxWidget *word=new QAxWidget("Word.Application", 0, Qt::MSWindowsOwnDC);
  67. word->setProperty("Visible", false);
  68. // 获取所有的工作文档
  69. QAxObject * documents = word->querySubObject("Documents");
  70. // 以文件testTemplate.dot为模版新建一个文档,注意这里的路径为绝对路径
  71. // QDir dir(".");
  72. documents->dynamicCall("Add(QString)",templatePath);
  73. // 获取当前激活的文档
  74. QAxObject *document=word->querySubObject("ActiveDocument");
  75. // 获取文档中名字为number的标签
  76. // QString bookmakrName="number";
  77. QAxObject*numbermark_text=document->querySubObject(QString("Bookmarks(%1)").arg("number").toLocal8Bit().data());
  78. // 选中标签,将字符插入到标签位置
  79. if(!numbermark_text->isNull())
  80. {
  81. numbermark_text->dynamicCall("Select(void)");
  82. numbermark_text->querySubObject("Range")->setProperty("Text",number);
  83. }
  84. QAxObject*wtdwmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("wtdw").toLocal8Bit().data());
  85. // 选中标签,将字符插入到标签位置
  86. if(!wtdwmark_text->isNull())
  87. {
  88. wtdwmark_text->dynamicCall("Select(void)");
  89. wtdwmark_text->querySubObject("Range")->setProperty("Text",wtdw);
  90. }
  91. QAxObject*sjrmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("sjr").toLocal8Bit().data());
  92. // 选中标签,将字符插入到标签位置
  93. if(!sjrmark_text->isNull())
  94. {
  95. sjrmark_text->dynamicCall("Select(void)");
  96. sjrmark_text->querySubObject("Range")->setProperty("Text",sjr);
  97. }
  98. QAxObject*slrqmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("slrq").toLocal8Bit().data());
  99. // 选中标签,将字符插入到标签位置
  100. if(!slrqmark_text->isNull())
  101. {
  102. slrqmark_text->dynamicCall("Select(void)");
  103. slrqmark_text->querySubObject("Range")->setProperty("Text",slrq);
  104. }
  105. QAxObject*qkzymark_text=document->querySubObject(QString("Bookmarks(%1)").arg("qkzy").toLocal8Bit().data());
  106. // 选中标签,将字符插入到标签位置
  107. if(!qkzymark_text->isNull())
  108. {
  109. qkzymark_text->dynamicCall("Select(void)");
  110. qkzymark_text->querySubObject("Range")->setProperty("Text",qkzy);
  111. }
  112. QAxObject*jcmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("jc").toLocal8Bit().data());
  113. // 选中标签,将字符插入到标签位置
  114. if(!jcmark_text->isNull())
  115. {
  116. jcmark_text->dynamicCall("Select(void)");
  117. jcmark_text->querySubObject("Range")->setProperty("Text",jc);
  118. }
  119. // 获取文档中名字为number的标签
  120. QAxObject*ybmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("yb").toLocal8Bit().data());
  121. // 选中标签,将字符插入到标签位置
  122. if(!ybmark_text->isNull())
  123. {
  124. ybmark_text->dynamicCall("Select(void)");
  125. ybmark_text->querySubObject("Range")->setProperty("Text",yb);
  126. }
  127. QAxObject*jdyqmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("jdyq").toLocal8Bit().data());
  128. // 选中标签,将字符插入到标签位置
  129. if(!jdyqmark_text->isNull())
  130. {
  131. jdyqmark_text->dynamicCall("Select(void)");
  132. jdyqmark_text->querySubObject("Range")->setProperty("Text",jdyq);
  133. }
  134. QAxObject*jyksrqmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("jyksrq").toLocal8Bit().data());
  135. // 选中标签,将字符插入到标签位置
  136. if(!jyksrqmark_text->isNull())
  137. {
  138. jyksrqmark_text->dynamicCall("Select(void)");
  139. jyksrqmark_text->querySubObject("Range")->setProperty("Text",jyksrq);
  140. }
  141. QAxObject*jyddmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("jydd").toLocal8Bit().data());
  142. // 选中标签,将字符插入到标签位置
  143. if(!jyddmark_text->isNull())
  144. {
  145. jyddmark_text->dynamicCall("Select(void)");
  146. jyddmark_text->querySubObject("Range")->setProperty("Text",jydd);
  147. }
  148. QAxObject*jymark_text=document->querySubObject(QString("Bookmarks(%1)").arg("jy").toLocal8Bit().data());
  149. // 选中标签,将字符插入到标签位置
  150. if(!jymark_text->isNull())
  151. {
  152. jymark_text->dynamicCall("Select(void)");
  153. jymark_text->querySubObject("Range")->setProperty("Text",jy);
  154. }
  155. QAxObject*jcjymark_text=document->querySubObject(QString("Bookmarks(%1)").arg("jcjy").toLocal8Bit().data());
  156. // 选中标签,将字符插入到标签位置
  157. if(!jcjymark_text->isNull())
  158. {
  159. jcjymark_text->dynamicCall("Select(void)");
  160. jcjymark_text->querySubObject("Range")->setProperty("Text",jcjy);
  161. }
  162. QAxObject*ybjymark_text=document->querySubObject(QString("Bookmarks(%1)").arg("ybjy").toLocal8Bit().data());
  163. // 选中标签,将字符插入到标签位置
  164. if(!ybjymark_text->isNull())
  165. {
  166. ybjymark_text->dynamicCall("Select(void)");
  167. ybjymark_text->querySubObject("Range")->setProperty("Text",ybjy);
  168. }
  169. QAxObject*bdjymark_text=document->querySubObject(QString("Bookmarks(%1)").arg("bdjy").toLocal8Bit().data());
  170. // 选中标签,将字符插入到标签位置
  171. if(!bdjymark_text->isNull())
  172. {
  173. bdjymark_text->dynamicCall("Select(void)");
  174. bdjymark_text->querySubObject("Range")->setProperty("Text",bdjy);
  175. }
  176. QAxObject*lzmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("lz").toLocal8Bit().data());
  177. // 选中标签,将字符插入到标签位置
  178. if(!lzmark_text->isNull())
  179. {
  180. lzmark_text->dynamicCall("Select(void)");
  181. lzmark_text->querySubObject("Range")->setProperty("Text",lz);
  182. }
  183. QAxObject*jdyjmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("jdyj").toLocal8Bit().data());
  184. // 选中标签,将字符插入到标签位置
  185. if(!jdyjmark_text->isNull())
  186. {
  187. jdyjmark_text->dynamicCall("Select(void)");
  188. jdyjmark_text->querySubObject("Range")->setProperty("Text",jdyj);
  189. }
  190. QAxObject*fjmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("fj").toLocal8Bit().data());
  191. // 选中标签,将字符插入到标签位置
  192. if(!fjmark_text->isNull())
  193. {
  194. fjmark_text->dynamicCall("Select(void)");
  195. fjmark_text->querySubObject("Range")->setProperty("Text",fj);
  196. }
  197. QAxObject*jdr1mark_text=document->querySubObject(QString("Bookmarks(%1)").arg("jdr1").toLocal8Bit().data());
  198. // 选中标签,将字符插入到标签位置
  199. if(!jdr1mark_text->isNull())
  200. {
  201. jdr1mark_text->dynamicCall("Select(void)");
  202. jdr1mark_text->querySubObject("Range")->setProperty("Text",jdr1);
  203. }
  204. QAxObject*jdr2mark_text=document->querySubObject(QString("Bookmarks(%1)").arg("jdr2").toLocal8Bit().data());
  205. // 选中标签,将字符插入到标签位置
  206. if(!jdr2mark_text->isNull())
  207. {
  208. jdr2mark_text->dynamicCall("Select(void)");
  209. jdr2mark_text->querySubObject("Range")->setProperty("Text",jdr2);
  210. }
  211. QAxObject*sqqzrmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("sqqzr").toLocal8Bit().data());
  212. // 选中标签,将字符插入到标签位置
  213. if(!sqqzrmark_text->isNull())
  214. {
  215. sqqzrmark_text->dynamicCall("Select(void)");
  216. sqqzrmark_text->querySubObject("Range")->setProperty("Text",sqqzr);
  217. }
  218. QAxObject*rqmark_text=document->querySubObject(QString("Bookmarks(%1)").arg("rq").toLocal8Bit().data());
  219. // 选中标签,将字符插入到标签位置
  220. if(!rqmark_text->isNull())
  221. {
  222. rqmark_text->dynamicCall("Select(void)");
  223. rqmark_text->querySubObject("Range")->setProperty("Text",rq);
  224. }
  225. QAxObject*zp1mark_pic=document->querySubObject("Bookmarks(QVariant)","zp1");
  226. // 选中标签,将字符插入到标签位置
  227. if(!zp1mark_pic->isNull())
  228. {
  229. zp1mark_pic->dynamicCall("Select(void)");
  230. QAxObject *range;
  231. range = zp1mark_pic->querySubObject("Range");
  232. QVariant tmp = range->asVariant();
  233. QList<QVariant>qList;
  234. qList<<QVariant(zp1);
  235. qList<<QVariant(false);
  236. qList<<QVariant(true);
  237. qList<<tmp;
  238. QAxObject *Inlineshapes = document->querySubObject("InlineShapes");
  239. Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
  240. // zp1mark_pic->querySubObject("Range")->setProperty("Text",zp1);
  241. }
  242. QAxObject*zp2mark_pic=document->querySubObject("Bookmarks(QVariant)","zp2");
  243. // 选中标签,将字符插入到标签位置
  244. if(!zp2mark_pic->isNull())
  245. {
  246. zp2mark_pic->dynamicCall("Select(void)");
  247. QAxObject *range;
  248. range = zp2mark_pic->querySubObject("Range");
  249. QVariant tmp = range->asVariant();
  250. QList<QVariant>qList;
  251. qList<<QVariant(zp2);
  252. qList<<QVariant(false);
  253. qList<<QVariant(true);
  254. qList<<tmp;
  255. QAxObject *Inlineshapes = document->querySubObject("InlineShapes");
  256. Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
  257. }
  258. QAxObject*wzbh1mark_text=document->querySubObject(QString("Bookmarks(%1)").arg("wzbh1").toLocal8Bit().data());
  259. // 选中标签,将字符插入到标签位置
  260. if(!wzbh1mark_text->isNull())
  261. {
  262. wzbh1mark_text->dynamicCall("Select(void)");
  263. wzbh1mark_text->querySubObject("Range")->setProperty("Text",wzbh1);
  264. }
  265. QAxObject*zp3mark_pic=document->querySubObject("Bookmarks(QVariant)","zp3");
  266. // 选中标签,将字符插入到标签位置
  267. if(!zp3mark_pic->isNull())
  268. {
  269. zp3mark_pic->dynamicCall("Select(void)");
  270. QAxObject *range;
  271. range = zp3mark_pic->querySubObject("Range");
  272. QVariant tmp = range->asVariant();
  273. QList<QVariant>qList;
  274. qList<<QVariant(zp3);
  275. qList<<QVariant(false);
  276. qList<<QVariant(true);
  277. qList<<tmp;
  278. QAxObject *Inlineshapes = document->querySubObject("InlineShapes");
  279. Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
  280. }
  281. QAxObject*wzbh2mark_text=document->querySubObject(QString("Bookmarks(%1)").arg("wzbh2").toLocal8Bit().data());
  282. // 选中标签,将字符插入到标签位置
  283. if(!wzbh2mark_text->isNull())
  284. {
  285. wzbh2mark_text->dynamicCall("Select(void)");
  286. wzbh2mark_text->querySubObject("Range")->setProperty("Text",wzbh2);
  287. }
  288. QAxObject*zp4mark_pic=document->querySubObject("Bookmarks(QVariant)","zp4");
  289. // 选中标签,将字符插入到标签位置
  290. if(!zp4mark_pic->isNull())
  291. {
  292. zp4mark_pic->dynamicCall("Select(void)");
  293. QAxObject *range;
  294. range = zp4mark_pic->querySubObject("Range");
  295. QVariant tmp = range->asVariant();
  296. QList<QVariant>qList;
  297. qList<<QVariant(zp4);
  298. qList<<QVariant(false);
  299. qList<<QVariant(true);
  300. qList<<tmp;
  301. QAxObject *Inlineshapes = document->querySubObject("InlineShapes");
  302. Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
  303. }
  304. // 将文件另存为outFileName,关闭工作文档,退出应用程序
  305. document->dynamicCall("SaveAs (const QString&)", outFileName);
  306. document->dynamicCall("Close (boolean)", true); //关闭文本窗口
  307. word->dynamicCall("Quit(void)"); //退出word
  308. QMessageBox::information(this, tr("消息"),tr("报告生成成功!"),QMessageBox::Ok);
  309. // delete bookmark_text;
  310. delete document;
  311. delete documents;
  312. delete word;
  313. }
  314. void Reporting::on_zp1Button_clicked()
  315. {
  316. //定义文件对话框类
  317. QFileDialog *fileDialog = new QFileDialog(this);
  318. //定义文件对话框标题
  319. fileDialog->setWindowTitle(tr("选择图片"));
  320. //设置默认文件路径
  321. fileDialog->setDirectory(".");
  322. //设置文件过滤器
  323. fileDialog->setNameFilter(tr("Images(*.png *.jpg *.jpeg *.bmp)"));
  324. //设置可以选择多个文件,默认为只能选择一个文件QFileDialog::ExistingFiles
  325. fileDialog->setFileMode(QFileDialog::ExistingFiles);
  326. //设置视图模式
  327. fileDialog->setViewMode(QFileDialog::Detail);
  328. ui->zp1Edit->setText(QString(QFileDialog::getOpenFileName(this, tr("Open File"), ".", tr("Images (*.png *.xpm *.jpg)"))));
  329. }
  330. void Reporting::on_zp2Button_clicked()
  331. {
  332. //定义文件对话框类
  333. QFileDialog *fileDialog = new QFileDialog(this);
  334. //定义文件对话框标题
  335. fileDialog->setWindowTitle(tr("选择图片"));
  336. //设置默认文件路径
  337. fileDialog->setDirectory(".");
  338. //设置文件过滤器
  339. fileDialog->setNameFilter(tr("Images(*.png *.jpg *.jpeg *.bmp)"));
  340. //设置可以选择多个文件,默认为只能选择一个文件QFileDialog::ExistingFiles
  341. fileDialog->setFileMode(QFileDialog::ExistingFiles);
  342. //设置视图模式
  343. fileDialog->setViewMode(QFileDialog::Detail);
  344. ui->zp2Edit->setText(QString(QFileDialog::getOpenFileName(this, tr("Open File"), ".", tr("Images (*.png *.xpm *.jpg)"))));
  345. }
  346. void Reporting::on_pushButton_3_clicked()
  347. {
  348. //定义文件对话框类
  349. QFileDialog *fileDialog = new QFileDialog(this);
  350. //定义文件对话框标题
  351. fileDialog->setWindowTitle(tr("选择图片"));
  352. //设置默认文件路径
  353. fileDialog->setDirectory(".");
  354. //设置文件过滤器
  355. fileDialog->setNameFilter(tr("Images(*.png *.jpg *.jpeg *.bmp)"));
  356. //设置可以选择多个文件,默认为只能选择一个文件QFileDialog::ExistingFiles
  357. fileDialog->setFileMode(QFileDialog::ExistingFiles);
  358. //设置视图模式
  359. fileDialog->setViewMode(QFileDialog::Detail);
  360. ui->zp3Edit->setText(QString(QString(QFileDialog::getOpenFileName(this, tr("Open File"), ".", tr("Images (*.png *.xpm *.jpg)")))));
  361. }
  362. void Reporting::on_zp4Button_clicked()
  363. {
  364. //定义文件对话框类
  365. QFileDialog *fileDialog = new QFileDialog(this);
  366. //定义文件对话框标题
  367. fileDialog->setWindowTitle(tr("选择图片"));
  368. //设置默认文件路径
  369. fileDialog->setDirectory(".");
  370. //设置文件过滤器
  371. fileDialog->setNameFilter(tr("Images(*.png *.jpg *.jpeg *.bmp)"));
  372. //设置可以选择多个文件,默认为只能选择一个文件QFileDialog::ExistingFiles
  373. fileDialog->setFileMode(QFileDialog::ExistingFiles);
  374. //设置视图模式
  375. fileDialog->setViewMode(QFileDialog::Detail);
  376. ui->zp4Edit->setText(QString(QString(QFileDialog::getOpenFileName(this, tr("Open File"), ".", tr("Images (*.png *.xpm *.jpg)")))));
  377. }
  378. void Reporting::openAction()
  379. {
  380. //定义文件对话框类
  381. QFileDialog *fileDialog = new QFileDialog(this);
  382. //定义文件对话框标题
  383. fileDialog->setWindowTitle(tr("选择文件"));
  384. //设置默认文件路径
  385. fileDialog->setDirectory(".");
  386. //设置文件过滤器
  387. fileDialog->setNameFilter(tr("dot(*.dot)"));
  388. //设置可以选择多个文件,默认为只能选择一个文件QFileDialog::ExistingFiles
  389. fileDialog->setFileMode(QFileDialog::ExistingFiles);
  390. //设置视图模式
  391. fileDialog->setViewMode(QFileDialog::Detail);
  392. templatePath=QString(QString(QFileDialog::getOpenFileName(this, tr("Open File"), ".", tr("dot(*.dot)"))));
  393. if(templatePath!=nullptr)
  394. QMessageBox::information(this, tr("消息"),tr("模板加载成功!"),QMessageBox::Ok);
  395. }