Documento Essencial
Biblioteca .NET capaz de ler e gravar arquivos do Microsoft Word. Este componente é um modelo de objeto, semelhante à biblioteca de classes COM do Microsoft Office. Ele não usa interoperabilidade COM e é escrito em C#. Se o Microsoft Word não estiver instalado no sistema, você poderá considerar este componente.
Crie novos documentos MS Word: Suporta a criação de documentos MS Word contendo texto, imagens, gráficos, páginas e rodapés.
Formatação de documentos: Suporta formatação em relatórios universais do MS Word.
A geração de documentos é baseada em modelos: para gerar documentos baseados em modelos, você pode usar a GUI do MS Word para criar relatórios de documentos e, em seguida, usar o DocIO para preencher dinamicamente os dados nos arquivos de modelo.
Propriedades do documento: leia e grave as configurações de propriedades dos documentos do Word.
Conversão: Suporta a conversão de documentos MS Word em PDF usando Essential PDF.
Recursos avançados: Suporta cópia e mesclagem de vários documentos do MS Word em um único documento.
Converter HTML em palavra
byte estático público[] ConvertHtmlToDoc(string html)
{
var documento = new WordDocument();
Seção IWSection = document.AddSection();
IWParagraph para = seção.AddParagraph();
string mensagemerro = "";
bool válido = seção.Body.IsValidXHTML(html, XHTMLValidationType.Strict, out errorMessage);
se (! válido)
lançar new InvalidCastException(errorMessage + "<hr>" + html);
document.XHTMLValidateOption = XHTMLValidationType.Strict;
seção.Body.InsertXHTML(html);
var outMem = new MemoryStream();
document.Save(outMem, FormatType.Doc);
outMem.Seek(0, SeekOrigin.Begin);
var conteúdo = novo byte[outMem.Length];
outMem.Read(conteúdo, 0, conteúdo.Comprimento);
outMem.Dispose();
document.Fechar();
devolver conteúdo;
}
Substitua o texto especificado ao gerar o Word
/// <resumo>
/// Substitui o texto especificado ao gerar o Word
/// </sumário>
/// <param name="templatePath"></param>
/// <param name="NomedoArquivo"></param>
/// <param name="replaysDictionary"></param>
public static void ReplaceDocContent(string templateFileName, string newFileName,
Dicionário<string, string> replaysDicionário)
{
Documento IWordDocument = new WordDocument();
document.Open(templateFileName, FormatType.Doc);
foreach (var rd em replaysDictionary)
{
if (string.IsNullOrEmpty(document.GetText())) continuar;
document.Replace(rd.Key, rd.Value, false, false);
enquanto (document.GetText().IndexOf(rd.Key) != -1)
document.Replace(rd.Key, rd.Value, false, false);
}
document.Save(novoNomeArquivo, FormatType.Doc);
}
Documentos protegidos por senha
fluxo estático público SetDocProtect (byte [] docContent, chave de string)
{
var mem = new MemoryStream(docContent);
mem.Seek(0, SeekOrigin.Begin);
Documento IWordDocument = novo WordDocument(mem, FormatType.Automatic);
document.Protect(ProtectionType.AllowOnlyFormFields, chave);
var outMem = new MemoryStream();
document.Save(outMem, FormatType.Doc);
outMem.Seek(0, SeekOrigin.Begin);
retorneMem;
}
Crie uma tabela no local do marcador
public static IWTable ReplaceTable (documento WordDocument, string bookmarkName, dados DataTable, string mergeColName, List<List<string>> mutilTableCaption)
{
if (documento == nulo) throw new ArgumentNullException("documento");
if (bookmarkName == null) throw new ArgumentNullException("bookmarkName");
if (dados == nulo) lance new ArgumentNullException("dados");
if (data.Columns.Count <1) lançar new ArgumentNullException("dados");
int captionCount = mutilTableCaption != null && mutilTableCaption.Count > 0 ? mutilTableCaption.Count : 1;
Tabela WTable = nova WTable(documento, verdadeiro);
tabela.ResetCells(data.Rows.Count + captionCount, data.Columns.Count);
for (var colCount = 0; colCount < captionCount; colCount++)
{
for (var col = 0; col < dados.Colunas.Count; col++)
{
var parágrafo = tabela.Rows[colCount].Cells[col].AddParagraph();
var caption = data.Columns[col].ColumnName;
if (mutilTableCaption! = null && mutilTableCaption.Count > 0)
caption = mutilTableCaption[colCount][col];
var texto = parágrafo.AppendText(caption);
parágrafo.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center;
text.CharacterFormat.FontName = "宋体";
text.CharacterFormat.Bold = falso;
texto.CharacterFormat.FontSize = 10,5f;
}
}
for (var linha = legendaCount; linha <= dados.Rows.Count; linha++)
for (var col = 0; col < dados.Colunas.Count; col++)
{
var parágrafo = tabela.Rows[row].Cells[col].AddParagraph();
var text = parágrafo.AppendText(data.Rows[row - captionCount][col] + "");
text.CharacterFormat.FontName = "宋体";
texto.CharacterFormat.FontSize = 9f;
valor duplo = 0;
if (double.TryParse(texto.Texto, out val))
{
texto.Text = Math.Round(val, 2) + "";
//alinha à direita
parágrafo.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Right;
tabela.Rows[linha].Células[col].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
tabela.Rows[row].Cells[col].CellFormat.TextWrap = false;
}
}
//Mesclar células, mesclar para baixo
if (!string.IsNullOrEmpty(mergeColName))
for (var linha = legendaCount; linha < tabela.Rows.Count; linha++)
{
var célula = tabela.Rows[row].Cells[data.Columns[mergeColName].Ordinal];
cell.CellFormat.VerticalMerge = CellMerge.Start;
var text = data.Rows[row - captionCount][mergeColName] + "";
if (linha > captionCount)
{
var anteriorCell = tabela.Rows[row - captionCount].Cells[data.Columns[mergeColName].Ordinal];
var findText = data.Rows[row - captionCount - 1][mergeColName] + "";
if (texto.Equals(encontrarTexto))
cell.CellFormat.VerticalMerge = CellMerge.Continue;
}
}
BookmarksNavigator bk = novo BookmarksNavigator(documento);
bk.MoveToBookmark(nomedomarcador);
TextBodyPart body= bk.GetBookmarkContent();
bk.DeleteBookmarkContent(true);
bk.InsertTable(tabela);
tabela de retorno;
}
-