错误:输入字符串格式不正确。

4

点击按钮时,我遇到了以下错误:输入字符串的格式不正确

点击按钮后,我调用以下方法:

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,针对他发布的代码中的错误。

在此输入图片描述


你的代码部分没有问题,问题可能出在你调用函数时没有传递正确的参数。 - Sai Kalyan Kumar Akshinthala
@geek,我想将编辑器(Ajax Control)中的内容转换为PDF格式,其中包含HTML文本。 - Ishan
@Ishan:你试过我的解决方案了吗? - santosh singh
@geek ShowPdf() 在当前上下文中不存在错误。 - Ishan
@IShan: 分享你的HTML内容 - santosh singh
显示剩余4条评论
5个回答

9

我遇到了同样的错误,错误信息是"输入字符串的格式不正确。",我检查了我的HTML字符串并发现,如果将表格宽度写在style标签之外,就会出现这个错误,例如:在htmlWorker.Parse()方法处出错。

当我将宽度标签放在style标签中时,就解决了这个错误,例如:

希望这对你有所帮助。

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

当我在样式标签中添加宽度标签时,我解决了这个错误。
For eg, <table style="width:610px"> </table>

我希望这能对你有所帮助。


3
你可以从缩小范围开始,在pdfgenerator中进行...启用该dll的构建符号将是一个好的开始,但即使只是一些简单的跟踪,以便在它爆炸时可以知道它到了哪里,也会有所帮助。
最终,PdfWriter不是核心.NET,所以你必须帮助我们缩小范围。
或者更简单的方法是:点击“开始调试”,并在该方法上设置断点;现在逐步执行,查看a:它在哪里爆炸,b:在那一点上的关键值是什么。

2

看起来您提供了一个非数字的样式值,而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()调用上。这段代码似乎只能处理“%”或纯数字。如果你的宽度以“cm”、“px”或其他单位定义,那就可能是问题所在。

查看源代码!

顺带一提,你用的是哪个版本?据我所知,iText已经很长一段时间都附带有调试信息了。如果所有方法都失败了,只需自己构建一个调试版本即可。


2

我曾经遇到了和你一样的问题,但我找到了另一个解决方案。

当它尝试解析带有 "px" 部分的大小时会出现该错误。要解决这个问题,只需要将 HTML 字符串中的 "px" 替换为 "" 即可,它仍然知道这是像素。

希望这对你有帮助!


0

试一下这个

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

请检查我的原始问题,以查找您上面给出的代码中的错误。 - Ishan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接