Ошибка, так как входная строка имеет неправильный формат

Я получаю следующую ошибку при нажатии кнопки входная строка имеет неправильный формат,

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

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 за ошибку в коде, который он опубликовал

введите здесь описание изображения


person Ishan    schedule 29.04.2011    source источник
comment
В вашей части кода нет проблем, проблема заключается в том, что вы вызываете функцию, может быть, это звучит так, что вы не даете правильных аргументов при вызове функции.   -  person Sai Kalyan Kumar Akshinthala    schedule 29.04.2011
comment
Если я вас правильно понял, вы хотите преобразовать веб-страницу в pdf. Я прав?   -  person santosh singh    schedule 29.04.2011
comment
@geek Я хочу преобразовать содержимое в редакторе (Ajax Control) в pdf, оно содержит текст html.   -  person Ishan    schedule 29.04.2011
comment
@Ishan: Вы пробовали мое решение?   -  person santosh singh    schedule 29.04.2011
comment
@geek ShowPdf() не существует в текущем контексте возникает ошибка.   -  person Ishan    schedule 29.04.2011
comment
@Ishan: я обновил свой ответ   -  person santosh singh    schedule 29.04.2011
comment
@geek Пожалуйста, проверьте мой первоначальный вопрос на предмет ошибки в приведенном выше коде.   -  person Ishan    schedule 02.05.2011
comment
@IShan: поделитесь своим html-контентом   -  person santosh singh    schedule 02.05.2011
comment
@geek stackoverflow.com/questions/5856484/ это решило мою проблему   -  person Ishan    schedule 03.05.2011


Ответы (5)


попробуй это

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();
    }
person santosh singh    schedule 29.04.2011
comment
Пожалуйста, проверьте мой исходный вопрос на предмет ошибки в приведенном выше коде. - person Ishan; 02.05.2011

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

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

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

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

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

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

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

person ashish    schedule 28.06.2011

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

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

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

person Marc Gravell    schedule 29.04.2011

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

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(). Похоже, этот код не может обрабатывать ничего, кроме «%» или пропущенного числа. Если ваша ширина определяется в «см», «пикселях» или чем-то еще, это может быть проблемой.

Используйте Источник!

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

person Mark Storer    schedule 02.05.2011

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

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

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

person pmmaga    schedule 26.05.2011