通过Aspose.Word和ZXING生成复杂的WORD表格
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文件我也做了链接,要是有什么问题可以留言交流。
最新文章
- OCP考点实战演练02-日常维护篇
- python之socket开发
- 记录一个__lll_lock_wait_private错误
- 用js进行日期的加减
- python模拟http请求
- QT-opencv小结
- CSS3之简易的3D模型构建[原创开源]
- ABAP打开TCODE
- mac上的键盘生活——输入法键位设置小技巧以及去掉自带输入法
- C# 点击窗口任意位置拖动
- 基于visual Studio2013解决C语言竞赛题之0705矩阵转置
- iOS切圆角的几个方法
- python编码详解--转自(Alex的博客)
- 浅谈vuex使用方法(vuex简单实用方法)
- jstl,el表达式
- Docket 使用命令
- POJ 3190 Stall Reservations【贪心】
- ios 手机验证码用户注册(倒计时15秒)
- canvas元素绘制太极图
- 算法之LOWB三人组之选择排序
热门文章
- Android开发从系统图库中选择一张图片的方法
- 【起航计划 024】2015 起航计划 Android APIDemo的魔鬼步伐 23 App->;Notification->;IncomingMessage 状态栏通知
- Azure:陪伴你们,是我最长情的告白
- ssh-agent &;&; ssh-agent forward &;&; SSH ProxyCommand
- VOS落地网关前缀优先级
- Multi-modal Sentence Summarization with Modality Attention and Image Filtering 论文笔记
- PDO数据库类——对query()和exec()的异常监听
- 【转】C内存操作函数
- git/github初级运用自如(转自:虫师)
- How To Secure Nginx with Let&#39;s Encrypt on Ubuntu 14.04