【发布时间】:2017-05-11 12:25:38
【问题描述】:
终于搞定了
var inputString = @"<html>
<body>
<table class='table-bordered'>
<thead>
<tr>
<th>Customer Name</th>
<th>Customer's Address</th>
</tr>
</thead>
<tbody>
<tr>
<td> XYZ </td>
<td> Bhubaneswar </td>
</tr>
<tr>
<td> MNP </td>
<td> Cuttack </td>
</tr>
</tbody>
</table>
</body>
</html>";
List<string> cssFiles = new List<string>();
cssFiles.Add(@"/Content/bootstrap.css");
var output = new MemoryStream();
var input = new MemoryStream(Encoding.UTF8.GetBytes(inputString));
var document = new Document();
var writer = PdfWriter.GetInstance(document, output);
writer.CloseStream = false;
document.Open();
var htmlContext = new HtmlPipelineContext(null);
htmlContext.SetTagFactory(iTextSharp.tool.xml.html.Tags.GetHtmlTagProcessorFactory());
ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
cssFiles.ForEach(i => cssResolver.AddCssFile(System.Web.HttpContext.Current.Server.MapPath(i), true));
var pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));
var worker = new XMLWorker(pipeline, true);
var p = new XMLParser(worker);
p.Parse(input);
document.Close();
output.Position = 0;
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=myfile.pdf");
Response.BinaryWrite(output.ToArray());
// myMemoryStream.WriteTo(Response.OutputStream); //works too
Response.Flush();
Response.Close();
Response.End();
【问题讨论】:
-
@AnupSharma 我想减小里面表格的字体大小。
-
HTMLWorker被弃用,取而代之的是 XML Worker。HTMLWorker不支持 CSS(并且永远不会支持 CSS,因为它的使用已经停止)。在 iText 官方网站上阅读有关 XML Worker 的更多信息。 -
好吧,给我们看看 HTML 和 CSS。 the web site 上有大量工作示例。但是,在您的问题中使用
HTMLWorker将不起作用。更改您的问题,以便我可以看到您使用 XML Worker,我可能会投票重新打开它。但是,在当前状态下,您的问题的答案是:您想要的不适用于HTMLWorker,请改用 XML Worker。 (这需要 iTextSharp DLL 旁边的额外 DLL。) -
我没有看到您使用 XML Worker。更新您的问题以显示您的 XML Worker 代码并显示您的 HTML 和 CSS。
-
输入的 HTML 无效。
标签: c# model-view-controller download itext html-to-pdf