With export HTML string to PDF Compressed (zip)

2

I have this string: <HTML><HEAD></HEAD><body><FORM method="post"><table><tr><td>Nome:</td><td>JOÃO DA SILVA</td></tr><tr><td>NOME:</td><td>MARCOS ALVES</td></tr></table></BODY></HTML>  saved in a table and need to press export to pdf in a compressed (.zip) format , using some api free . Is it possible?

I've implemented George Wurthmann's great answer below, but as mentioned the project available in GitHub as an example generates the PDF displaying the HTML tags, I believe it's some detail in the code:

AndhereIhaveadaptedthecodeaccordingtomyneeds,changingthestringcontainingtableHTMLfixedinthecodeforareturnofatableofthedatabase:

[HttpPost]publicActionResultGetPdfFileZiped(ProcessamentoRegistrospProcessamentoRegistros){pProcessamentoRegistros.IdProcessamentoDiario=1;pProcessamentoRegistros.IdRegistro=1;pProcessamentoRegistros.IdServico=2;ProcessamentoRegistros_processamento=_IRepositorio.ObterProcessamentoRegistros(pProcessamentoRegistros);vardoc=newDocument(PageSize.A4.Rotate());varstream=newMemoryStream();varpw=PdfWriter.GetInstance(doc,stream);varminhaStringHTML=_processamento.DocumentoHtml;//@"<HTML><HEAD></HEAD><body><FORM method='post'><table><tr><td></td></tr></table></BODY></HTML>";

            doc.Open();
            Paragraph paragrafo = new Paragraph(minhaStringHTML, new Font(Font.NORMAL, 12));
            paragrafo.Alignment = Element.ALIGN_LEFT;
            doc.Add(paragrafo);
            doc.Close();

            using (var compressedFileStream = new MemoryStream())
            {
                //Cria um arquivo ZIP
                using (var zipArchive = new ZipArchive(compressedFileStream, ZipArchiveMode.Update, false))
                {
                    //Criar a entrada do PDF para o arquivo ZIP
                    var zipEntry = zipArchive.CreateEntry("MeuPDFZipado.pdf");

                    //Pegando o stream do PDF em memória
                    using (var originalFileStream = new MemoryStream(stream.ToArray()))
                    {
                        using (var zipEntryStream = zipEntry.Open())
                        {
                            //Copia o stream do PDF para o ZIP
                            originalFileStream.CopyTo(zipEntryStream);
                        }
                    }
                }
                return new FileContentResult(compressedFileStream.ToArray(), "application/zip") { FileDownloadName = "Filename.zip" };
            }
        }

This is HTML table:

<HTML>

<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<script language=javascript>
//function MudarPagina() {
//  window.history.back();
//}
</script>
</HEAD>
<!--body bgcolor=white onBlur=MudarPagina();-->
<body bgcolor=white>
    <FORM method="post" style="BACKGROUND-COLOR: white">
    <!--FORM name="Imprimir" method="post" style="BACKGROUND-COLOR: white"-->
<br>    
<table>
<tr>
<td align=center><a href="javascript:window.print();"><IMG src="https://www.sifge.caixa.gov.br/Empresa/Crf/images/botimprimir.gif"border=0></a><ahref="javascript:window.history.back();"><IMG src="https://www.sifge.caixa.gov.br/Empresa/Crf/images/botvoltar.gif"border=0></a></td></tr><tr><td><tablewidth="75%" CELLSPACING=0 CELLPADDING=10 border=1 align=center bordercolorlight="#FFFFFF" bordercolordark="#CCCCCC">


<tr>
<td>    

    <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=0 style="color: black" class=txtcentral>
        <tr>
            <td align=left><IMG border="0" src="https://www.sifge.caixa.gov.br/Empresa/Crf/images/caixa.gif"width=180height=44></td></tr><tr><tdcolspan=2>&nbsp</td></tr><tr><tdalign=rigth><spanstyle="font-size: 13pt" align=center><strong>Certificado de Regularidade do FGTS - CRF</strong></span></td>
        </tr>
    </table>

    <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=0 style="color: black" class=txtcentral>

        <tr><td colspan=2>&nbsp</td></tr>
        <tr><td colspan=2>&nbsp</td></tr>

        <tr>
            <TD width=22%><font style=" font-family: Verdana;font-size:10pt"><strong>Inscrição:</strong></font></TD>
            <TD ><font style=" font-family: Verdana;font-size:8pt">08439659/0001-50</font></TD>
        </tr>
        <tr>
            <td width=22% valign=top nowrap><font style=" font-family: Verdana;font-size:10pt"><strong>Razão Social:</strong></font></TD>
            <td><font style=" font-family: Verdana;font-size:8pt">CPFL ENERGIAS RENOVAVEIS S A</font></TD>
        </tr>

        <tr>
            <td width=22% nowrap><font style=" font-family: Verdana;font-size:10pt"><strong>Nome Fantasia:</strong></font></TD>
            <td ><font style=" font-family: Verdana;font-size:8pt">CPFL RENOVAVEIS</font></TD>
        </tr>

        <tr>
            <td width=22% valign=top><font style=" font-family: Verdana;font-size:10pt"><strong>Endereço:</strong></font></TD>
            <td ><font style=" font-family: Verdana;font-size:8pt">AV DOUTOR CARDOSO DE MELO   1184   ANDAR 7 / VILA OLIMPIA / SAO PAULO / SP / 4548-004</font></TD>
        </tr>

        <tr><td colspan=2>&nbsp</td></tr>
        <tr><td colspan=2>&nbsp</td></tr>

        <tr>
            <TD colspan=2 style="text-align: justify"><font style=" font-family: Verdana;font-size:10pt">A Caixa Econômica Federal, no uso da atribuição que lhe confere o Art. 7, da
            Lei 8.036, de 11 de maio de 1990, certifica que, nesta data, a empresa acima identificada
            encontra-se em situação regular perante o Fundo de Garantia do Tempo de Serviço - FGTS.
            </font>
            </TD>
        </tr>

        <tr><td colspan=2>&nbsp</td></tr>
        <tr><td colspan=2>&nbsp</td></tr>

        <tr>
            <td style="text-align: justify" colspan=2><font style=" font-family: Verdana;font-size:10pt">O presente Certificado não servirá de prova contra cobrança de quaisquer débitos referentes
            a contribuições e/ou encargos devidos, decorrentes das obrigações com o FGTS.</font>
            </td>
        </tr>

        <tr><td colspan=2>&nbsp</td></tr>
        <tr><td colspan=2>&nbsp</td></tr>


        <tr>
            <td colspan=2><font style=" font-family: Verdana;font-size:10pt"><strong>Validade: </strong>28/02/2017 a 29/03/2017</font></TD>
        </tr>
        <tr><td colspan=2>&nbsp</td></tr>

        <tr>
            <td colspan=2><font style=" font-family: Verdana;font-size:10pt"><strong>Certificação Número: </strong>2017022805233090232330</font></TD></TR>

        <tr><td colspan=2>&nbsp</td></tr>
        <tr><td colspan=2>&nbsp</td></tr>

        <tr>
            <TD colspan=2><font style=" font-family: Verdana;font-size:10pt">Informação obtida em 15/03/2017, às 17:14:51.</font></TD>
        </tr>

        <tr><td colspan=2>&nbsp</td></tr>
        <tr><td colspan=2>&nbsp</td></tr>

        <tr>
            <TD style="text-align: justify" colspan=2><font style=" font-family: Verdana;font-size:10pt">A utilização deste Certificado
                para os fins previstos em Lei está condicionada à verificação de
                autenticidade no site da Caixa: <strong>www.caixa.gov.br</strong></font></TD>
            </tr>
    </TABLE>
</form>

</td></tr></table>

</td>
</tr>

</table> 

<script language=javascript>
//window.print();
</script>   
</BODY>
</HTML>
    
asked by anonymous 27.05.2017 / 19:56

1 answer

2

PDF you can generate with iTextSharp , it's very simple.

Zip can be natively generated by C# with System.IO.Compression .

So you'll need to reference:

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using System.IO.Compression;

See in this example how to use:

namespace Exemplo_PDF_e_ZIP.Controllers
{
    public class HomeController : Controller
    {
        [HttpGet]
        public ActionResult Index()
        {
            return View();
        }


        [HttpPost]
        public ActionResult GetPdfFile()
        {
            var doc = new Document(PageSize.A4.Rotate());
            var stream = new MemoryStream();
            var pw = PdfWriter.GetInstance(doc, stream);
            var minhaStringHTML = @"<HTML><HEAD></HEAD><body><FORM method='post'><table><tr><td>Nome:</td><td>JOÃO DA SILVA</td></tr><tr><td>NOME:</td><td>MARCOS ALVES</td></tr></table></FORM></BODY></HTML>";

            doc.Open();
            using (var srHtml = new StringReader(minhaStringHTML))
            {
                //Convertendo o HTML
                XMLWorkerHelper.GetInstance().ParseXHtml(pw, doc, srHtml);
            }
            doc.Close();

            return File(stream.ToArray(), "application/pdf", "result.pdf");
        }

        [HttpPost]
        public ActionResult GetPdfFileZiped()
        {
            var doc = new Document(PageSize.A4.Rotate());
            var stream = new MemoryStream();
            var pw = PdfWriter.GetInstance(doc, stream);
            var minhaStringHTML = @"<HTML><HEAD></HEAD><body><FORM method='post'><table><tr><td>Nome:</td><td>JOÃO DA SILVA</td></tr><tr><td>NOME:</td><td>MARCOS ALVES</td></tr></table></FORM></BODY></HTML>";

            doc.Open();
            using (var srHtml = new StringReader(minhaStringHTML))
            {
                //Convertendo o HTML
                XMLWorkerHelper.GetInstance().ParseXHtml(pw, doc, srHtml);
            }
            doc.Close();

            using (var compressedFileStream = new MemoryStream())
            {
                //Cria um arquivo ZIP
                using (var zipArchive = new ZipArchive(compressedFileStream, ZipArchiveMode.Update, false))
                {
                    //Criar a entrada do PDF para o arquivo ZIP
                    var zipEntry = zipArchive.CreateEntry("MeuPDFZipado.pdf");

                    //Pegando o stream do PDF em memória
                    using (var originalFileStream = new MemoryStream(stream.ToArray()))
                    {
                        using (var zipEntryStream = zipEntry.Open())
                        {
                            //Copia o stream do PDF para o ZIP
                            originalFileStream.CopyTo(zipEntryStream);
                        }
                    }
                }
                return new FileContentResult(compressedFileStream.ToArray(), "application/zip") { FileDownloadName = "Filename.zip" };
            }
        }
    }
}

After you edited the question, you said that you do not want to print the tags but rather the content of HTML . I used XMLWorker of iTextSharp .

You will need to install it too:

  

PM > Install-Package itextsharp.xmlworker

In addition to the namespaces I mentioned above use also:

using iTextSharp.tool.xml;

I placed the project in Github . So you can download it for example and see it working.

    
27.05.2017 / 21:21