Error as Input string was not in a correct format
I am getting the following error on click of a button
On click of a button i am calling the following method:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.html;
/// <summary>
/// Summary description for pdfgeneration
/// </summary>
public class pdfgeneration
{
public pdfgeneration()
{
//
// TODO: Add constructor logic here
//
}
public void pdfgenerator(String name1, AjaxControlToolkit.HTMLEditor.Editor Editor1)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/pdf";
// Create PDF document
Document pdfDocument = new Document(PageSize.A4, 70, 55, 40, 25);
PdfWriter wri = PdfWriter.GetInstance(pdfDocument, new FileStream("e://" +name1 + ".pdf", FileMode.Create));
PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream);
pdfDocument.Open();
string htmlText = Editor1.Content;
System.Collections.Generic.List<IElement> htmlarraylist = HTMLWorker.ParseToList(new StringReader(htmlText), null);
for (int k = 0; k < htmlarraylist.Count; k++)
{
pdfDocument.Add((IElement)htmlarraylist[k]);
}
pdfDocument.Close();
HttpContext.Current.Response.End();
}
}
the stack trace is:
[FormatException: Input string was not in a correct format.]
System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +7471335
System.Number.ParseSingle(String value, NumberStyles options, NumberFormatInfo numfmt) +115
System.Single.Parse(String s, NumberStyles style, NumberFormatInfo info) +192
iTextSharp.text.html.simpleparser.CellWrapper..ctor(String tag, ChainedProperties chain) +148
iTextSharp.text.html.simpleparser.HTMLTagProcessor_TD.StartElement(HTMLWorker worker, String tag, IDictionary`2 attrs) +84
iTextSharp.text.html.simpleparser.HTMLWorker.StartElement(String tag, Dictionary`2 attrs) +79
iTextSharp.text.xml.simpleparser.SimpleXMLParser.ProcessTag(Boolean start) +30
iTextSharp.text.xml.simpl开发者_JS百科eparser.SimpleXMLParser.Go(TextReader reader) +1008
iTextSharp.text.xml.simpleparser.SimpleXMLParser.Parse(ISimpleXMLDocHandler doc, ISimpleXMLDocHandlerComment comment, TextReader r, Boolean html) +48
iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(TextReader reader, StyleSheet style, IDictionary`2 tags, Dictionary`2 providers) +94
iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(TextReader reader, StyleSheet style) +9
pdfgeneration.pdfgenerator(String name1, Editor Editor1) in C:\inetpub\wwwroot\dcis\App_Code\pdfgeneration.cs:37
EntryForm.Button4_Click(Object sender, EventArgs e) in C:\inetpub\wwwroot\dcis\EntryForm.aspx.cs:224
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
How can I resolve this error?
@ geek for error in the code he has posted
I have facing same error, "Input string was not in a correct format.", i check my html string and found that, if i write table width outside of style tag, i get this error, For eg, :- Give error at htmlWorker.Parse() method.
when i put width tag in style tag, i resolve this error, For eg,
I hope, this will help you little bit.
For eg, <table width="610px"> </table> :- Give error at htmlWorker.Parse() method.
when i put width tag in style tag, i resolve this error,
For eg, <table style="width:610px"> </table>
I hope, this will help you little bit.
You could start by narrowing it down within pdfgenerator
... Enabling build symbols for that dll would be a start, but even some simple tracing so that you can tell where it got to when it exploded would help.
Ultimately PdfWriter
isn't core .NET, so you will have to help us narrow it down.
Or even simpler: hit "Start Debugging", and put a break-point on that method; now step through and see a: where it explodes, and b: what the key values are at that point.
This looks like you've got a non-numeric style value where iTextSharp is expecting a number. "font-size:normal" or something like that.
CellWrapper(String, ChainedProperties)
is looking at the HtmlTags.WIDTH
. Here's the source from iTextSharp 5.0.6:
public CellWrapper(String tag, ChainedProperties chain) {
this.cell = CreatePdfPCell(tag, chain);
String value = chain[HtmlTags.WIDTH];
if (value != null) {
value = value.Trim();
if (value.EndsWith("%")) {
percentage = true;
value = value.Substring(0, value.Length - 1);
}
width = float.Parse(value, CultureInfo.InvariantCulture);
}
}
It looks an awful lot like the problem is in the float.Parse() call. It looks like this code can't handle anything but '%' or a bald number. If your width is defined in 'cm', 'px', or whatever, that may well be the problem.
Use the Source!
PS: What version are you using? IIRC, iText has been shipping with debug info for quite some time. If all else fails, just build a debug version yourself.
I was having the same problem you had and I found another solution.
That error occurs when it tries to parse a size with the "px" part. To solve it, just replace the HTML string "px" occurences for "". It still knows that it is pixels.
Hope it works on your case!
try this
public void CreatePDFDocument(string strHtml)
{
string strFileName = HttpContext.Current.Server.MapPath("test.pdf");
// step 1: creation of a document-object
Document document = new Document();
// step 2:
// we create a writer that listens to the document
PdfWriter.GetInstance(document, new FileStream(strFileName, FileMode.Create));
StringReader se = new StringReader(strHtml);
HTMLWorker obj = new HTMLWorker(document);
document.Open();
obj.Parse(se);
document.Close();
ShowPdf(strFileName);
}
public void ShowPdf(string strFileName)
{
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "inline;filename=" + strFileName);
Response.ContentType = "application/pdf";
Response.WriteFile(strFileName);
Response.Flush();
Response.Clear();
}
精彩评论