Reputation: 181
Here i am trying to convert the content inside html div tag to pdf i found the following error:
Input string was not in a correct format is occur
Here is the code i tried using c#:
public string getWhileLoopData()
{
string htmlStr = "";
SqlConnection thisConnection = new SqlConnection("Data Source=VELU-PC\\SQLEXPRESS;Initial Catalog=EEP;Trusted_Connection=True;");
SqlCommand thisCommand = thisConnection.CreateCommand();
thisCommand.CommandText = "select * from Product_category";
thisConnection.Open();
SqlDataReader reader = thisCommand.ExecuteReader();
while (reader.Read())
{
string id = reader.GetString(6);
string Name = reader.GetString(3);
string Pass = reader.GetString(5);
htmlStr += "<tr><td><table width='200px'><tr><td align='center'><img src=" + id + " /></td></tr><tr><td align='center'>" + Name + "</td></tr></table></td><td><table width='600px'><tr><td align='left' style='border:1px solid blue;border-radius:7px;box-shadow: 10px 0 10px #888888; padding: 8px 6px 0 7px;'>Features: <br/><p style='margin-top: 10px;'>" + Pass + "</p></td></tr></table></td></tr>";
}
thisConnection.Close();
return htmlStr;
}
void generatetable()
{
divexcel.Visible = true;
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=TestPage.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
divexcel.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 80f, 80f, -2f, 35f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();
}
public override void VerifyRenderingInServerForm(System.Web.UI.Control control)
{ }
protected void button_Click(object sender, EventArgs e)
{
generatetable();
}
Here is my html code:
<div id="divexcel" runat="server">
<table><tr><td><asp:Button ID="button" runat="server" Text="Submit"
onclick="button_Click" /></td></tr></table>
<table align="center" width="100%">
<tr>
<td>
<table>
<tr><td align="center">ID</td></tr>
<tr><td align="center">Name </td></tr>
</table>
</td>
<td>
<table>
<tr><td align='left'>Features: <br/><p>Pass</p></td></tr>
</table>
</td>
</tr>
<%=getWhileLoopData()%>
</table>
</div>
Upvotes: 4
Views: 38864
Reputation: 688
I recommended to don't use the htmlworker because it is the old one and won't support css styles, so try to use the xmlworker insted of htmlworker. It is very simple refer the following code.
Refer from here
protected void lnkPDF_Clicked(object sender, EventArgs e)
{
Document Doc;
Doc = new Document(PageSize.A4, 10f, 10f, 50f, 20f);
string filename = "PaySlip";
string outXml = selectedhtml.Value;
outXml = "<style>#tdiv1{background:red;color:white;}</style>" + outXml;
outXml = outXml.Replace("px", "");
outXml = outXml.Replace("<br>", "<br/>");
MemoryStream memStream = new MemoryStream();
TextReader xmlString = new StringReader(outXml);
using (Document document = new Document())
{
PdfWriter writer = PdfWriter.GetInstance(document, memStream);
document.Open();
byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(outXml);
MemoryStream ms = new MemoryStream(byteArray);
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, ms, System.Text.Encoding.UTF8);
document.Close();
}
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.BinaryWrite(memStream.ToArray());
Response.End();
Response.Flush();
}
Upvotes: 3
Reputation: 2210
Try to replace width='200px' with width='200' it should work. Remove px from every places with width.
Upvotes: 0