Essential DocIO
.NET library capable of reading and writing Microsoft Word files. This component is an object model, similar to the Microsoft Office COM class library. It does not use COM interop and is written in C#. If Microsoft Word is not installed on the system, you can consider this component.
Create new MS Word documents: Supports the creation of MS Word documents containing text, pictures, charts, pages and footers.
Document Formatting: Supports formatting into universal MS Word reports.
Document generation is based on templates: To generate documents based on templates, you can use MS Word GUI to design document reports, and then use DocIO to dynamically fill data into the template files.
Document Properties: Read and write the property settings of Word documents.
Conversion: Supports converting MS Word documents to PDF using Essential PDF.
Advanced features: Supports copying and merging multiple MS Word documents into a single document.
Convert HTML to word
public static byte[] ConvertHtmlToDoc(string html)
{
var document = new WordDocument();
IWSection section = document.AddSection();
IWParagraph para = section.AddParagraph();
string errorMessage = "";
bool valid = section.Body.IsValidXHTML(html, XHTMLValidationType.Strict, out errorMessage);
if (!valid)
throw new InvalidCastException(errorMessage + "<hr>" + html);
document.XHTMLValidateOption = XHTMLValidationType.Strict;
section.Body.InsertXHTML(html);
var outMem = new MemoryStream();
document.Save(outMem, FormatType.Doc);
outMem.Seek(0, SeekOrigin.Begin);
var content = new byte[outMem.Length];
outMem.Read(content, 0, content.Length);
outMem.Dispose();
document.Close();
return content;
}
Replace specified text when generating Word
/// <summary>
/// Replace the specified text when generating Word
/// </summary>
/// <param name="templatePath"></param>
/// <param name="FileName"></param>
/// <param name="replaysDictionary"></param>
public static void ReplaceDocContent(string templateFileName, string newFileName,
Dictionary<string, string> replaysDictionary)
{
IWordDocument document = new WordDocument();
document.Open(templateFileName, FormatType.Doc);
foreach (var rd in replaysDictionary)
{
if (string.IsNullOrEmpty(document.GetText())) continue;
document.Replace(rd.Key, rd.Value, false, false);
while (document.GetText().IndexOf(rd.Key) != -1)
document.Replace(rd.Key, rd.Value, false, false);
}
document.Save(newFileName, FormatType.Doc);
}
Password protect documents
public static Stream SetDocProtect(byte[] docContent, string key)
{
var mem = new MemoryStream(docContent);
mem.Seek(0, SeekOrigin.Begin);
IWordDocument document = new WordDocument(mem, FormatType.Automatic);
document.Protect(ProtectionType.AllowOnlyFormFields, key);
var outMem = new MemoryStream();
document.Save(outMem, FormatType.Doc);
outMem.Seek(0, SeekOrigin.Begin);
return outMem;
}
Create a table at the bookmark location
public static IWTable ReplaceTable(WordDocument document, string bookmarkName, DataTable data, string mergeColName, List<List<string>> mutilTableCaption)
{
if (document == null) throw new ArgumentNullException("document");
if (bookmarkName == null) throw new ArgumentNullException("bookmarkName");
if (data == null) throw new ArgumentNullException("data");
if (data.Columns.Count < 1) throw new ArgumentNullException("data");
int captionCount = mutilTableCaption != null && mutilTableCaption.Count > 0 ? mutilTableCaption.Count : 1;
WTable table = new WTable(document, true);
table.ResetCells(data.Rows.Count + captionCount, data.Columns.Count);
for (var colCount = 0; colCount < captionCount; colCount++)
{
for (var col = 0; col < data.Columns.Count; col++)
{
var paragraph = table.Rows[colCount].Cells[col].AddParagraph();
var caption = data.Columns[col].ColumnName;
if (mutilTableCaption != null && mutilTableCaption.Count > 0)
caption = mutilTableCaption[colCount][col];
var text = paragraph.AppendText(caption);
paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center;
text.CharacterFormat.FontName = "宋体";
text.CharacterFormat.Bold = false;
text.CharacterFormat.FontSize = 10.5f;
}
}
for (var row = captionCount; row <= data.Rows.Count; row++)
for (var col = 0; col < data.Columns.Count; col++)
{
var paragraph = table.Rows[row].Cells[col].AddParagraph();
var text = paragraph.AppendText(data.Rows[row - captionCount][col] + "");
text.CharacterFormat.FontName = "宋体";
text.CharacterFormat.FontSize = 9f;
double val = 0;
if (double.TryParse(text.Text, out val))
{
text.Text = Math.Round(val, 2) + "";
//align right
paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Right;
table.Rows[row].Cells[col].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
table.Rows[row].Cells[col].CellFormat.TextWrap = false;
}
}
//Merge cells, merge downwards
if (!string.IsNullOrEmpty(mergeColName))
for (var row = captionCount; row < table.Rows.Count; row++)
{
var cell = table.Rows[row].Cells[data.Columns[mergeColName].Ordinal];
cell.CellFormat.VerticalMerge = CellMerge.Start;
var text = data.Rows[row - captionCount][mergeColName] + "";
if (row > captionCount)
{
var priorCell = table.Rows[row - captionCount].Cells[data.Columns[mergeColName].Ordinal];
var findText = data.Rows[row - captionCount - 1][mergeColName] + "";
if (text.Equals(findText))
cell.CellFormat.VerticalMerge = CellMerge.Continue;
}
}
BookmarksNavigator bk = new BookmarksNavigator(document);
bk.MoveToBookmark(bookmarkName);
TextBodyPart body= bk.GetBookmarkContent();
bk.DeleteBookmarkContent(true);
bk.InsertTable(table);
return table;
}
-