HTML元素';使用iTextSharp转换后,s页边距不应用于PDF格式
我正在使用iTextSharp库进行HTML到PDF的转换。 你能解释一下为什么下面的HTML+CSS不能正确转换成PDF吗?看起来根本没有应用元素边距…文本粘贴在左侧。浏览器(Chrome)可以很好地居中HTML元素';使用iTextSharp转换后,s页边距不应用于PDF格式,html,css,itextsharp,Html,Css,Itextsharp,我正在使用iTextSharp库进行HTML到PDF的转换。 你能解释一下为什么下面的HTML+CSS不能正确转换成PDF吗?看起来根本没有应用元素边距…文本粘贴在左侧。浏览器(Chrome)可以很好地居中 CSS: #sgh-mainC { width: 100px; margin-top: 0; margin-bottom: 0; margin-right: auto; margin-left: auto; } HTML: 多谢各位。 关于这个
CSS:
#sgh-mainC {
width: 100px;
margin-top: 0;
margin-bottom: 0;
margin-right: auto;
margin-left: auto;
}
HTML:
多谢各位。
关于这个问题有点老了,不过万一有人无意中发现了这个帖子
iTextSharp实际支持的CSS集似乎非常有限。您可以在1找到它。您是否正在使用
HTMLWorker
?如果是这样,那么您应该知道,HTMLWorker
早就被放弃了,而且HTMLWorker
中不支持CSS。2.您正在使用XML Worker吗?如果是这样的话,请注意并非所有CSS值都受支持,但是如果您提供了一个,那么您可以看到,有人可以查看it.XMLWorker。我在帖子中添加了我正在使用的方法。我稍后会做SSCCE。但这几乎就是一切。。。
<!DOCTYPE html>
<html lang="en">
<head>
<title>PDS</title>
</head>
<body>
<div id="sgh-mainC">
text that should be centered
</div>
</body>
</html>
private void CreatePdf(string html, string css)
{
try
{
Byte[] bytes;
using (var ms = new MemoryStream())
{
using (var doc = new Document())
{
using (var writer = PdfWriter.GetInstance(doc, ms))
{
doc.Open();
var cssResolver = new StyleAttrCSSResolver();
var msCss = XMLWorkerHelper.GetCSS(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)));
cssResolver.AddCss(msCss);
HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
htmlContext.AutoBookmark(false);
var htmlStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html));
PdfWriterPipeline pdfPpl = new PdfWriterPipeline(doc, writer);
HtmlPipeline htmlPpl = new HtmlPipeline(htmlContext, pdfPpl);
CssResolverPipeline cssPpl = new CssResolverPipeline(cssResolver, htmlPpl);
new XMLParser(new XMLWorker(cssPpl, true)).Parse(htmlStream);
doc.Close();
}
}
bytes = ms.ToArray();
}
if (File.Exists(FilePath))
{
File.Delete(FilePath);
}
var file = File.Create(FilePath);
file.Write(bytes, 0, bytes.Count());
file.Close();
}
catch (Exception exc)
{
//TODO log errror
}
}