Category: ASP.NET
Please Note: You need a hosting plan that supports custom components to use this software. There is also a one off charge for the HTMLDOC license cost from the product vendor plus a Hyve setup fee, please contact sales for more information.
This project uses an HTML to PDF exe from ESP [http://www.easysw.com/htmldoc/]. Please read the GNU license agreement for more information. HTMLDOC is a desktop application to create PDF documents from a HTML page. I wrote some code to use it from a web application. The best used is from a Web Report to add a PRINT to PDF button to use the C# class.
public string Run(string sRawUrl) { string sFileName = GetNewName(); string sPage = Server.MapPath("" + sFileName + ".html"); string sUrlVirtual = sRawUrl; StringWriter sw = new StringWriter(); Server.Execute(sUrlVirtual, sw); StreamWriter sWriter = File.CreateText(sPage); sWriter.WriteLine(sw.ToString()); sWriter.Close(); System.Diagnostics.Process pProcess = new System.Diagnostics.Process(); pProcess.StartInfo.FileName = m_sDrive + ":" + m_Directory + "ghtmldoc.exe"; pProcess.StartInfo.Arguments = "--webpage --quiet " + sFontSize + m_sWaterMark + " --bodyfont Arial " + sLandScape + " -t pdf14 -f " + sFileName + ".pdf " + sFileName + ".html"; pProcess.StartInfo.WorkingDirectory = m_sDrive + ":" + m_Directory; pProcess.Start(); return(sFileName + ".pdf"); }
The class PDFGenerator contains a public method called Run that will call the process hghtmldoc.exe with the arguments you choose. The most important part is to set a working directory where the Web application has permission to read, write and execute, otherwise the program won’t work, and the function pProcess.Start will raise a Win32 Exception “access denied”.
StreamWriter will save the page into a HTML file on the hard disk.
The file DisplayPDF.aspx and DisplayPDF.aspx.cs will do just that, displays the generated PDF file when ready.
private void Page_Load(object sender, System.EventArgs e) { if ( Request.Params["File" = null ) { bool bRet = false; int iTimeout = 0; while ( bRet == false ) { bRet = CheckIfFileExist(Request.Params["File".ToString()); Thread.Sleep(1000); iTimeout++; if ( iTimeout == 10 ) break; } if ( bRet == true ) { Response.ClearContent(); Response.ClearHeaders(); Response.ContentType = "Application/pdf"; try { Response.WriteFile( MapPath( "" + Request.Params["File".ToString() ) ); Response.Flush(); Response.Close(); } catch { Response.ClearContent(); } } else { if ( Request.Params["Msg" = null ) { LabelMsg.Text = Request.Params["Msg".ToString(); } } } }
The page accepts a parameter, FILE, previously saved in the hard disk by StreamWriter. The Response.Redirect will include application/PDF, so the browser knows what kind of file is downloading and ask you to SAVE or OPEN. If you have Adobe plug-in installed on your browser, you’ll be able to see the PDF from your browser.
Tags:
asp.net