MVC4用HTML模板生成PDF遇XMLWorkerHelper无参构造函数错误求助
解决XMLWorkerHelper无参构造函数错误的方案
你遇到的问题很明确:XMLWorkerHelper类没有公开的无参构造函数,而且它本身是一个工具类,设计上就不应该通过new来实例化,而是要使用它的静态方法完成HTML到PDF的解析工作。另外你代码里用到的HTMLWorker已经被XMLWorker取代,建议直接用XMLWorkerHelper的静态方法处理,这样更规范也能避免过时API的问题。
修改步骤:
- 删除
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);和XMLWorkerHelper htw = new XMLWorkerHelper();这两行无效代码 - 使用
XMLWorkerHelper.GetInstance().ParseXHtml()静态方法解析HTML内容,该方法会自动处理HTML到PDF的转换逻辑
修改后的完整控制器代码:
public void abcd() { try { string UniqueNumber = Request.QueryString["UniqueNumber"]; string strFileName = UniqueNumber; string strFileExtension = ".pdf"; string strContentType = FileManager.FileContentType_application_pdf; string strExportData = string.Empty; Document pdfDoc = new Document(PageSize.A4, 43f, 50f, 5f, 50f); var output = new MemoryStream(); StringReader sr = new StringReader(Convert.ToString(ExportData.UserDetails(UniqueNumber))); // 关联PdfWriter与Document PdfWriter writer = PdfWriter.GetInstance(pdfDoc, output); pdfDoc.Open(); // 使用XMLWorkerHelper静态方法解析HTML XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr); pdfDoc.Close(); // 格式化文件名,避免特殊字符问题 strFileName = strFileName.Replace(" - ", "-").Replace(" ", "-").Replace("--", "-"); // 输出PDF到响应流 Response.ClearContent(); Response.Buffer = true; Response.AddHeader("content-disposition", string.Format("attachment; filename={0}{1}", strFileName, strFileExtension)); Response.ContentType = strContentType; Response.Charset = ""; Response.BinaryWrite(output.ToArray()); Response.Flush(); Response.End(); } catch (Exception ex) { // 建议添加异常日志记录逻辑,方便排查问题 } }
关键说明:
XMLWorkerHelper.GetInstance()是获取工具类实例的正确方式,它会返回单例实例,无需手动实例化ParseXHtml()是XMLWorker推荐的HTML解析方法,相比旧的HTMLWorker支持更多HTML标签和样式特性- 必须在
pdfDoc.Open()之前创建并关联PdfWriter,这样解析后的内容才能正确写入输出流
内容的提问来源于stack exchange,提问作者Dip Girase
相关产品推荐
相关产品推荐

