【问题标题】:Itext7 HTML to PDF conversion using Html2pdf when HTML is passed as input string and CSS as file当 HTML 作为输入字符串和 CSS 作为文件传递时,使用 Html2pdf 将 Itext7 HTML 转换为 PDF
【发布时间】:2017-05-24 11:42:38
【问题描述】:

我已经通过 Itext 5 XMLWorker 实现了 HTML 到 PDF 的转换。请在下面找到代码:

using (var ms = new MemoryStream())
using (var document = new Document())
{
 using (var writer = PdfWriter.GetInstance(document, ms))
 {
  document.Open();
  document.SetMargins(30, 60, 60, 60);
  using (var strReader = new StringReader(htmlToExport))
  {
    //Set factories
    var htmlContext = new HtmlPipelineContext(null);
    htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
    //Set css
    var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver   (false);
    // cssResolver.AddCssFile(HttpContext.Current.Server.MapPath  ("~/Content/bootstrap.min.css"),
    //    true);
    cssResolver.AddCssFile("http://localhost:8902/Content/bootstrap.css", true);
    //Export
    var 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();
  }
}

我无法在 Itext7 中找到完全满足上述要求的相关示例。

【问题讨论】:

  • 以后的道歉我会小心的

标签: itext7


【解决方案1】:

您不再需要显式地传递/添加 CSS 文件,pdfHTML(Html2Pdf 曾经是内部开发名称),可以获取 HTML 中链接的样式表。如果您的 CSS 与 HTML 不在同一个文件夹中,您可能需要定义一个基本资源位置。

在您的 HTML 中,在标题中添加以下行

<link rel="stylesheet" type="text/css" href="bootstrap.css"/>

你想把它们的转换代码添加到一个

File pdf = new File(pdfDest);
pdf.getParentFile().mkdirs();

PdfWriter writer  = new PdfWriter(pdfDest);
PdfDocument pdfDoc = new PdfDocument(writer);

ConverterProperties converterProperties = new ConverterProperties().setBaseUri(resourceLoc);

HtmlConverter.convertToPdf(new FileInputStream(htmlSource), pdfDoc, converterProperties);
pdfDoc.close();

【讨论】:

  • 感谢您的回复!在我的应用程序中,HTML 作为输入字符串出现,我没有将 PDF 保存在 Drive Location 中,因为它将从浏览器本身下载。在那种情况下,根据我的理解,我是否需要设置 converterProperties.SetTagWorkerFactory(iText.Html2pdf.Attach.ITagWorkerFactory); converterProperties.SetCssApplierFactory?如何在上述情况下设置converterProperties?还有其他选择吗?
  • HTMLConvertor#converToPdf() 接受许多不同的输入,包括字符串和输出流。如果您使用自定义 tagworker 和 css 应用程序,则只需设置 TagWorkerFactory 和 CssApplierfactory。
  • 由于我是 Itext 7 的新手,您能否提供示例 .in .Net C# 来为转换器属性设置 TagWorkerFactory CssApplierfactory 对象。SetTagWorkerFactory(iText.Html2pdf.Attac‌​h.ITagWorkerFactory)‌​;转换器属性.SetCssApplierFactory。作为方法参数 Interface ,我正在寻找如何使用 in Parameter 初始化 Interface 对象
  • 使用 Itext 7(HTML 到 PDF)(Html2pdf)的 POC,我遇到了有关 BootStap.css 的问题。当我提供自定义 CSS 类时,Itext 7 工具能够呈现自定义 CSS 文件中提到的样式。 Itext 7 无法呈现 bootstrap.css 中提到的 CSS 样式。请建议怎么做?
猜你喜欢
  • 1970-01-01
  • 2019-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2017-12-25
  • 2018-06-05
相关资源
最近更新 更多