输入字符串格式不正确

本文关键字:不正确 格式 字符串 输入 | 更新日期: 2023-09-27 18:14:40

我一直试图让我的MVC应用程序创建基于MVC视图的pdf文件。我得到了这个工作与纯html。但我也想包括我的css文件,我使用的浏览器。现在他们中的一些工作,但有一个我得到以下错误:

类型为'System '的异常。格式异常'在mscorlib.dll中发生,但未在用户代码中处理

附加信息:输入字符串格式不正确。

我使用以下代码:

var data = GetHtml(new IndexModel(Context), "~''Views''Home''Index.cshtml", "");
            using (var document = new iTextSharp.text.Document())
            {
                //define output control HTML
                var memStream = new MemoryStream();
                TextReader xmlString = new StringReader(data);
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("c:''tmp''my.pdf", FileMode.OpenOrCreate));
                //open doc
                document.Open();
                // register all fonts in current computer
                FontFactory.RegisterDirectories();
                // Set factories
                var htmlContext = new HtmlPipelineContext(null);
                htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
                // Set css
                ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
                cssResolver.AddCssFile(HttpContext.Server.MapPath("~/Content/elements.css"), true);
                cssResolver.AddCssFile(HttpContext.Server.MapPath("~/Content/style.css"), true);
                cssResolver.AddCssFile(HttpContext.Server.MapPath("~/Content/jquery-ui.css"), true);
                // Export
                IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));
                var worker = new XMLWorker(pipeline, true);
                var xmlParse = new XMLParser(true, worker);
                xmlParse.Parse(xmlString);
                xmlParse.Flush();
                document.Close();
            }

字符串"data"是正确的,没有问题,问题在于AddCssFile()。如果我创建pdf没有和css文件一切正常,但包括css文件触发错误。

输入字符串格式不正确

我不知道确切的答案,但是通过查看您返回的错误,我会尝试两种不同的方法。

  1. cssResolver.AddCssFile(HttpContext.Server.MapPath("~/Content/elements.css"), true);

    var cssPath = HttpContext.Server.MapPath("~/Content/elements.css"), true); cssResolver.AddCssFile(cssPath);

然后设置一个断点并查看为cssPath返回的值。请确保它们是准确的,并且不包含任何奇怪的字符。

第二种方法…如果以上方法都失败了,请尝试为CSS资源(如http://yourdomain.com/cssPath)提供一个绝对URL,而不是文件系统路径。

如果这两种方法中的任何一种对您有帮助,那么您可以使用它来确定实际问题,然后在此之后按照您的意愿重构它。

更新 ------------------------------------------------------------------>根据文档,您需要文件的绝对URL,所以是Server。MapPath不起作用。

addCssFile
void addCssFile(String href,
                boolean isPersistent)
                throws CssResolverException
Add a
Parameters:
href - the link to the css file ( an absolute uri )
isPersistent - true if the added css should not be deleted on a call to clear
Throws:
CssResolverException - thrown if something goes wrong

在这种情况下,我会尝试使用这样的内容:

public string AbsoluteContent(string contentPath)
    {
        var path = Url.Content(contentPath);
        var url = new Uri(HttpContext.Current.Request.Url, path);
        return url.AbsoluteUri;
    }

,像这样使用:

var cssPath = AbsoluteContent("~/Content/embeddedCss/yourcssfile.css");