4

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>
1
  • if i remove style from the line 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>"; means its working fine without style. Commented Oct 26, 2013 at 7:05

2 Answers 2

3

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();
}
Sign up to request clarification or add additional context in comments.

Comments

0

Try to replace width='200px' with width='200' it should work. Remove px from every places with width.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.