5 maneiras de exportar do ASP.NET para arquivos Word e PDF!

O recurso de criação de aplicativos ricos geralmente pode deixar os usuários pedindo para tirar elementos visuais da tela para serem usados ​​em outros lugares. Ser capaz de exportar de um aplicativo para Word ou PDF abre novas possibilidades, como compartilhamento, relatórios ou mesmo satisfação dos requisitos de auditoria da Sarbanes-Oxley (SOX).

Tirar dados da sua aplicação e em formatos padrão como o Microsoft Word e o Adobe PDF pode ser uma tarefa difícil. Especialmente quando as otimizações de desempenho para grandes conjuntos de dados, personalização e aparência de documentos e plataformas suportadas são levadas em consideração.

No entanto, com as ferramentas certas, adicionar esse recurso à sua aplicação .NET pode ser tão simples como algumas linhas de código. Vejamos 5 maneiras de incluir funcionalidades de documentos ricas em nossas aplicações  com muito pouco código e investimento em tempo.

Para a maioria dos exemplos, usaremos a biblioteca de Processamento de Documentos Telerick (DPL), que é distribuída sem nenhum custo adicional com as bibliotecas Progress Pro Telerik UI para ASP.NET Web Forms e MVC. Para os desenvolvedores de desktop, o DPL também está incluído no WPF, Silverlight e WinForms. Além disso, nenhuma licença ou dependências do MS Office são necessárias para usar o DPL. Como um bônus para os desenvolvedores web, veremos que as bibliotecas da UI da Telerik possuem poderosas APIs do lado do cliente para exportar conteúdo diretamente da tela.

Se você estiver usando a UI da Telerik, você já possui esses recursos em sua caixa de ferramentas e aprenderemos como alavancá-los.

1. Criar novo documento do Word no .NET 

Ter a capacidade de criar um novo documento do Word a partir do código oferece uma grande flexibilidade. Com poucas dependências, temos acesso às APIs de criação de documentos do Word que incluem geração de texto, imagem e link.

Para este exemplo,usaremos RadFlowDocumente RadFlowDocumentEditorcriaremos um novo documento do Word a partir de um aplicativo de console .NET.

Começaremos com algumas dependências, como System.IOlidar com um fluxo de arquivos, e as assembléias Telerik DPL necessárias.

using System.IO;

using Telerik.Windows.Documents.Flow.FormatProviders.Docx;

using Telerik.Windows.Documents.Flow.Model;

using Telerik.Windows.Documents.Flow.Model.Editing;

Em seguida, criamos um novo RadFlowDocumente RadFlowDocumentEditor. A RadFlowDocument Editorvontade nos permitirá inserir novos textos, imagens e outros elementos no documento.

static void Main(string[] args)

{    RadFlowDocument document = new RadFlowDocument();

RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document);

Usando o editor, escreveremos algum texto no documento usando o InsertTextmétodo. Também temos métodos adicionais disponíveis, tais como:

– InsertFloatingImage

– InsertParagraph

– InsertTable

– InsertHyperlink

static void Main(string[] args)
{
    RadFlowDocument document = new RadFlowDocument();
    RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document);
    editor.InsertText("Hello Word!");  

Uma vez que o documento está completo, precisamos apenas gravá-lo para a FileStream. Para RadFlowDocumentnós, usaremos DocxFormatProviderpara exportar para o formato DOCX. Da mesma forma, poderíamos usar um PdfFormatProviderpara criar um documento PDF.

using System.IO;

using Telerik.Windows.Documents.Flow.FormatProviders.Docx;

using Telerik.Windows.Documents.Flow.Model;

using Telerik.Windows.Documents.Flow.Model.Editing;

 

namespace DocProcessing

{

class Program

{

static void Main(string[] args)

{

RadFlowDocument document = new RadFlowDocument();

RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document);

editor.InsertText(“Hello Word!”);

 

using (Stream output = new FileStream(“output.docx”, FileMode.OpenOrCreate))

{

DocxFormatProvider provider = new DocxFormatProvider();

provider.Export(document, output);

Neste exemplo, os arquivos criados usando o Telerik DPL são salvos diretamente no disco. No entanto, qualquer arquivo criado usando o DPL também pode ser baixado via navegador da Ui para ASP.NET AJAX e UI para aplicativos ASP.NET MVC.

2.  Impressão por mala direta do .NET

Criar uma mala direta é uma maneira eficaz de criar um modelo e preenchê-lo com dados para processar documentos em lotes. Com o processo de mala direta, você pode criar uma série de documentos personalizados com base em sua fonte de dados.

O processo de mala direta é aquele que geralmente é executado manualmente dentro do Microsoft Word. Com o Telerik DPL, este processo pode ser completamente automatizado e personalizado com base nas necessidades do seu aplicativo. As APIs de mala direta podem ser usadas virtualmente em qualquer lugar no .NET. Para ver isso em ação, usaremos um exemplo de como uma mala direta é executada em um aplicativo ASP.NET Web Forms.

Criaremos um novo documento contendo nossa mensagem de modelo. Para criar um campo de modelo no documento, usaremos o InsertFieldmétodo e definiremos o código de campo MERGEFIELDcom o nome da variável que desejamos usar, neste caso FirstName. O nome da variável simplesmente corresponde à propriedade em um objeto que forneceremos ao MailMergemétodo.

private RadFlowDocument CreateDocument()

{

RadFlowDocument document = new RadFlowDocument();

RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document);

 

editor.InsertText(“Dear “);

editor.InsertField(“MERGEFIELD FirstName”, “”);

editor.InsertText(” “);

editor.InsertField(“MERGEFIELD LastName”, “”);

editor.InsertLine(“,”);

editor.InsertLine(“This is a sample Mail Merge”);

return document;

Com o documento criado, o próximo passo será realizar a mala direta. Por simplicidade, faremos nosso trabalho no evento de carregamento da página do formulário web. O MailMergemétodo leva qualquer IEnumerablecomo um parâmetro, neste caso, usaremos uma lista predefinida de Personvia GetRecipents. Neste caso, Persontem uma propriedade FirstNamee que LastNamecorresponde às MERGEFIELD variáveis.

protected void Page_Load(object sender, EventArgs e)

{

RadFlowDocument document = this.CreateDocument();

RadFlowDocument mailMergeDocument = document.MailMerge(GetRecipients());

//save the document

}

O documento pode ser salvo no servidor ou enviado diretamente ao cliente. Servir o documento para o cliente requer a configuração MemoryStreame a chamada Exportde um DocxFromatProvider. Uma vez que o fluxo de memória esteja pronto, o escreveremos na resposta com o correspondente ContentTypepara um arquivo .DOCX.

protected void Page_Load(object sender, EventArgs e)

{

RadFlowDocument document = this.CreateDocument();

RadFlowDocument mailMergeDocument = document.MailMerge(GetRecipients());

byte[] renderedBytes = null;

 

using (MemoryStream ms = new MemoryStream())

{

var formatProvider = new DocxFormatProvider();

formatProvider.Export(document, ms);

renderedBytes = ms.ToArray();

}

 

Response.Clear();

Response.AppendHeader(“Content-Disposition”, “attachment; filename=MailMergeFile.docx”);

Response.ContentType = “application/vnd.openxmlformats-officedocument.wordprocessingml.document”;

Response.BinaryWrite(renderedBytes);

Response.End();

}

O resultado é um arquivo .DOCX de várias páginas para cada destinatário fornecido para a mala direta. Este tipo de documento pode ser facilmente impresso e enviado aos clientes como correio físico. Veja demonstra.telerick.com  para uma demonstração mais abrangente que inclui tipos de arquivos adicionais e recursos do documento.

3. Converter Word para PDF no .NET 

Um dos pontos fortes de Telerik DPL é a sua capacidade de importar e exportar vários tipos de arquivos como: DOCX, PDF (somente exportação), HTML e RTF. Por causa desta habilidade, também pode ser usado para fazer conversões de arquivos entre esses tipos também. Usando IFormatProvidernós podemos utilizar os vários provedores de formato dentro do Telerik DPL de forma intercambiável. Vamos dar uma olhada em um exemplo básico de um aplicativo de console que pode importar um arquivo DOCX e exportá-lo para PDF.

Começaremos criando um provedor padrão usando um IFormatProvidere configurando-o para uma instância de DocxFormatProvider. A RadFlowDocumenté usado como nosso documento na conversão de DOCX para PDF.

IFormatProvider<RadFlowDocument> fileFormatProvider = new DocxFormatProvider();

RadFlowDocument documentToConvert = new RadFlowDocument();

O documento DOCX é aberto a partir do disco usando o DocxFormatProvidere transmitido para a memória.

using (FileStream input = new FileStream(“input.docx”, FileMode.Open))

{

documentToConvert = fileFormatProvider.Import(input);

Com o documento na memória como um RadFlowDocumentpodemos mudar nosso provedor de a DocxFormatProviderpara a PdfFormatProvider. Agora, o documento pode ser gravado de volta ao disco como um PDF.

fileFormatProvider = new PdfFormatProvider();

 

using (Stream output = new FileStream(“output.pdf”, FileMode.OpenOrCreate))

{

fileFormatProvider.Export(documentToConvert, output);

}

Como você pode ver no exemplo completo, em apenas algumas pequenas linhas de código, podemos converter de DOCX para PDF.

static void Main(string[] args)

{

IFormatProvider<RadFlowDocument> fileFormatProvider = new DocxFormatProvider();

RadFlowDocument documentToConvert = new RadFlowDocument();

 

// Read DOCX

using (FileStream input = new FileStream(“input.docx”, FileMode.Open))

{

documentToConvert = fileFormatProvider.Import(input);

}

 

// Write PDF

fileFormatProvider = new PdfFormatProvider(); // change format provider to PDF

 

using (Stream output = new FileStream(“output.pdf”, FileMode.OpenOrCreate))

{

fileFormatProvider.Export(documentToConvert, output);

}

Este método de importação e exportação de documentos pode ser usado para converter entre formatos de arquivo. No entanto, uma ressalva é que não há funcionalidade de importação para documentos PDF devido às limitações do formato de arquivo. Para lidar com essa limitação, IFormatProviderestá equipado com uma CanImportpropriedade que pode ser verificada antes da Importoperação ser executada.

4. Edite documentos do Microsoft Word no ASP.NET 

Os clientes às vezes podem pedir requisitos de projeto que consomem muito tempo, como a capacidade de editar documentos do Word no navegador. Na superfície, isso soa como uma característica que levará um pouco de esforço para realizar; No entanto, é tão simples como ajustar as propriedades corretas em qualquer widget do editor Telerik UI para ASP.NET Webforms  ou ASP .NET MVC.

Usando UI para ASP.NET MVC, a capacidade de importar e exportar diretamente do widget do Editor pode ser realizada diretamente a partir da visualização Razor.

@(Html.Kendo().Editor()

.Name(“editor”)

.HtmlAttributes(new { style = “height:440px” })

.Tools(tools => tools

.Clear()

.ExportAs()

.Import()

)

.ExportAs(exportAs => exportAs

.FileName(“editor_content”)

.Proxy(“Export”, “EditorExport”)

)

.Import(import => import

.Proxy(“Import”, “EditorImport”)

.AllowedExtensions(new[] { “docx”, “rtf”, “html”, “txt” })

.MaxFileSize(104857600)

.Select(“onSelect”)

.Error(“onError”)

)

)

Para exportar o conteúdo, inclua o comando correspondente à barra de ferramentas do editor. Ferramentas (ferramentas => tools.ExportAs ()) e configure as configurações de exportação através do atributo ExportAs. Por exemplo, você deve especificar a opção Proxy, que define a Ação para a qual o conteúdo será enviado, ou você pode especificar o atributo FileName para definir o nome do arquivo baixado.

5. Exportar do lado do cliente da página HTML para o PDF

Aplicativos que incluem gráficos, mapas e agendamentos podem capacitar os usuários, dando-lhes a capacidade de visualizar dados. E, ter uma aplicação visualmente rica, muitas vezes pode deixar os usuários pedindo para tirar elementos visuais da tela para serem usados ​​em outro lugar. Ao tentar capturar exatamente o que os usuários vêem na web, não podemos confiar em tecnologias do lado do servidor, como o DPL. Felizmente, as bibliotecas Telerik UI para ASP.NET (AJAX, MVC, Core) são todas alimentadas pela biblioteca HTML5 e JavaScript Kendo UI e podem exportar HTML para PDF diretamente no cliente.

Começaremos com um aplicativo ASP.NET Core usando o Telerick UI para ASP.net Core. Como a interface do usuário para o ASP.NET Core é alimentada pela UI do Kendo, teremos acesso completo às suas APIs de desenho. No exemplo a seguir, temos um painel de recursos humanos com controles complexos de interface do usuário, como gráficos e grades. Vamos ligar o botão Export AS PDF com algumas linhas de jQuery para exportar do lado do cliente.

 Localize o botão Export AS PDF export-pdfe anexe ao evento de clique.

$(“.export-pdf”).click(function() { }

Em seguida, usaremos a API de desenho Kendo UI para capturar os elementos no DOM. Quando chamamos drawDOMpodemos segmentar elementos específicos na página, o que nos permite capturar toda a página, grupos ou elementos únicos. Usando os resultados drawDOM, a exportPDFfunção é chamada de criação do arquivo PDF.

$(“.export-pdf”).click(function() {

// Convert the DOM element to a drawing using kendo.drawing.drawDOM

kendo.drawing.drawDOM($(“.content-wrapper”))

.then(function(group) {

// Render the result as a PDF file

return kendo.drawing.exportPDF(group, {

paperSize: “auto”,

margin: { left: “1cm”, top: “1cm”, right: “1cm”, bottom: “1cm” }

});

}); }

Para solicitar ao cliente um arquivo salvar, a kendo.saveAsfunção é usada com as propriedades que descrevem o arquivo.

$(“.export-pdf”).click(function() {

// Convert the DOM element to a drawing using kendo.drawing.drawDOM

kendo.drawing.drawDOM($(“.content-wrapper”))

.then(function(group) {

// Render the result as a PDF file

return kendo.drawing.exportPDF(group, {

paperSize: “auto”,

margin: { left: “1cm”, top: “1cm”, right: “1cm”, bottom: “1cm” }

});

})

.done(function(data) {

// Save the PDF file

kendo.saveAs({

dataURI: data,

fileName: “HR-Dashboard.pdf”,

proxyURL: “https://demos.telerik.com/kendo-ui/service/export”

});

});

});

Com um único clique no botão, o usuário agora pode exportar o painel diretamente para o PDF. Agora, a visão que eles criaram no painel pode ser compartilhada com os membros da equipe por e-mail ou impressa para uma reunião importante.

Neste exemplo, usamos o ASP.NET Core, mas a UI do Kendo pode ser utilizada em uma ampla gama de plataformas para permitir aos usuários exportar conteúdo da Web.

 

 

 

 

 

 

20 julho de 2017 - Categoria Devexpress.