Visualizzare pdf nel broswer

lunedì 12 luglio 2010 - 17.55
Tag Elenco Tags  C#  |  .NET 2.0  |  Javascript

ciccioherz Profilo | Junior Member

ciao, come datitolo,
ho un button nella mia pagina aspx e in seguito al click vorrei vedere la stessa pagina, aperta in una nuova finestra del broswer con il pdf incorporato (un po come fa joomla con l'icona di stampa pdf).

sembra un'impresa impossibile..qualcuno puo aiutarmi?

alx_81 Profilo | Guru

>ciao, come datitolo,
Ciao

>ho un button nella mia pagina aspx e in seguito al click vorrei
>vedere la stessa pagina, aperta in una nuova finestra del broswer
>con il pdf incorporato (un po come fa joomla con l'icona di stampa pdf).
Non capisco molto quello che ti serve, hai screenshot di esempio?

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ciccioherz Profilo | Junior Member

no..provo a rispegare:
ho una pagina aspx con un button in cui in seguito al suo click devo visualizzare la stessa pagina aspx in una nuova finestra broswer, questa volta però tale finestra incorpora il contenuto html in un documento pdf.

alx_81 Profilo | Guru

>ho una pagina aspx con un button in cui in seguito al suo click
>devo visualizzare la stessa pagina aspx in una nuova finestra
>broswer, questa volta però tale finestra incorpora il contenuto
>html in un documento pdf.
a prescindere dal fatto che forse potresti evitare di aprire una nuova finestra (anche se non posso dirlo a priori, perchè dovrei capire a cosa serve la nuova pagina se identica), puoi fare come fa google immagini, con un iframe che come sorgente ha un pdf. Che ne pensi?
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ciccioherz Profilo | Junior Member

No siamo fuori strada.
la finestra deve essere una seconda aperta.
il tutto mi serve perche così è stato richiesto. l'utente, vedendo la nuova finestra incorporata in acrobat pdf all'interno del broswer decide se salvarla (in pdf ovviamente) e stamparla.

così mi è stato richiesto, così devo fare e così fanno molti e molti siti web.
tanto per citarne uno solo, joomla contiene tale funzione in tutte le sue versioni credo, di sicuro ce l'ha nella 1.5

alx_81 Profilo | Guru

>la finestra deve essere una seconda aperta.
intendevo proprio una seconda aperta..

>il tutto mi serve perche così è stato richiesto. l'utente, vedendo
>la nuova finestra incorporata in acrobat pdf all'interno del
>broswer decide se salvarla (in pdf ovviamente) e stamparla.
>così mi è stato richiesto, così devo fare e così fanno molti
>e molti siti web.
>tanto per citarne uno solo, joomla contiene tale funzione in
>tutte le sue versioni credo, di sicuro ce l'ha nella 1.5
quello che non ho capito è se tu vuoi avere la pagina DENTRO al pdf oppure se vuoi la pagina replicata e SOTTO il pdf..


--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Gluck74 Profilo | Guru

da quello che hai detto io ho capito che vuoi la stampa/visualizzazione della pagina web in versione PDF.
Per fare questo innanzi tutto ti server una libreria che ti permetta appunto di creare un pdf.
Cercando su google magari trovi qualcosa di free da poter installare sul server.

Dopo dipende dalle funzionalità della libreria che hai scaricato, ma seguendo gli esempi che sicuramente ci saranno, potrai risolvere.
Ciao

Alcuni riferimenti:
http://aspalliance.com/114_How_to_implement_a_Render_this_page_in_PDF.all
http://www.codeproject.com/KB/aspnet/Creating_PDF_documents_in.aspx

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

alx_81 Profilo | Guru

>da quello che hai detto io ho capito che vuoi la stampa/visualizzazione
>della pagina web in versione PDF.
Era proprio quello che stavo cercando di capire. In tal caso, ITextSharp è una buonissima libreria.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ciccioherz Profilo | Junior Member

ITextSharp la conosco, ma sarebbe troppo elaborato il processo..

ho trovato invece questo ottimo eseguibile wkhtmltopdf che tra l'altro (cosa fondamentale) è in grado di generare il pdf seguendo le direttive del css in base ai valori argument che passo al processo stesso. (nel mio caso, gli dico di usare il css media print e lui lo fa).

Ma si tratta comunque di un exe da portare dietro..cosa che vorrei evitare..ma a quanto pare è compito arduo.

alx_81 Profilo | Guru

>Ma si tratta comunque di un exe da portare dietro..cosa che vorrei
>evitare..ma a quanto pare è compito arduo.
eh, una dll o un exe o una dll scritta da te serve cmq..

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

mrub Profilo | Junior Member

guarda che itextsharp non è per niente complicato. Inoltre se la pagina non è complessa puoi effettuare il render dell'html generato dalla pagina e puoi utilizzare un pdf come modello. Di seguito riporto un paio di routine che potrebbero farti comodo, una per salvare il pdf sul server ed una per visualizzare il pdf senza salvarlo. I dati da visualizzare sono contenuti in un repeater che genera una tabella.


Imports System
Imports System.IO
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports iTextSharp.text.html.simpleparser
Imports iTextSharp.text.html

Sub RenderDaPdf()
Response.Clear()
Response.ContentType = "application/pdf"

Dim lettorePdf As New PdfReader(Server.MapPath("~/rid.pdf"))
Dim rettangolo As Rectangle = lettorePdf.GetPageSize(1)
Dim mioWidth As Single = rettangolo.Width
Dim mioHeight As Single = rettangolo.Height
Dim doc As Document = New Document

'Dim doc As Document = New Document(rettangolo, 50, 50, 50, 50)

Dim ms As New MemoryStream

Dim ScrittorePdf As PdfWriter = PdfWriter.GetInstance(doc, ms)
doc.Open()
Dim contenutoByte As PdfContentByte = ScrittorePdf.DirectContent
' doc.NewPage()

Dim i As Integer
Dim sw As StringWriter
Dim hw As HtmlTextWriter
Dim sr As StringReader
Dim htmlparser As HTMLWorker
For i = 1 To 3
doc.NewPage()
Dim pagina1 As PdfImportedPage = ScrittorePdf.GetImportedPage(lettorePdf, 1)
'contenutoByte.AddTemplate(pagina1, 0.5F, 0, 0, 0.5F, 0, mioHeight / 2)
'contenutoByte.AddTemplate(pagina1, 0.95F, 0, 0, 0.95F, 0, 0)
contenutoByte.AddTemplate(pagina1, -50, -40)


contenutoByte.BeginText()
Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, True)
contenutoByte.SetFontAndSize(bf, 8)
contenutoByte.SetTextMatrix(100, 50)
scriviTestoPagina(i, contenutoByte)
contenutoByte.EndText()

sw = New StringWriter()
hw = New HtmlTextWriter(sw)
Repeater1.RenderControl(hw)
sr = New StringReader(sw.ToString())
htmlparser = New HTMLWorker(doc)
htmlparser.Parse(sr)
Next

doc.Close()
'se voglio scrivere il pdf sul FileSystem:
'PdfWriter.GetInstance(doc, New FileStream(Request.PhysicalApplicationPath + "\2.pdf", FileMode.Create))
'Response.Redirect("~/2.pdf")

ScrittorePdf.Flush()

Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length)
Response.OutputStream.Flush()
Response.OutputStream.Close()
Response.End()


End Sub

Sub CreaDaPdf()
'Response.Clear()
'Response.ContentType = "application/pdf"

Dim nomefileDest As String = "~/documenti/c_" & Request.QueryString("i") & "_rid_" & Request.QueryString("d") & ".pdf"

'Dim nomefileDest As String = "~/documenti/rid/rid" & Request.QueryString("p") & ".pdf"

Dim lettorePdf As New PdfReader(Server.MapPath("~/rid.pdf"))
Dim rettangolo As Rectangle = lettorePdf.GetPageSize(1)
Dim mioWidth As Single = rettangolo.Width
Dim mioHeight As Single = rettangolo.Height
Dim doc As Document = New Document
Dim ms As New MemoryStream

Dim ScrittorePdf As PdfWriter = PdfWriter.GetInstance(doc, New FileStream(Server.MapPath(nomefileDest), FileMode.Create))
doc.Open()
Dim contenutoByte As PdfContentByte = ScrittorePdf.DirectContent
' doc.NewPage()

Dim i As Integer
Dim sw As StringWriter
Dim hw As HtmlTextWriter
Dim sr As StringReader
Dim htmlparser As HTMLWorker
For i = 1 To 3
doc.NewPage()
Dim pagina1 As PdfImportedPage = ScrittorePdf.GetImportedPage(lettorePdf, 1)
'contenutoByte.AddTemplate(pagina1, 0.5F, 0, 0, 0.5F, 0, mioHeight / 2)
'contenutoByte.AddTemplate(pagina1, 0.95F, 0, 0, 0.95F, 0, 0)
contenutoByte.AddTemplate(pagina1, -50, -40)


contenutoByte.BeginText()
Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, True)
contenutoByte.SetFontAndSize(bf, 8)
contenutoByte.SetTextMatrix(500, 50)
scriviTestoPagina(i, contenutoByte)
contenutoByte.EndText()

sw = New StringWriter()
hw = New HtmlTextWriter(sw)
Repeater1.RenderControl(hw)
sr = New StringReader(sw.ToString())
htmlparser = New HTMLWorker(doc)
htmlparser.Parse(sr)
Next

doc.Close()
'se voglio scrivere il pdf sul FileSystem:
'PdfWriter.GetInstance(doc, New FileStream(Request.PhysicalApplicationPath + "\2.pdf", FileMode.Create))
Response.Redirect(nomefileDest)

'ScrittorePdf.Flush()
'Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length)
'Response.OutputStream.Flush()
'Response.OutputStream.Close()
'Response.End()


End Sub
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5