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

#c# #asp.net #itextsharp

#c# #asp.net #itext

Вопрос:

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

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

 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, NumberBufferamp; 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:inetpubwwwrootdcisApp_Codepdfgeneration.cs:37
   EntryForm.Button4_Click(Object sender, EventArgs e) in C:inetpubwwwrootdcisEntryForm.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 за ошибку в коде, который он опубликовал

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

Комментарии:

1. В вашей части кода нет проблем, проблема в том, что во время вызова функции может показаться, что вы не приводите правильные аргументы при вызове функции.

2. Если я вас правильно понял, вы хотите преобразовать веб-страницу в pdf. Я прав?

3. @geek Ya я хочу преобразовать содержимое в редакторе (Ajax Control) в pdf, оно содержит HTML-текст.

4. @Ishan: Вы пробовали мое решение?

5. @geek ShowPdf() не существует в текущем контексте, возникает ошибка.

Ответ №1:

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

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

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

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

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

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

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

Ответ №2:

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

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

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

Ответ №3:

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

Используйте исходный код!

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

Ответ №4:

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

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

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

Ответ №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();
    }
  

Комментарии:

1. Пожалуйста, проверьте мой первоначальный вопрос на наличие ошибки в приведенном выше коде.