none
webforms com documento word .doc RRS feed

  • Pergunta

  • Preciso gerar um documento(contrato) onde pegarei dados do banco e será preenchido nesse documento, esse documento tem entre 4 e 5 páginas, como é um contrato tudo já está pronto onde vou pegar somente os dados do cliente e inserir nesse contrato.

    Queria saber qual a melhor forma de se fazer isso. Tem que ser um documento pois é um contrato e tem que sair bem formatado.

    Penso em gerar esse documento dinamicamente e o usuário poder baixar esse documento.


    Junior

    terça-feira, 2 de abril de 2019 11:46

Todas as Respostas

  • Bom dia, Junior.

    Recomendo você utilizar a biblioteca DocumentFormat.OpenXml.Packaging;
    Com ela você pode criar um documento do word de modelo e apenas substituir os campos que deseja e salvar uma cópia.
     -> O seu documento de modelo por ser igual o exemplo abaixo:

    -> Exemplo de código:

    var ciBrasil = new System.Globalization.CultureInfo("pt-BR");
    var dtf = ciBrasil.DateTimeFormat;
    var Dialog = new OpenFileDialog()
    {
        InitialDirectory = @"C:\lixo\arquivos",
        CheckFileExists = true,
        CheckPathExists = true,
        DefaultExt = "docx",
        Filter = "Arquivos Word (*.docx)|*.docx"
    };
     
    if (Dialog.ShowDialog() == DialogResult.OK)
    {
        var _data = string.Concat(DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year, DateTime.Now.Second, DateTime.Now.Millisecond);
        var _nome = string.Concat("_", _data, ".docx");
        var DocumentoPreenchido = Dialog.FileName.Replace(".docx", _nome);
        File.Copy(Dialog.FileName, DocumentoPreenchido);
        using (WordprocessingDocument Documento = WordprocessingDocument.Open(DocumentoPreenchido, true))
        {
            var ConteudoDocumento = string.Empty;
            using (StreamReader sr = new StreamReader(Documento.MainDocumentPart.GetStream()))
            {
                ConteudoDocumento = sr.ReadToEnd();
            }
     
            ConteudoDocumento = ConteudoDocumento.Replace("{Funcionario}", "Pedro");
            ConteudoDocumento = ConteudoDocumento.Replace("{Cargo}", "Programador .NET");
            ConteudoDocumento = ConteudoDocumento.Replace("{Matricula}", "2367");
            ConteudoDocumento = ConteudoDocumento.Replace("{Setor}", "TI");
            ConteudoDocumento = ConteudoDocumento.Replace("{Filial}", "São Paulo");
            ConteudoDocumento = ConteudoDocumento.Replace("{Gerente}", "Joãozinho");
     
            using (StreamWriter sw = new StreamWriter(Documento.MainDocumentPart.GetStream(FileMode.Create)))
            {
                sw.Write(ConteudoDocumento);
            }
        }
     
        if (File.Exists(DocumentoPreenchido))
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine(string.Format("Informações incluidas com sucesso no formulario {0}", DocumentoPreenchido));
        }
     
    }
    else
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("Nenhum arquivo selecionado!");
    }

    terça-feira, 2 de abril de 2019 12:06
  • Seria possível em um projeto web forms ?


    Junior

    terça-feira, 2 de abril de 2019 12:25
  • Esse código que passei você precisaria modificar algumas coisas, mas funciona em projeto webforms tbm!
    O que vc pode fazer se não conseguir alterar esse exemplo de modo que funcione webforms, pode cirar uma class library na sua solution e criar um metodo com esse exmplo e depois referenciar no projeto webforms.
    terça-feira, 2 de abril de 2019 12:51