Основной документ DocIO
Библиотека .NET, способная читать и писать файлы Microsoft Word. Этот компонент представляет собой объектную модель, аналогичную библиотеке классов Microsoft Office COM. Он не использует COM-взаимодействие и написан на C#. Если Microsoft Word не установлен в системе, вы можете рассмотреть этот компонент.
Создание новых документов MS Word: поддерживает создание документов MS Word, содержащих текст, изображения, диаграммы, страницы и нижние колонтитулы.
Форматирование документа: поддерживает форматирование в универсальные отчеты MS Word.
Генерация документов основана на шаблонах. Чтобы создавать документы на основе шаблонов, вы можете использовать графический интерфейс MS Word для создания отчетов о документах, а затем использовать DocIO для динамического заполнения данных в файлах шаблонов.
Свойства документа: чтение и запись настроек свойств документов Word.
Преобразование: поддерживает преобразование документов MS Word в PDF с помощью Essential PDF.
Расширенные возможности: поддерживает копирование и объединение нескольких документов MS Word в один документ.
Конвертировать HTML в Word
общедоступный статический байт [] ConvertHtmlToDoc (строка html)
{
вар документ = новый WordDocument ();
Раздел IWSection = document.AddSection();
Параграф IWParagraph = раздел.AddParagraph();
строка errorMessage = "";
bool valid = раздел.Body.IsValidXHTML(html, XHTMLValidationType.Strict, out errorMessage);
если (!действительно)
выдать новое InvalidCastException(errorMessage + "<hr>" + html);
document.XHTMLValidateOption = XHTMLValidationType.Strict;
раздел.Body.InsertXHTML(html);
вар outMem = новый MemoryStream();
документ.Сохранить(outMem, FormatType.Doc);
outMem.Seek(0, SeekOrigin.Begin);
вар содержимое = новый байт [outMem.Length];
outMem.Read(content, 0, content.Length);
outMem.Dispose();
документ.Закрыть();
возврат контента;
}
Заменить указанный текст при создании Word
/// <сводка>
/// Заменяем указанный текст при генерации Word
/// </сводка>
/// <param name="templatePath"></param>
/// <param name="FileName"></param>
/// <param name="replaysDictionary"></param>
public static void replaceDocContent(string templateFileName, string newFileName,
Словарь<строка, строка> replaysDictionary)
{
Документ IWordDocument = новый WordDocument();
документ.Открыть(ИмяФайлаШаблона, ТипФормата.Док);
foreach (var rd в replaysDictionary)
{
если (string.IsNullOrEmpty(document.GetText())) продолжить;
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);
}
Защита документов паролем
общедоступный статический поток SetDocProtect (байт [] docContent, строковый ключ)
{
вар мем = новый MemoryStream (docContent);
mem.Seek(0, SeekOrigin.Begin);
Документ IWordDocument = новый WordDocument(mem, FormatType.Automatic);
document.Protect(ProtectionType.AllowOnlyFormFields, ключ);
вар outMem = новый MemoryStream();
документ.Сохранить(outMem, FormatType.Doc);
outMem.Seek(0, SeekOrigin.Begin);
вернуть outMem;
}
Создайте таблицу в месте закладки
public static IWTable replaceTable (документ WordDocument, строка bookmarkName, данные DataTable, строка mergeColName, List<List<string>> mutilTableCaption)
{
if (document == null) выдать новое ArgumentNullException("document");
if (bookmarkName == null) создать новое исключение ArgumentNullException("bookmarkName");
if (data == null) выдать новое ArgumentNullException("data");
if (data.Columns.Count <1) выдать новое ArgumentNullException("данные");
int captionCount = mutilTableCaption!= null && mutilTableCaption.Count > 0? mutilTableCaption.Count: 1;
Таблица WTable = новая WTable (документ, правда);
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 абзац = table.Rows[colCount].Cells[col].AddParagraph();
var caption = data.Columns[col].ColumnName;
if (mutilTableCaption != null && mutilTableCaption.Count > 0)
заголовок = mutilTableCaption[colCount][col];
вар текст = параграф.AppendText(заголовок);
параграф.Формат Параграфа.ГоризонтальноеВыравнивание = Syncfusion.DocIO.DLS.HorizontalAlignment.Center;
text.CharacterFormat.FontName = "宋体";
text.CharacterFormat.Bold = ложь;
text.CharacterFormat.FontSize = 10,5f;
}
}
for (var row = captionCount; row <= data.Rows.Count; row++)
for (var col = 0; col < data.Columns.Count; col++)
{
var абзац = table.Rows[row].Cells[col].AddParagraph();
var text = параграф.AppendText(data.Rows[строка - captionCount][столбец] + "");
text.CharacterFormat.FontName = "宋体";
text.CharacterFormat.FontSize = 9f;
двойное значение = 0;
если (double.TryParse(text.Text, out val))
{
text.Text = Math.Round(val, 2) + "";
//выравниваем по правому краю
параграф.Формат Параграфа.ГоризонтальноеВыравнивание = Syncfusion.DocIO.DLS.HorizontalAlignment.Right;
table.Rows[строка].Cells[столбец].CellFormat.VerticalAlignment = ВертикальноеВыравнивание.Middle;
table.Rows[строка].Cells[col].CellFormat.TextWrap = false;
}
}
//Объединяем ячейки, объединяем вниз
если (!string.IsNullOrEmpty(mergeColName))
for (var row = captionCount; row < table.Rows.Count; row++)
{
var cell = table.Rows[строка].Cells[data.Columns[mergeColName].Ordinal];
ячейка.CellFormat.VerticalMerge = CellMerge.Start;
var text = data.Rows[row - captionCount][mergeColName] + "";
если (строка > captionCount)
{
var PriorCell = table.Rows[строка - captionCount].Cells[data.Columns[mergeColName].Ordinal];
var findText = data.Rows[row - captionCount - 1][mergeColName] + "";
если (text.Equals(findText))
ячейка.CellFormat.VerticalMerge = CellMerge.Continue;
}
}
BookmarksNavigator bk = новый BookmarksNavigator (документ);
bk.MoveToBookmark(имязакладки);
TextBodyPart body = bk.GetBookmarkContent();
bk.DeleteBookmarkContent(истина);
bk.InsertTable(таблица);
возвратный стол;
}
-