Ошибка, поскольку входная строка была в неправильном формате - PullRequest
4 голосов
/ 29 апреля 2011

Я получаю следующую ошибку при нажатии кнопки input string was not in a correct format,

При нажатии кнопки я вызываю следующий метод:

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();
    }

}

трассировка стека:

[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.simpleparser.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

Как я могу устранить эту ошибку?

@ geek за ошибку в опубликованном им коде

enter image description here

Ответы [ 5 ]

9 голосов
/ 28 июня 2011

Я столкнулся с той же ошибкой, "Входная строка была не в правильном формате." , я проверил мою строку html и обнаружил, что, если я пишу ширину таблицы вне тега стиля, я получаю эту ошибку , Например,: - выдает ошибку в методе htmlWorker.Parse ().

когда я помещаю тег ширины в тег стиля, я решаю эту ошибку, Например,

Надеюсь, это вам немного поможет.

For eg, <table width="610px"> </table> :- Give error at htmlWorker.Parse() method.

Когда я помещаю тег ширины в тег стиля, я решаю эту ошибку,

For eg, <table style="width:610px"> </table>

Надеюсь, это вам немного поможет.

3 голосов
/ 29 апреля 2011

Вы могли бы начать, сузив его в пределах pdfgenerator ... Включение символов сборки для этой dll было бы началом, но даже некоторой простой трассировкой, чтобы вы могли сказать, куда она попала, когда онапомогло бы взорвать.

В конечном итоге PdfWriter не является ядром .NET, поэтому вам придется помочь нам сузить его.

Или даже проще: нажмите «Начать отладку» и введитеточка останова на этом методе;Теперь пройдитесь и увидите a: где он взрывается, и b: каковы ключевые значения в этой точке.

2 голосов
/ 26 мая 2011

У меня была та же проблема, что и у вас, и я нашел другое решение.

Эта ошибка возникает, когда он пытается проанализировать размер с помощью части «px». Чтобы решить эту проблему, просто замените строку HTML «px» вхождения на «». Он до сих пор знает, что это пиксели.

Надеюсь, это работает на вашем деле!

2 голосов
/ 02 мая 2011

Похоже, у вас есть нечисловое значение стиля, где iTextSharp ожидает число."font-size: normal" или что-то в этом роде.

CellWrapper(String, ChainedProperties) смотрит на HtmlTags.WIDTH.Вот источник из 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);
        }
    }

Очень похоже, что проблема в вызове float.Parse ().Похоже, что этот код не может обрабатывать ничего, кроме «%» или лысого числа.Если ваша ширина определена в «см», «px» или где-то еще, это может быть проблемой.

Использовать источник!

PS: Какую версию вы используете?IIRC, iText уже давно поставляется с отладочной информацией.Если ничего не помогает, просто создайте отладочную версию самостоятельно.

0 голосов
/ 29 апреля 2011

попробуйте

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();
    }
...