Code: Detail

Especializações:Asp.net, Ajax, C#, Visual Basic.net, Wcf, XML FrameWork .net 1.1, 2.0 e 4.0, OO, Design Patterns Arquitetura SOA, DDD, MVP e MVVM Html, Css, JavaScript Sql Server 2000, 2005 e 2008 Oracle 8i e 9i Asp3, Visual Basic 6 e COM+

C# - (Portuguese)

Converter Html para PDF com nuget free DinkToPdf

Este script gera um arquivo PDF com base em um arquivo HTML utilizando o nuget opensource DinkToPdf

Last update: 31/08/2018
 
N/A
N/A
N/A
2
 

/// <summary>
/// 1- Adicione o nuget DinkToPdf
///
/// 2- Va em https://github.com/rdvojmoc/DinkToPdf/tree/master/v0.12.4 e abra a subpasta referente ao tipo de 
///    Sistema operacional que você está utilizando
///
/// 3- Copie todo o conteudo de dentro da pasta selecionada para a raiz do seu projeto, se for um projeto web ou ///    webapi copie para a raiz do projeto web ou webapi
///
/// 4- Copie e cole o código abaixo 
///
/// </summary>


using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using DinkToPdf;
using DinkToPdf.Contracts;
using System.Web;
using System.Text.RegularExpressions;

namespace Helpers
{
    public class PDFDocument
    {


        /// <summary>
        /// Este script gera um PDF a partir de um documento HTML utilizando nuget DinkToPdf
        /// </summary>
        public void teste()
        {


            string _retornoConteudoTratado = string.Empty;

            _retornoConteudoTratado = this.LerHtmlTratandoEncoding();


            var globalSettings = new GlobalSettings
            {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Portrait,
                PaperSize = PaperKind.A4,
                Margins = new MarginSettings { Top = 10 },
                DocumentTitle = "PDF Report",
                Out = @"C:\Temp\Cartas\Arquivo.pdf",
            };


            ObjectSettings _obsettings = new ObjectSettings();
            _obsettings.HtmlContent = _retornoConteudoTratado;
            _obsettings.WebSettings.DefaultEncoding = "iso-8859-1";
            _obsettings.WebSettings.LoadImages = true;
            _obsettings.IncludeInOutline = true;

            var pdf = new HtmlToPdfDocument()
            {
                GlobalSettings = globalSettings,
                Objects = { _obsettings }
            };

            var _converter = new BasicConverter(new PdfTools());
            _converter.Convert(pdf);
            _converter.Tools.Dispose();

        }




        public string LerHtmlTratandoEncoding()
        {


            string _conteudoArquivoPorLinha = string.Empty;
            StringBuilder _retornoConteudoTratado = new StringBuilder();
            StringBuilder _todoHtml = new StringBuilder();

            //Abre arquivo HTML
            //-------------------
            using (System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Temp\ModelosHTML\Modelo.htm", Encoding.GetEncoding("iso-8859-1")))
            {
                //Concatena todo o conteudo linha a linha na variavel _todoHTML
                //-------------------------------------------------------------
                while ((_conteudoArquivoPorLinha = file.ReadLine()) != null)
                    _todoHtml.Append(_conteudoArquivoPorLinha + " ");

                //Atribui 10 espaços antes e depois de cada tag html
                //--------------------------------------------------
                _todoHtml.Replace("<", "          <")
                         .Replace(">", ">          ")
                         .Replace("&nbsp;", "          &nbsp;          ");


                //Transforma em um trecho a cada 10 espaços jogando cada trecho em um array de trechos
                //------------------------------------------------------------------------------------
                var _trechosArray = _todoHtml.ToString().Split("          ");


                //Varre os trechos em busca de texto puro para aplicar encoding, sendo que trechos HTML serão 
                //ignorados
                //-------------------------------------------------------------------------------------
                foreach (var _trecho in _trechosArray)
                {
                    string _trechoTratado = string.Empty;

                    //SE _trecho NAO for uma tag HTML trata, caso contrario NÃO trata
                    if ((Regex.Match(_trecho.Trim(), @"<.*?>",RegexOptions.IgnoreCase).Success == false) && _trecho.Trim() != "&nbsp;")
                        _trechoTratado = HttpUtility.HtmlEncode(_trecho.Trim()) + " ";
                    else
                        _trechoTratado = _trecho.Trim() + " ";

                    _retornoConteudoTratado.Append(_trechoTratado);
                }

                file.Close();
            }


            return _retornoConteudoTratado.ToString();


        }



    }
}

Source:
 
Users who have marked this routine as a favorite
 
 
04/09/2018 19:29:33
public void ConfigureServices(IServiceCollection services)
{
    // Add converter to DI
    services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
}

04/09/2018 19:29:05
Essa solução ai está bugada, do jeito que está programado só funciona 
na primeira vez, se clicar para converter de novo não converte.

Só funciona direito se injetar a instancia do converter e em webapi
tem que usar SynchronizedConverter

Segue exemplo:

public void ConfigureServices(IServiceCollection services)
{
    // Add converter to DI
    services.AddSingleton(typeof(IConverter), new Synchr

 
The site ti4fun is not responsible for the content on sites for which you have external links

Articles, routines, tips, forums, blogs or any other content posted on ti4fun site is not tested and not validated, so you should test and validate any information collected on the ti4fun site before applying it to final use environment, such as example, production. the TI4FUN site is not responsible for quality or for any damages, direct, indirect or consequential, from use of any content posted by the authors in the site.

All content published on the ti4fun site is the responsibility of the author and do not necessarily express the views of the site ti4fun and its employees.