none
gerar pdf de pagina gerada RRS feed

  • Pergunta

  • Boa tarde,

    estou utilizando iTextSharp mas ja tentei de varias formas e nao consigo gerar um pdf a partir da pagina aberta. Alguem tem um codigo que faça isso?

    obrigado


    Darth Tsurth

    terça-feira, 20 de março de 2012 17:49

Respostas

  • Darth,

    Dê uma olhada nesse thread e veja se te ajuda:

    http://social.msdn.microsoft.com/Forums/pt-BR/aspnetpt/thread/049133ce-2ce0-4b6e-9194-53b62e12ddbe

    Abraço,


    Carlos Eduardo Ferreira

    • Marcado como Resposta Dudú quarta-feira, 21 de março de 2012 17:15
    quarta-feira, 21 de março de 2012 11:59
  • O link que o nosso amigo mandou é muito bom também.

    Qualquer coisa, veja estes dois links abaixo, são artigos que podem te ajudar. Um gera pdf a partir do reportviewer e outro gera word (caso queira dar mais opções ao seu cliente).

    http://ecode10.com/artigo/25/Gerando+word+com+Visual+Studio.NET+2005.aspx

    http://ecode10.com/artigo/1129/ReportViewer+sem+DataSet+Tipado+e+gerando+PDF.aspx


    Espero ter ajudado. Se ajudei, favor marcar no fórum falando que foi útil.

    Mauricio Junior - Comunidade www.ecode10.com

    • Sugerido como Resposta Mauricio-Junior quarta-feira, 21 de março de 2012 12:32
    • Marcado como Resposta Dudú quarta-feira, 21 de março de 2012 17:15
    quarta-feira, 21 de março de 2012 12:32
  • Dath,

    Inclua o atributo EnableEventValidation="false" na diretiva de página e veja se resolve o seu problema.

    Ex:

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" EnableEventValidation="false" %>

    Obs: Eu testei e deu certo.

    Abraço,


    Carlos Eduardo Ferreira

    • Marcado como Resposta Dudú quarta-feira, 21 de março de 2012 17:15
    quarta-feira, 21 de março de 2012 16:13
  • Você precisa passar o endereço físico do servidor.

    Eu utilizo a função replace e this.Request.PhysicalApplicationPath.


    Carlos Eduardo Ferreira

    • Marcado como Resposta Dudú quarta-feira, 21 de março de 2012 17:14
    quarta-feira, 21 de março de 2012 16:45
  • Darth,

    Segue um exemplo:

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" EnableEventValidation="false" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Panel ID="pnl" runat="server">
                <asp:Image runat="server" ID="logo" ImageUrl="~/Images/login.gif" />
            </asp:Panel>
            <asp:Button ID="Button1" runat="server" Text="Button" />
        </div>
        </form>
    </body>
    </html>
    

    Imports iTextSharp.text
    Imports iTextSharp.text.pdf
    Imports iTextSharp.text.html
    Imports iTextSharp.text.html.simpleparser
    Imports System.IO
    
    Partial Class _Default
        Inherits System.Web.UI.Page
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            ConverteAspx2Pdf()
        End Sub
    
    
        Private Sub ConverteAspx2Pdf()
    
            Dim attachment As String = "attachment; filename=ExportacaoAspx2Pdf.pdf"
    
            Response.ClearContent()
            Response.AddHeader("content-disposition", attachment)
            Response.ContentType = "application/pdf"
    
            Dim stw As StringWriter = New StringWriter()
            Dim htextw As HtmlTextWriter = New HtmlTextWriter(stw)
    
            logo.ImageUrl = logo.ImageUrl.Replace("~", Me.Request.PhysicalApplicationPath)
    
            pnl.RenderControl(htextw)
    
            Dim document As Document = New Document()
    
            PdfWriter.GetInstance(document, Response.OutputStream)
            document.Open()
    
            Dim str As StringReader = New StringReader(stw.ToString())
            Dim htmlworker As HTMLWorker = New HTMLWorker(document)
    
            htmlworker.Parse(str)
    
            document.Close()
            Response.Write(document)
            Response.End()
    
        End Sub
    
    End Class
    

    Abraço,


    Carlos Eduardo Ferreira

    • Marcado como Resposta Dudú quarta-feira, 21 de março de 2012 17:14
    quarta-feira, 21 de março de 2012 17:11

Todas as Respostas

  • Darth,

    Dê uma olhada nesse thread e veja se te ajuda:

    http://social.msdn.microsoft.com/Forums/pt-BR/aspnetpt/thread/049133ce-2ce0-4b6e-9194-53b62e12ddbe

    Abraço,


    Carlos Eduardo Ferreira

    • Marcado como Resposta Dudú quarta-feira, 21 de março de 2012 17:15
    quarta-feira, 21 de março de 2012 11:59
  • O link que o nosso amigo mandou é muito bom também.

    Qualquer coisa, veja estes dois links abaixo, são artigos que podem te ajudar. Um gera pdf a partir do reportviewer e outro gera word (caso queira dar mais opções ao seu cliente).

    http://ecode10.com/artigo/25/Gerando+word+com+Visual+Studio.NET+2005.aspx

    http://ecode10.com/artigo/1129/ReportViewer+sem+DataSet+Tipado+e+gerando+PDF.aspx


    Espero ter ajudado. Se ajudei, favor marcar no fórum falando que foi útil.

    Mauricio Junior - Comunidade www.ecode10.com

    • Sugerido como Resposta Mauricio-Junior quarta-feira, 21 de março de 2012 12:32
    • Marcado como Resposta Dudú quarta-feira, 21 de março de 2012 17:15
    quarta-feira, 21 de março de 2012 12:32
  • Carlos, eu converti o codigo que vc sugeriu para VB.NET, mas ele apresenta um erro na linha: Me.RenderControl(htextw)

    o erro que apresenta é: RegisterForEventValidation só pode ser chamado durante Render();

    Segue o código:

     Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            ConverteAspx2Pdf()
        End Sub 
    
    
    
     private sub ConverteAspx2Pdf()
    
            Dim attachment As String = "attachment; filename=ExportacaoAspx2Pdf.pdf"
    
            Response.ClearContent()
    
            Response.AddHeader("content-disposition", attachment)
    
            Response.ContentType = "application/pdf"
    
            Dim stw As StringWriter = New StringWriter()
    
            Dim htextw As HtmlTextWriter = New HtmlTextWriter(stw)
    
            Me.RenderControl(htextw)
    
            Dim document As Document = New Document()
    
            PdfWriter.GetInstance(document, Response.OutputStream)
    
            document.Open()
    
            Dim str As StringReader = New StringReader(stw.ToString())
    
            Dim htmlworker As HTMLWorker = New HTMLWorker(document)
    
            htmlworker.Parse(str)
    
            document.Close()
    
            Response.Write(document)
    
            Response.End()
    
        End Sub

    Obrigado!
    quarta-feira, 21 de março de 2012 12:39
  • perdão por ter postado com login diferente, mas estava com outro msn ativo e não percebi. Mas DuduSilver e Darth Tsurt são a mesma pessoa.

    desculpe


    Darth Tsurth

    quarta-feira, 21 de março de 2012 12:45
  • Eu coloquei o bloco do html inteiro dentro de um Panel e fiz:

    panel1.RenderControl(htextw)

    ele de fato deu certo, pegou todo o html que ta dentro, porem ele não consegue fazer com imagem, existe alguma forma diferente, pois dá erro no caminho da imagem, conforme erro abaixo:

    Não foi possível localizar uma parte do caminho 'C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\imagens\logo.gif'.

    eu acredito que por padrão, ele esteja tentando passar um caminho fisico da minha maquina, sera que devo que colocar o caminho fisico mesmo do servidor para ele entender?


    Darth Tsurth

    quarta-feira, 21 de março de 2012 16:08
  • Dath,

    Inclua o atributo EnableEventValidation="false" na diretiva de página e veja se resolve o seu problema.

    Ex:

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" EnableEventValidation="false" %>

    Obs: Eu testei e deu certo.

    Abraço,


    Carlos Eduardo Ferreira

    • Marcado como Resposta Dudú quarta-feira, 21 de março de 2012 17:15
    quarta-feira, 21 de março de 2012 16:13
  • Carlos, o erro continua!

    ele gera o erro na linha:

    Não foi possível localizar uma parte do caminho 'C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\imagens\logo.gif'.

            htmlworker.Parse(str)


    Darth Tsurth

    quarta-feira, 21 de março de 2012 16:32
  • Você precisa passar o endereço físico do servidor.

    Eu utilizo a função replace e this.Request.PhysicalApplicationPath.


    Carlos Eduardo Ferreira

    • Marcado como Resposta Dudú quarta-feira, 21 de março de 2012 17:14
    quarta-feira, 21 de março de 2012 16:45
  •  Carlos,

     poderia me dar um exemplo de como eu utilizo a função no meu exemplo, por favor?


    Darth Tsurth

    quarta-feira, 21 de março de 2012 16:50
  • Darth,

    Segue um exemplo:

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" EnableEventValidation="false" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Panel ID="pnl" runat="server">
                <asp:Image runat="server" ID="logo" ImageUrl="~/Images/login.gif" />
            </asp:Panel>
            <asp:Button ID="Button1" runat="server" Text="Button" />
        </div>
        </form>
    </body>
    </html>
    

    Imports iTextSharp.text
    Imports iTextSharp.text.pdf
    Imports iTextSharp.text.html
    Imports iTextSharp.text.html.simpleparser
    Imports System.IO
    
    Partial Class _Default
        Inherits System.Web.UI.Page
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            ConverteAspx2Pdf()
        End Sub
    
    
        Private Sub ConverteAspx2Pdf()
    
            Dim attachment As String = "attachment; filename=ExportacaoAspx2Pdf.pdf"
    
            Response.ClearContent()
            Response.AddHeader("content-disposition", attachment)
            Response.ContentType = "application/pdf"
    
            Dim stw As StringWriter = New StringWriter()
            Dim htextw As HtmlTextWriter = New HtmlTextWriter(stw)
    
            logo.ImageUrl = logo.ImageUrl.Replace("~", Me.Request.PhysicalApplicationPath)
    
            pnl.RenderControl(htextw)
    
            Dim document As Document = New Document()
    
            PdfWriter.GetInstance(document, Response.OutputStream)
            document.Open()
    
            Dim str As StringReader = New StringReader(stw.ToString())
            Dim htmlworker As HTMLWorker = New HTMLWorker(document)
    
            htmlworker.Parse(str)
    
            document.Close()
            Response.Write(document)
            Response.End()
    
        End Sub
    
    End Class
    

    Abraço,


    Carlos Eduardo Ferreira

    • Marcado como Resposta Dudú quarta-feira, 21 de março de 2012 17:14
    quarta-feira, 21 de março de 2012 17:11
  • Carlos,

     Excelente. Funcionou perfeitamente.

    Muito obrigado pela atenção


    Darth Tsurth

    quarta-feira, 21 de março de 2012 17:14