使用itextsharp
将html转换为pdf时,使用css申请网页的样式在转换后的pdf中无效。
这是我的css代码:
<style type="text/css">
.cssformat
{
width:300px;
height:200px;
border:2px solid black;
background-color:white;
border-top-left-radius:60px 90px;
border-bottom-right-radius:60px 90px;
}
</style>
这是我的HTML代码:
<div id="divpdf" runat="server">
<table id="tid" runat="server">
<tr>
<td>
<asp:Label ID="Label1" runat="server" Text="this is new way of pdf" CssClass="cssformat"></asp:Label>
</td>
</tr>
</table>
</div>
以下是我用c#试过的:
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=TestPage.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
Document pdfDoc = new Document(PageSize.A4, 60f, 80f, -2f, 35f);
divpdf.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
hw1.Parse(new StringReader(sttt));
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();
sw.Close();
sr.Close();
hw.Close();
答案 0 :(得分:4)
我使用iTextSharp从HTML转换为PDF,并且最终放弃了,因为我无法获得看起来与我的HTML5 / CSS3页面100%相同的转换PDF。所以我给你最终适合我的替代方案。
当您不准备支付商业图书馆的费用时,可用的选项很少。我的一个客户(从HTML转换为PDF)有同样的要求,不想支付任何第三方工具,所以我不得不制定计划。这就是我所做的,而不是最好的解决方案,但它完成了工作
我下载了wkhtmltopdf的最新版本。不幸的是,wkhtmltopdf工具在转换为PDF时没有显示我的HTML中嵌入的一些谷歌图表。所以我使用了包含的wkhtmltoimage工具转换为PNG,它按预期方式唤醒并显示所有图形。 然后我下载了最新版本的imagemagick并将PNG转换为PDF。 我使用C#自动执行此过程。
不幸的是,这不是最优雅的解决方案,因为你必须执行两次转换并做一些工作来自动化所有内容,但这是我能想出的最佳解决方案,它给了我所需的结果和质量。
当然,有很多商业软件会做得更快更好。
只是旁注:
我必须转换的网页使用引导程序版本3在HTML5和CSS3中发布,它包含一些谷歌图形和图表。一切都没有任何问题。
答案 1 :(得分:0)
下面是转换包含内联CSS代码的HTML内容的示例。
public static class PdfCreator {
public static string ConvertHtmlToPdf(string htmlContent, string fileNameWithoutExtension, string filePath, string cssContent = "") {
if (!Directory.Exists(filePath)) {
Directory.CreateDirectory(filePath);
}
var fileNameWithPath = Path.Combine(filePath, fileNameWithoutExtension + ".pdf");
using(var stream = new FileStream(fileNameWithPath, FileMode.Create)) {
using(var document = new Document()) {
var writer = PdfWriter.GetInstance(document, stream);
document.Open();
// instantiate custom tag processor and add to `HtmlPipelineContext`.
var tagProcessorFactory = Tags.GetHtmlTagProcessorFactory();
tagProcessorFactory.AddProcessor(new TableData(), new string[] {
HTML.Tag.TD
});
var htmlPipelineContext = new HtmlPipelineContext(null);
htmlPipelineContext.SetTagFactory(tagProcessorFactory);
var pdfWriterPipeline = new PdfWriterPipeline(document, writer);
var htmlPipeline = new HtmlPipeline(htmlPipelineContext, pdfWriterPipeline);
// get an ICssResolver and add the custom CSS
var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);
cssResolver.AddCss(cssContent, "utf-8", true);
var cssResolverPipeline = new CssResolverPipeline(
cssResolver, htmlPipeline);
var worker = new XMLWorker(cssResolverPipeline, true);
var parser = new XMLParser(worker);
using(var stringReader = new StringReader(htmlContent)) {
parser.Parse(stringReader);
}
}
}
return fileNameWithPath;
}
}
答案 2 :(得分:-1)
<asp:Lable>
的输出格式是“span”,它是内联显示类型。因此将显示更改为阻止。享受..