输入字符串格式不正确
本文关键字:不正确 格式 字符串 输入 | 更新日期: 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文件触发错误。
我不知道确切的答案,但是通过查看您返回的错误,我会尝试两种不同的方法。
-
转
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");