基于spire.doc 根据用户分享的word模板,生成报表并转换成PDF文件

诚然水晶报表已经能实现数据绑定以及一定的布局展示。但是具体格式会跟用户指定的WORD模板格式有出入。比如最简单的Table中字体溢出的换行展示。

客户对展示的格式有严格要求,精确到需要跟分享的WORD文件格式保持一致,没有任何偏差(打印出的pdf需要折叠成信件,信封需要用到地址,这里不允许有任何像素偏差)

基于此需求,选择了对word编辑并保存为pdf格式。

这里采用了 spire.doc中对书签的操作。

获取文档并获取书签和Table

1 //disability note template                                                                                                                                                                           
2                                 Document document = new Document();
3                                 document.LoadFromFile(Path.Combine(disTemplateFolder, @"Disability Note Template.docx"));
4                                 // 初始化BookmarkNavigator类对象
5                                 BookmarksNavigator navigator = new BookmarksNavigator(document);
6                                 Table table = document.Sections[0].Tables[0] as Table;
7                                 Section section = document.Sections[0];
View Code

Table添加一行新数据

 1 TableRow row = new TableRow(document);
 2                                 row = table.Rows[1].Clone();
 3                                 //ID,Claim#,Name,SS#,Birth Date,Claim Type,Eligible Until,Next Update Due
 4                                 for (int i = 0; i < table.Rows[1].Cells.Count; i++)
 5                                 {
 6                                     TableCell tc = row.Cells[i];
 7                                     TableCell lastTc = table.Rows[1].Cells[i];
 8                                     Paragraph paragraph = tc.LastParagraph as Paragraph;
 9                                     if (paragraph != null && !string.IsNullOrEmpty(paragraph.Text))
10                                     {
11                                         switch (i)
12                                         {
13                                             default: paragraph.Text = ""; break;
14                                             case 0: paragraph.Text = "10"; break;
15                                             case 1: paragraph.Text = strClaimNumber; break;//need to generate Claim number
16                                             case 2: paragraph.Text = strName; break;
17                                             case 3: paragraph.Text = strSsnFormated; break;
18                                             case 4: paragraph.Text = strDobFormated; break;
19                                             case 5: paragraph.Text = update.dis_type; break;
20                                             case 6: paragraph.Text = strStartTime; break;
21                                             case 7: paragraph.Text = strEndTime; break;
22                                             case 8: paragraph.Text = strUpdateDueTime; break;
23                                         }
24                                     }
25                                 }
26                                 table.Rows.Add(row);
27                                 table.Rows.RemoveAt(1);
View Code

替换对应书签中的内容,这样就能保持字体以及段落格式一致(尤其定位一致)

1 replaceBookmark(navigator, "CreateDate", strCreateDate);
2                                 replaceBookmark(navigator, "Name", strName);
3                                 replaceBookmark(navigator, "StateAgencyCode", strAgencyCode);
4                                 //replaceBookmark(navigator, "StateAgencyName", "");
5                                 replaceBookmark(navigator, "Staff", strStaff);
6                                 replaceBookmark(navigator, "Address1", strAddress1);
7                                 replaceBookmark(navigator, "Address2", strAddress2);
8                                 replaceBookmark(navigator, "NoteCode", strNoteCode);
View Code

最后保存文件为pdf格式

1  string strGenerateDocx = Path.Combine(disDateMergedFolder, DateTime.Now.ToString("yyyyMMddhhmmssfff_") + strNameAsFile + @"_Note.docx");
2                                 document.SaveToFile(strGenerateDocx);
View Code

有需要合并pdf的可以参考

1 //合并Physician form模板
2                                 Pdf pdfDocument = new Pdf();
3                                 pdfDocument.MergeFiles(strPdfFile, new string[] { strPdfTempFile, Path.Combine(disTemplateFolder, @"Physician Form.pdf") });
4                                 document.Close();
View Code

word模板

实际PDF文件效果。

猜你喜欢

转载自www.cnblogs.com/carlcai/p/10559794.html
今日推荐