1.前言

  这是我之前做的一个项目中要求的功能模块,它的需求是生成一个WORD文档,需要每页一个表格并且表格中需要插入文字、条形码和二维码等信息,页数可控制。具体的效果如下图所示:

  可以看到有以下几点是我需要解决的重点:

  1.如何生成WORD并插入表格和文字;

  2.如何合并表格的单元格;

  3.如何生成二维码和条形码并且插入到表格中;

  4.如何对WORD分页;

  可以说只要解决了这几点这个功能就解决了,一开始我是想用Microsoft.Office.Interop.Word来生成WORD的但是感觉比较的麻烦并且之前没有使用过,但是Aspose是有接触的感觉比较的好用,就决定使用Aspose.Word来完成这个WORD的生成,接着在网上找了一个比较好的zxing来生成二维码和条形码图片。接着就来一步一步的解决问题啦。

2.具体的解决方法

(1)如何生成WORD并插入表格和文字

  首先先引用Aspose.Word.dll,然后生成一个Document的对象并初始化到DocumentBuilder对象中用于编辑文字、样式、表格等内容。具体的代码如下所示:

var doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
//编辑文档样式
builder.CellFormat.VerticalAlignment=CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
Aspose.Words.Font font = builder.Font;
//编辑文字样式和插入文字,Writeln问插入并换行,Write只是插入文字
font.Size = ;
font.Bold = true;
font.Name = "Arial";
builder.Writeln("工序流转卡");
ont.Bold = false;
font.Size = ;
builder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
builder.Write("流水号:");

  接着需要插入表格,这里是DocumentBuilder有StartTable方法可以开始创建表格和EndTable方法结束创建表格,之后由InsertCell方法插入单元格,并以EndRow结束该行的创建,后用Save方法保存为数据流的形式传送就好了。具体代码如下所示:

//表格开始编辑
builder.StartTable();
//编辑行样式
builder.RowFormat.Alignment = RowAlignment.Center;
builder.RowFormat.Height = ;
//编辑单元格样式
builder.CellFormat.Width = ;
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = Color.Black;
//循环插入单元格
for (int i = ; i < colName.Count(); i++)
{
builder.InsertCell();
builder.CellFormat.Width = colWidth[i];
builder.Write(colName[i]);
}
//行插入结束
builder.EndRow();
//表格结束编辑
builder.EndTable();
//保存文件
var docStream = new MemoryStream();
doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc));

  这样一个最为基本的WORD就完成啦。

(2)如何合并表格的单元格

  单元格的合并主要使用DocumentBuilder.CellFormat.VerticalMerge的属性设置,有CellMerge.None、CellMerge.First和CellMerge.Previous。这个就直接贴代码如下:

builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.VerticalMerge = CellMerge.First;//合并的最顶部的单元格用First
builder.CellFormat.Width = ;
builder.Write(colBottomNam[i]);
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.VerticalMerge = CellMerge.First;
builder.CellFormat.Width = ;
builder.Write("");
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.VerticalMerge = CellMerge.None;//不合并的单元格设置为None
builder.CellFormat.Width = ;
builder.Write("检验员");
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.CellFormat.Width = ;
builder.Write("");
builder.EndRow(); builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.VerticalMerge = CellMerge.Previous;//除合并的最顶部的单元格外其他合并单元格全部设置为Previous
builder.CellFormat.Width = ;
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.VerticalMerge = CellMerge.Previous;
builder.CellFormat.Width = ;
builder.Write("");
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.CellFormat.Width = ;
builder.Write("日期");
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.CellFormat.Width = ;
builder.Write("");
builder.EndRow();

(3)如何生成二维码和条形码并且插入到表格中

  二维码和条形码的生成这里引用了zxing.dll,可以选择生成二维码或者条形码并且设置相应的参数,如宽高和编码格式等。图片的插入有DocumentBuilder.InsertImage这个方法有多个重载,我这里选择通过数据流的方式传入,所以二维码和条形码生成后需要转为相应的形式。代码如下所示:

//条形码生成
public Stream CreateTxm(string str)
{
//设置条形码规格
EncodingOptions encodeOption = new EncodingOptions();
//设置宽和高
encodeOption.Height = ;
encodeOption.Width = ;
BarcodeWriter wr = new BarcodeWriter();
wr.Options = encodeOption;
//条形码:根据自己的需要选择条形码格式
//wr.Format = BarcodeFormat.CODE_39;
wr.Format = BarcodeFormat.CODE_128;
//生成条形码
Bitmap image = wr.Write(str);
MemoryStream stream = new MemoryStream();
image.Save(stream, ImageFormat.Jpeg);
return stream;
} //二维码生成
public Stream CreateQr(string str)
{
//设置QR二维码的规格
QrCodeEncodingOptions qrEncodeOption = new QrCodeEncodingOptions();
//设置编码格式,否则中文乱码
qrEncodeOption.CharacterSet = "UTF-8";
//设置宽和高
qrEncodeOption.Height = ;
qrEncodeOption.Width = ;
//设置周围空白边距
qrEncodeOption.Margin = ;
BarcodeWriter wr = new BarcodeWriter();
//二维码
wr.Format = BarcodeFormat.QR_CODE;
wr.Options = qrEncodeOption;
//生成二维码
Bitmap image = wr.Write(str);
MemoryStream stream = new MemoryStream();
image.Save(stream, ImageFormat.Jpeg);
return stream;
}

(4)如何对WORD分页

  分页的话只用一行代码就行了,直接贴代码:

builder.InsertBreak(BreakType.PageBreak);//插入分页符

3.总结

  上述用到了基本的Aspose.WORD生成WORD文件的基本方法,最后的生成方法我就不汇总了,大家根据自己的情况自行处理吧,当然还有更复杂的表格等内容的生成,我这里没有提到,相应的DLL文件我也做了链接,要是有什么问题可以留言交流。

最新文章

  1. OCP考点实战演练02-日常维护篇
  2. python之socket开发
  3. 记录一个__lll_lock_wait_private错误
  4. 用js进行日期的加减
  5. python模拟http请求
  6. QT-opencv小结
  7. CSS3之简易的3D模型构建[原创开源]
  8. ABAP打开TCODE
  9. mac上的键盘生活——输入法键位设置小技巧以及去掉自带输入法
  10. C# 点击窗口任意位置拖动
  11. 基于visual Studio2013解决C语言竞赛题之0705矩阵转置
  12. iOS切圆角的几个方法
  13. python编码详解--转自(Alex的博客)
  14. 浅谈vuex使用方法(vuex简单实用方法)
  15. jstl,el表达式
  16. Docket 使用命令
  17. POJ 3190 Stall Reservations【贪心】
  18. ios 手机验证码用户注册(倒计时15秒)
  19. canvas元素绘制太极图
  20. 算法之LOWB三人组之选择排序

热门文章

  1. Android开发从系统图库中选择一张图片的方法
  2. 【起航计划 024】2015 起航计划 Android APIDemo的魔鬼步伐 23 App-&gt;Notification-&gt;IncomingMessage 状态栏通知
  3. Azure:陪伴你们,是我最长情的告白
  4. ssh-agent &amp;&amp; ssh-agent forward &amp;&amp; SSH ProxyCommand
  5. VOS落地网关前缀优先级
  6. Multi-modal Sentence Summarization with Modality Attention and Image Filtering 论文笔记
  7. PDO数据库类——对query()和exec()的异常监听
  8. 【转】C内存操作函数
  9. git/github初级运用自如(转自:虫师)
  10. How To Secure Nginx with Let&#39;s Encrypt on Ubuntu 14.04