Introduction
This project uses an HTML to PDF exe from ESP. 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.
Using the code
Code
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.
Code
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.
Here is the original link,
http://www.codeproject.com/KB/aspnet/HTML2PDF.aspx