使用 XMLWorker 将 HTML 解析为 PDF 时设置行间距 - ITextSharp C#

Jon*_*n Z 5 css c# pdf itextsharp xmlworker

我正在使用 XMLWorker 将 HTML 字符串解析为 PDF 文档,但找不到控制正在生成的 PDF 的行距的方法。

Document document = new Document(PageSize.LETTER, 72f, 72f, 108f, 90f);
MemoryStream stream1 = new MemoryStream();
PdfWriter pdfWriter = PdfWriter.GetInstance(document, stream1);

document.Open();

//parse HTML into document
XMLWorkerHelper.GetInstance().ParseXHtml(pdfWriter, document, new StringReader(summary.Content));
Run Code Online (Sandbox Code Playgroud)

“summary.Content”是来自数据库字段的 HTML 字符串。

现在,我最近将我们的 ITextSharp 库升级到 5.5.5.0,并升级到新的 XMLWorker 库。使用上面的代码,行距(PDF 中的“前导”)比之前生成的 PDF 小得多。我需要确保行距看起来和以前一样。

我读到我可以在我构建的段落上设置前导,但是当简单地调用 ParseXHtml() 时,这对我没有帮助。我读到 ITextSharp 默认的前导大小是字体大小的 1.5 倍。

我在这里阅读了itextsupport 文档,我可以使用这一行来使用 XML Worker 附带的 default.css。

CSSResolver cssResolver = XMLWorkerHelper.getInstance().getDefaultCssResolver(true);

我认为默认 CSS 可能会生成与我的旧 PDF 具有相同前导的 PDF,但以下代码生成的输出 PDF 与我仅使用 ParseXHtml() 时的输出 PDF 相同。

var sr = new StringReader(summary.Content);

HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);
IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, pdfWriter)));

XMLWorker worker = new XMLWorker(pipeline, true);
XMLParser xmlParse = new XMLParser(true, worker);

document.Open();

xmlParse.Parse(sr);
Run Code Online (Sandbox Code Playgroud)

我需要控制我生成的 PDF 文档中的行高(行距、行距)。任何人都可以帮助我指出正确的方向吗?我正在尝试解决一些选项。这两者都有意义吗?

  • 在定义不同 HTML 标签的行高的目录中创建一个 CSS 文件,使用流读取它,并将其传递给parseXHtml(PdfWriter writer, Document doc, InputStream in, InputStream inCssFile).
  • 为我的文档定义指定行高的字体?我看了,但没有找到办法做到这一点。

Bru*_*gie 1

如果您想为不同的段落设置不同的行高,则必须line-height在 CSS 中为该属性定义不同的值。我用一些非常简单的内联 CSS 做了一个非常简单的示例:

在此输入图像描述

正如您所看到的,以Non eram nescius开头的段落的行高是 16pt。因为我使用的默认字体是 12 pt Helvetica。这段看起来不错。

对于以Contra quos omnis开头的段落,我使用 25pt 的行高,您会看到行之间有很大的间隙。

对于以Sive enim ad开头的段落,我使用 13pt 的行高,仅比字体高度多 1pt。这一段的线条非常接近。

在哪里定义line-height. 您可以选择在标签、<head>HTML 部分或外部 CSS 文件中内嵌定义它,该文件可以从 HTML 标头引用,也可以单独加载到 XML Worker 中。无论你最喜欢什么都可以。