using Aspose.Words;
|
|
namespace HStation.WinFrmUI
|
{
|
public static class SimulationAsposeWordHelper
|
{
|
public enum MarkTypeEnum
|
{
|
/// <summary>
|
/// 中括号 [[]]
|
/// </summary>
|
DEFAULT,
|
|
/// <summary>
|
/// 花括号 {{}}
|
/// </summary>
|
CURLYBRACES
|
}
|
|
/// <summary>
|
/// 基于模版新建Word文件
|
/// </summary>
|
/// <param name="stream">模板流</param>
|
public static void OpenTempelteStream(this Document doc, System.IO.Stream stream)
|
{
|
doc = new Document(stream);
|
}
|
|
/// <summary>
|
/// 文本域赋值用法
|
/// </summary>
|
/// <param name="fieldNames">key</param>
|
/// <param name="fieldValues">value</param>
|
public static void ExecuteField(this Document doc, string[] fieldNames, object[] fieldValues)
|
{
|
doc.MailMerge.Execute(fieldNames, fieldValues);
|
}
|
|
/// <summary>
|
/// 文本域赋值用法
|
/// </summary>
|
/// <param name="fieldNames">key</param>
|
/// <param name="fieldValues">value</param>
|
public static void ExecuteField(this Document doc, string fieldName, object fieldValue)
|
{
|
doc.MailMerge.Execute(new string[] { fieldName }, new object[] { fieldValue });
|
}
|
|
/// <summary>
|
/// Doc文件保存
|
/// </summary>
|
/// <param name="filename">文件路径+文件名</param>
|
public static void SaveDocx(this Document doc, string filename)
|
{
|
doc.Save(filename, SaveFormat.Doc);
|
}
|
|
/// <summary>
|
/// 只读
|
/// </summary>
|
public static void ReadOnly(this Document doc)
|
{
|
doc.Protect(ProtectionType.ReadOnly);
|
}
|
|
/// <summary>
|
/// 文本域处理泛型集合赋值
|
/// </summary>
|
/// <typeparam name="TEntity"></typeparam>
|
/// <param name="entity"></param>
|
public static void Execute<TEntity>(this Document doc, TEntity entity)
|
{
|
var type = entity.GetType();
|
var properties = type.GetProperties();
|
List<string> names = new List<string>();
|
List<string> values = new List<string>();
|
foreach (var item in properties)
|
{
|
names.Add(item.Name);
|
values.Add(item.GetValue(entity, null).ToString());
|
}
|
doc.MailMerge.Execute(names.ToArray(), values.ToArray());
|
}
|
|
/// <summary>
|
/// 文本域处理键值对赋值
|
/// </summary>
|
/// <param name="entity"></param>
|
public static void Execute(this Document doc, Dictionary<string, string> entity)
|
{
|
List<string> names = new List<string>();
|
List<string> values = new List<string>();
|
foreach (var item in entity)
|
{
|
names.Add(item.Key);
|
values.Add(item.Value);
|
}
|
doc.MailMerge.Execute(names.ToArray(), values.ToArray());
|
}
|
|
public static Aspose.Words.Font BuilderIni(this Aspose.Words.DocumentBuilder builder,
|
string _defaultFontName = "宋体",
|
int red = 0, int green = 0, int blue = 0,
|
int size = 16
|
)
|
{
|
System.Drawing.Color color = System.Drawing.Color.FromArgb(red, green, blue);
|
|
builder.Font.Color = color;
|
builder.Font.Size = size;
|
builder.Font.Name = _defaultFontName;
|
return builder.Font;
|
}
|
|
/// <summary>
|
/// 设置字体(默认黑色)
|
/// </summary>
|
/// <param name="fontName">字体</param>
|
/// <param name="fontSize">字体大小</param>
|
/// <param name="isBlod">是否加粗(无效)</param>
|
/// <returns></returns>
|
public static Aspose.Words.Font SetBuilderFont(this Aspose.Words.DocumentBuilder builder, string fontName, double fontSize, bool isBlod = false)
|
{
|
builder.Font.Bold = isBlod;
|
builder.Font.Size = fontSize;
|
builder.Font.Name = fontName;
|
builder.Font.Color = System.Drawing.Color.Black;
|
return builder.Font;
|
}
|
|
/// <summary>
|
/// 设置字体
|
/// </summary>
|
/// <param name="fontName">字体</param>
|
/// <param name="fontSize">字体大小</param>
|
/// <param name="color">字体颜色</param>
|
/// <param name="isBlod">是否加粗(无效)</param>
|
/// <returns></returns>
|
public static Aspose.Words.Font SetBuilderFont(this Aspose.Words.DocumentBuilder builder, string fontName, double fontSize, System.Drawing.Color color, bool isBlod = false)
|
{
|
builder.Font.Bold = isBlod;
|
builder.Font.Color = color;
|
builder.Font.Size = fontSize;
|
builder.Font.Name = fontName;
|
return builder.Font;
|
}
|
|
/// <summary>
|
/// 设置纸张
|
/// </summary>
|
/// <param name="builder"></param>
|
/// <param name="orientation">方向</param>
|
/// <param name="topMargin">上边距</param>
|
/// <param name="bottomMargin">下边距</param>
|
/// <param name="leftMargin">左边距</param>
|
/// <param name="rightMargin">右边距</param>
|
public static void SetSheet(this Aspose.Words.DocumentBuilder builder,
|
Aspose.Words.Orientation orientation = Aspose.Words.Orientation.Portrait,
|
double topMargin = 50, double bottomMargin = 50, double leftMargin = 50, double rightMargin = 50)
|
{
|
builder.PageSetup.PaperSize = Aspose.Words.PaperSize.A4;//A4纸
|
builder.PageSetup.Orientation = Aspose.Words.Orientation.Portrait;//方向
|
builder.PageSetup.VerticalAlignment = Aspose.Words.PageVerticalAlignment.Top;//垂直对准
|
builder.PageSetup.LeftMargin = leftMargin;//页面左边距
|
builder.PageSetup.RightMargin = rightMargin;//页面右边距
|
builder.PageSetup.TopMargin = topMargin;
|
builder.PageSetup.BottomMargin = bottomMargin;
|
}
|
|
/// <summary>
|
/// 创建横向合并的单元格
|
/// </summary>
|
/// <param name="builder"></param>
|
/// <param name="text">文本</param>
|
/// <param name="font">字体</param>
|
/// <param name="colspanNum">横向合并格数</param>
|
/// <param name="lineStyle">边框样式</param>
|
/// <param name="isBold">是否加粗</param>
|
/// <param name="isItalic">是否倾斜</param>
|
/// <param name="isUnderline">下划线格式</param>
|
public static void CreateHorizontalMerge(this Aspose.Words.DocumentBuilder builder, string text, int colspanNum, Aspose.Words.ParagraphAlignment alignment,
|
LineStyle lineStyle = LineStyle.Single,
|
LineStyle top = LineStyle.None, LineStyle bottom = LineStyle.None,
|
LineStyle left = LineStyle.None, LineStyle right = LineStyle.None,
|
bool isBold = false, bool isItalic = false, Underline isUnderline = Underline.None)
|
{
|
builder.InsertCell();
|
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
|
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
|
builder.CellFormat.Borders[BorderType.Bottom].LineStyle = bottom;
|
builder.CellFormat.Borders[BorderType.Top].LineStyle = top;
|
builder.CellFormat.Borders[BorderType.Left].LineStyle = left;
|
builder.CellFormat.Borders[BorderType.Right].LineStyle = right;
|
builder.Bold = isBold;
|
builder.Italic = isItalic;
|
builder.Underline = isUnderline;
|
builder.ParagraphFormat.Alignment = alignment;
|
builder.Write(text);
|
for (int i = 0; i < colspanNum; i++)
|
{
|
builder.InsertCell();
|
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
|
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.Previous;
|
}
|
}
|
|
/// <summary>
|
/// 开始纵向合并
|
/// </summary>
|
/// <param name="builder"></param>
|
/// <param name="text">文本</param>
|
/// <param name="font">字体</param>
|
/// <param name="lineStyle">边框样式</param>
|
/// <param name="width">单元格宽</param>
|
/// <param name="isBold">是否加粗</param>
|
/// <param name="isItalic">是否倾斜</param>
|
/// <param name="isUnderline">下划线格式</param>
|
public static void FirstCellVerticalMerge(this Aspose.Words.DocumentBuilder builder, string text, ParagraphAlignment alignment,
|
LineStyle lineStyle = LineStyle.Single, double width = -1,
|
bool isBold = false, bool isItalic = false, Underline isUnderline = Underline.None)
|
{
|
builder.InsertCell();
|
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
|
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.None;
|
builder.CellFormat.Borders.LineStyle = lineStyle;
|
builder.CellFormat.Width = width;
|
builder.Bold = isBold;
|
builder.Italic = isItalic;
|
builder.Underline = isUnderline;
|
builder.ParagraphFormat.Alignment = alignment;
|
builder.Write(text);
|
}
|
|
/// <summary>
|
/// 开始纵向合并(空单元格)
|
/// </summary>
|
/// <param name="builder"></param>
|
/// <param name="lineStyle">边框样式</param>
|
/// <param name="width">单元格宽</param>
|
public static void FirstCellVerticalMerge(this Aspose.Words.DocumentBuilder builder, LineStyle lineStyle = LineStyle.Single, double width = -1)
|
{
|
builder.InsertCell();
|
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
|
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.None;
|
builder.CellFormat.Borders.LineStyle = lineStyle;
|
builder.CellFormat.Width = width;
|
}
|
|
/// <summary>
|
/// 附加纵向合并
|
/// </summary>
|
/// <param name="builder"></param>
|
/// <param name="lineStyle">边框样式</param>
|
/// <param name="width">单元格宽</param>
|
public static void PreviousCellVerticalMerge(this Aspose.Words.DocumentBuilder builder, LineStyle lineStyle = LineStyle.Single, double width = -1)
|
{
|
builder.InsertCell();
|
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
|
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.None;
|
builder.CellFormat.Borders.LineStyle = lineStyle;
|
builder.CellFormat.Width = width;
|
}
|
|
/// <summary>
|
/// 创建单元格(默认左对齐)
|
/// </summary>
|
/// <param name="builder"></param>
|
/// <param name="text">文本</param>
|
/// <param name="font">字体</param>
|
/// <param name="lineStyle">边框样式</param>
|
/// <param name="verticalMerge">垂直格式</param>
|
/// <param name="horizontalMerge">横向格式</param>
|
/// <param name="width">单元格宽</param>
|
/// <param name="isBold">是否加粗</param>
|
/// <param name="isItalic">是否倾斜</param>
|
/// <param name="isUnderline">下划线格式</param>
|
///
|
public static void CreateRowCell(this Aspose.Words.DocumentBuilder builder,
|
string text,
|
LineStyle lineStyle = LineStyle.Single,
|
ParagraphAlignment alignment = ParagraphAlignment.Left,
|
bool isBold = false,
|
Aspose.Words.Tables.CellMerge verticalMerge = Aspose.Words.Tables.CellMerge.None,
|
Aspose.Words.Tables.CellMerge horizontalMerge = Aspose.Words.Tables.CellMerge.None,
|
double width = -1,
|
LineStyle top = LineStyle.None, LineStyle bottom = LineStyle.None,
|
LineStyle left = LineStyle.None, LineStyle right = LineStyle.None,
|
bool isItalic = false, Underline isUnderline = Underline.None)
|
{
|
builder.InsertCell();
|
builder.CellFormat.VerticalMerge = verticalMerge;
|
builder.CellFormat.HorizontalMerge = horizontalMerge;
|
builder.CellFormat.Borders.LineStyle = lineStyle;
|
builder.CellFormat.Borders[BorderType.Bottom].LineStyle = bottom;
|
builder.CellFormat.Borders[BorderType.Top].LineStyle = top;
|
builder.CellFormat.Borders[BorderType.Left].LineStyle = left;
|
builder.CellFormat.Borders[BorderType.Right].LineStyle = right;
|
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;
|
builder.ParagraphFormat.Alignment = alignment;
|
builder.CellFormat.Width = width;
|
//builder.CellFormat.Borders.LineStyle = lineStyle;
|
builder.Bold = isBold;
|
builder.Italic = isItalic;
|
builder.Underline = isUnderline;
|
if (text == null)
|
builder.Write("");
|
else
|
builder.Write(text);
|
}
|
|
public static void CreateRowCellLink(this Aspose.Words.DocumentBuilder builder,
|
string text, string url,
|
LineStyle lineStyle = LineStyle.Single,
|
ParagraphAlignment alignment = ParagraphAlignment.Left,
|
bool isBold = false,
|
Aspose.Words.Tables.CellMerge verticalMerge = Aspose.Words.Tables.CellMerge.None,
|
Aspose.Words.Tables.CellMerge horizontalMerge = Aspose.Words.Tables.CellMerge.None,
|
double width = -1,
|
LineStyle top = LineStyle.None, LineStyle bottom = LineStyle.None,
|
LineStyle left = LineStyle.None, LineStyle right = LineStyle.None,
|
bool isItalic = false, Underline isUnderline = Underline.None)
|
{
|
builder.InsertCell();
|
builder.CellFormat.VerticalMerge = verticalMerge;
|
builder.CellFormat.HorizontalMerge = horizontalMerge;
|
builder.CellFormat.Borders.LineStyle = lineStyle;
|
builder.CellFormat.Borders[BorderType.Bottom].LineStyle = bottom;
|
builder.CellFormat.Borders[BorderType.Top].LineStyle = top;
|
builder.CellFormat.Borders[BorderType.Left].LineStyle = left;
|
builder.CellFormat.Borders[BorderType.Right].LineStyle = right;
|
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;
|
builder.ParagraphFormat.Alignment = alignment;
|
builder.CellFormat.Width = width;
|
builder.Bold = isBold;
|
builder.Italic = isItalic;
|
builder.Underline = isUnderline;
|
|
if (string.IsNullOrEmpty(text))
|
{
|
builder.Write("");
|
}
|
else
|
{
|
var hy = builder.InsertHyperlink(text, url, false);// builder.Write(text);
|
}
|
}
|
|
public static void CreateRowCell(this Aspose.Words.DocumentBuilder builder,
|
double text,
|
LineStyle lineStyle = LineStyle.Single,
|
ParagraphAlignment alignment = ParagraphAlignment.Left,
|
Aspose.Words.Tables.CellMerge verticalMerge = Aspose.Words.Tables.CellMerge.None,
|
Aspose.Words.Tables.CellMerge horizontalMerge = Aspose.Words.Tables.CellMerge.None,
|
LineStyle top = LineStyle.None, LineStyle bottom = LineStyle.None,
|
LineStyle left = LineStyle.None, LineStyle right = LineStyle.None,
|
double width = -1,
|
bool isBold = false, bool isItalic = false, Underline isUnderline = Underline.None)
|
{
|
CreateRowCell(builder, text.ToString(), alignment, lineStyle, verticalMerge, horizontalMerge, top, bottom, left, right, width, isBold);
|
}
|
|
public static void CreateRowCell(this Aspose.Words.DocumentBuilder builder,
|
double? text,
|
LineStyle lineStyle = LineStyle.Single,
|
ParagraphAlignment alignment = ParagraphAlignment.Left,
|
Aspose.Words.Tables.CellMerge verticalMerge = Aspose.Words.Tables.CellMerge.None,
|
Aspose.Words.Tables.CellMerge horizontalMerge = Aspose.Words.Tables.CellMerge.None,
|
LineStyle top = LineStyle.None, LineStyle bottom = LineStyle.None,
|
LineStyle left = LineStyle.None, LineStyle right = LineStyle.None,
|
double width = -1,
|
bool isBold = false, bool isItalic = false, Underline isUnderline = Underline.None)
|
{
|
if (text == null)
|
CreateRowCell(builder, "", alignment, lineStyle, verticalMerge, horizontalMerge, top, bottom, left, right, width, isBold);
|
else
|
CreateRowCell(builder, text.ToString(), alignment, lineStyle, verticalMerge, horizontalMerge, top, bottom, left, right, width, isBold);
|
}
|
|
/// <summary>
|
/// 创建单元格
|
/// </summary>
|
/// <param name="builder"></param>
|
/// <param name="text">文本</param>
|
/// <param name="font">字体</param>
|
/// <param name="alignment">文字位置</param>
|
/// <param name="lineStyle">边框样式</param>
|
/// <param name="verticalMerge">垂直格式</param>
|
/// <param name="horizontalMerge">横向格式</param>
|
/// <param name="width">单元格宽</param>
|
/// <param name="isBold">是否加粗</param>
|
/// <param name="isItalic">是否倾斜</param>
|
/// <param name="isUnderline">下划线格式</param>
|
public static void CreateRowCell(this Aspose.Words.DocumentBuilder builder, string text, ParagraphAlignment alignment,
|
LineStyle lineStyle = LineStyle.Single,
|
Aspose.Words.Tables.CellMerge verticalMerge = Aspose.Words.Tables.CellMerge.None,
|
Aspose.Words.Tables.CellMerge horizontalMerge = Aspose.Words.Tables.CellMerge.None,
|
LineStyle top = LineStyle.None, LineStyle bottom = LineStyle.None,
|
LineStyle left = LineStyle.None, LineStyle right = LineStyle.None,
|
double width = -1,
|
bool isBold = false, bool isItalic = false, Underline isUnderline = Underline.None)
|
{
|
builder.InsertCell();
|
builder.CellFormat.VerticalMerge = verticalMerge;
|
builder.CellFormat.HorizontalMerge = horizontalMerge;
|
//builder.CellFormat.Borders.LineStyle = lineStyle;
|
builder.CellFormat.Borders[BorderType.Bottom].LineStyle = bottom;
|
|
builder.CellFormat.Borders[BorderType.Top].LineStyle = top;
|
builder.CellFormat.Borders[BorderType.Left].LineStyle = left;
|
builder.CellFormat.Borders[BorderType.Right].LineStyle = right;
|
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;
|
builder.ParagraphFormat.Alignment = alignment;
|
builder.CellFormat.Width = width;
|
//builder.CellFormat.Borders.LineStyle = lineStyle;
|
builder.Bold = isBold;
|
builder.Italic = isItalic;
|
builder.Underline = isUnderline;
|
builder.CellFormat.Shading.BackgroundPatternColor = System.Drawing.Color.FromArgb(255, 255, 255);
|
builder.Write(text);
|
}
|
|
/// <summary>
|
/// 创建单元格(带背景颜色)
|
/// </summary>
|
/// <param name="builder"></param>
|
/// <param name="text">文本</param>
|
/// <param name="font">字体</param>
|
/// <param name="alignment">文字位置</param>
|
/// <param name="lineStyle">边框样式</param>
|
/// <param name="verticalMerge">垂直格式</param>
|
/// <param name="horizontalMerge">横向格式</param>
|
/// <param name="width">单元格宽</param>
|
/// <param name="isBold">是否加粗</param>
|
/// <param name="isItalic">是否倾斜</param>
|
/// <param name="red">RGB值</param>
|
/// <param name="green">RGB值</param>
|
/// <param name="blue">RGB值</param>
|
///
|
public static void CreateRowCell_withBackgroundColor(this Aspose.Words.DocumentBuilder builder, string text, ParagraphAlignment alignment,
|
LineStyle lineStyle = LineStyle.Single,
|
Aspose.Words.Tables.CellMerge verticalMerge = Aspose.Words.Tables.CellMerge.None,
|
Aspose.Words.Tables.CellMerge horizontalMerge = Aspose.Words.Tables.CellMerge.None,
|
LineStyle top = LineStyle.None, LineStyle bottom = LineStyle.None,
|
LineStyle left = LineStyle.None, LineStyle right = LineStyle.None,
|
double width = -1, bool isBold = false,
|
string rgbstr = "", bool isItalic = false)
|
{
|
builder.InsertCell();
|
builder.CellFormat.VerticalMerge = verticalMerge;
|
builder.CellFormat.HorizontalMerge = horizontalMerge;
|
//builder.CellFormat.Borders.LineStyle = lineStyle;
|
builder.CellFormat.Borders[BorderType.Bottom].LineStyle = bottom;
|
builder.CellFormat.Borders[BorderType.Top].LineStyle = top;
|
builder.CellFormat.Borders[BorderType.Left].LineStyle = left;
|
builder.CellFormat.Borders[BorderType.Right].LineStyle = right;
|
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;
|
builder.ParagraphFormat.Alignment = alignment;
|
builder.CellFormat.Width = width;
|
//builder.CellFormat.Borders.LineStyle = lineStyle;
|
builder.Bold = isBold;
|
builder.Italic = isItalic;
|
//builder.CellFormat.Shading.ForegroundPatternColor = System.Drawing.Color.FromArgb(255, 255, 255);//设置单元格背景色
|
if (!string.IsNullOrEmpty(rgbstr))
|
{
|
var rgblist = rgbstr.Split(',').ToList();
|
if (rgblist.Count == 3)
|
builder.CellFormat.Shading.BackgroundPatternColor = System.Drawing.Color.FromArgb(Convert.ToInt32(rgblist[0]), Convert.ToInt32(rgblist[1]), Convert.ToInt32(rgblist[2]));//设置单元格背景色
|
}
|
|
//builder.CellFormat.Shading.BackgroundPatternColor = System.Drawing.Color.FromArgb(red, green, blue);//设置单元格背景色
|
//builder.Underline = isUnderline;
|
builder.Write(text);
|
}
|
|
/// <summary>
|
/// 创建空的单元格
|
/// </summary>
|
/// <param name="builder"></param>
|
/// <param name="lineStyle">边框样式</param>
|
/// <param name="verticalMerge">垂直格式</param>
|
/// <param name="horizontalMerge">横向格式</param>
|
/// <param name="width"></param>
|
public static void CreateRowCell(this Aspose.Words.DocumentBuilder builder,
|
LineStyle lineStyle = LineStyle.Single,
|
Aspose.Words.Tables.CellMerge verticalMerge = Aspose.Words.Tables.CellMerge.None,
|
Aspose.Words.Tables.CellMerge horizontalMerge = Aspose.Words.Tables.CellMerge.None,
|
LineStyle top = LineStyle.None, LineStyle bottom = LineStyle.None,
|
LineStyle left = LineStyle.None, LineStyle right = LineStyle.None,
|
double width = -1)
|
{
|
builder.InsertCell();
|
builder.CellFormat.VerticalMerge = verticalMerge;
|
builder.CellFormat.HorizontalMerge = horizontalMerge;
|
//builder.CellFormat.Borders.LineStyle = lineStyle;
|
builder.CellFormat.Borders[BorderType.Bottom].LineStyle = bottom;
|
builder.CellFormat.Borders[BorderType.Top].LineStyle = top;
|
builder.CellFormat.Borders[BorderType.Left].LineStyle = left;
|
builder.CellFormat.Borders[BorderType.Right].LineStyle = right;
|
builder.CellFormat.Shading.BackgroundPatternColor = System.Drawing.Color.FromArgb(255, 255, 255);
|
builder.CellFormat.Width = width;
|
}
|
|
/// <summary>
|
/// Pdf文件保存
|
/// </summary>
|
/// <param name="filename">文件路径+文件名</param>
|
public static void SavePdf(this Document doc, string filename)
|
{
|
doc.Save(filename, SaveFormat.Pdf);
|
}
|
}
|
}
|