【发布时间】:2017-09-23 07:52:02
【问题描述】:
public string GetPDF(string pHTML)
{
byte[] pdf; // result will be here
var cssText = System.IO.File.ReadAllText(HttpContext.Server.MapPath("~/Content/bootstrap.css"));
cssText=cssText + System.IO.File.ReadAllText(HttpContext.Server.MapPath("~/Content/styles.css"));
var html = pHTML;
using (var memoryStream = new MemoryStream())
{
var document = new Document(PageSize.A4, 15, 15, 15, 15);
var writer = PdfWriter.GetInstance(document, memoryStream);
document.Open();
using (var cssMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(cssText)))
{
using (var htmlMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)))
{
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, htmlMemoryStream, cssMemoryStream);
}
}
document.Close();
pdf = memoryStream.ToArray();
}
var temp = Convert.ToBase64String(pdf);
return temp;
}
我将 html 字符串从 razor 视图传递到控制器,但是当 XMLWorkerHelper 尝试解析时显示图像标记关闭错误,如果我直接从后面的代码传递图像标记字符串,则不显示图像
【问题讨论】:
-
问题很可能出在您输入
XMLWorkerHelper的html/css 中。还请显示这些数据,特别是那些负责相关图像的部分。 -
我可以将 data:image/png;base64 图像导出为 pdf 吗?
-
可以,但您需要使用自定义图像提供程序。
-
如果您不希望文件系统中的结果,请不要将其流式传输到那里。引用的示例使用
FileStream,但这不能阻止您像在代码中那样使用MemoryStream,可以吗? -
谢谢我刚刚添加使用 (var memoryStream = new MemoryStream()) {.... } 并且它有效
标签: c# asp.net asp.net-mvc itext