C# CSS样式未应用于带有iTextSharp的PDF
我正在尝试使用iTextSharp将我的网页的一部分转换为pdf,虽然pdf生成工作正常,但没有应用任何css样式。我试着一次一个地应用这些样式,但似乎不起作用。这就是我到目前为止的想法:C# CSS样式未应用于带有iTextSharp的PDF,c#,pdf-generation,itextsharp,C#,Pdf Generation,Itextsharp,我正在尝试使用iTextSharp将我的网页的一部分转换为pdf,虽然pdf生成工作正常,但没有应用任何css样式。我试着一次一个地应用这些样式,但似乎不起作用。这就是我到目前为止的想法: //Get the portion of the page to convert. StringBuilder sb = new StringBuilder(); print_div.RenderControl(new HtmlTextWriter(new StringWriter(sb))); string
//Get the portion of the page to convert.
StringBuilder sb = new StringBuilder();
print_div.RenderControl(new HtmlTextWriter(new StringWriter(sb)));
string html = sb.ToString();
//Generate a random filename to use for the pdf
Guid random_guid;
random_guid = Guid.NewGuid();
string fileName = random_guid.ToString() + ".pdf";
string filename_with_folder = @"pdf\sl_" + fileName;
string fullFilePath = System.IO.Path.Combine(Request.PhysicalApplicationPath, filename_with_folder);
using (Document doc = new Document())
{
// Create the pdf
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(fullFilePath, FileMode.Create));
doc.Open();
try
{
//Set the font size for all elements
StyleSheet styles = new StyleSheet();
styles.LoadStyle("body", "fontsize", "8px");
//Write the content to the pdf document
StringReader sr = new StringReader(html);
XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, sr);
}
catch (Exception ex)
{
}
doc.Close();
}
我错过什么了吗?我开始使用HTMLWorker,后来改用了XMLWorker,但我想我现在把自己弄糊涂了。我们将不胜感激
尝试2
谢谢你的回复!这是我想到的,但它不起作用。我的内容现在根本没有出现在pdf中,我也不知道为什么。有什么想法吗
using (Document doc = new Document())
{
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(fullFilePath, FileMode.Create));
doc.Open();
// CSS
var cssResolver = new StyleAttrCSSResolver();
var cssFile = XMLWorkerHelper.GetCSS(new FileStream(HttpContext.Current.Server.MapPath("~/css/print.css"), FileMode.Open));
cssResolver.AddCss(cssFile);
// HTML
CssAppliers ca = new CssAppliersImpl();
HtmlPipelineContext hpc = new HtmlPipelineContext(ca);
hpc.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
// PIPELINES
PdfWriterPipeline pdf = new PdfWriterPipeline(doc, writer);
HtmlPipeline htmlPipe = new HtmlPipeline(hpc, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, htmlPipe);
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
StringReader sr = new StringReader(html);
p.Parse(sr);
doc.Close();
}
我是接近还是完全忽略了要点?您可以使用CSSResolver创建XmlWorker
var cssResolver = new StyleAttrCSSResolver();
//Change the path to your CSS file
var cssFile = XMLWorkerHelper.GetCSS(new FileStream(HttpContext.Current.Server.MapPath("~/pdf.css"), FileMode.Open));
cssResolver.AddCss(cssFile);
然后创建HtmlPipeline并将其传递给CssResolverPipeline构造函数:
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
using (TextReader sr = new StringReader(html))
{
p.Parse(sr);
document.Close();
}
//close your writer
pdfwriter.Close();
不确定您是否设法解决了这个问题,但我也遇到了同样的问题,即在我的问题“”中没有应用CSS样式
基本上,我发现样式表的某些部分正在应用(例如,表格单元格周围的边框),但其他部分没有应用(字体的颜色、任何不在PX中的内容的大小)为了使用样式表使用XmlWorker创建PDF文件,您可以尝试返回字节数组的示例代码
byte[] bytesArray = null;
using (var ms = new MemoryStream())
{
using (var document = new Document())
{
using (PdfWriter writer = PdfWriter.GetInstance(document, ms))
{
document.Open();
using (var strReader = new StringReader(html))
{
//Set factories
HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
//Set css
ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
cssResolver.AddCssFile(System.Web.HttpContext.Current.Server.MapPath("~/Content/bootstrap.min.css"), true);
//Export
IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));
var worker = new XMLWorker(pipeline, true);
var xmlParse = new XMLParser(true, worker);
xmlParse.Parse(strReader);
xmlParse.Flush();
}
document.Close();
}
}
bytesArray = ms.ToArray();
}
return bytesArray;
第一个问题,格式正确的代码,显示您尝试过的内容,简短准确的描述。这肯定很少见,你解决了吗?请张贴您的答案或指导如何做?我和你的处境一样。。。。