关于CSS:使用XMLWorker将HTML解析为PDF时设置行距-ITextSharp C#

Set line spacing when using XMLWorker to parse HTML to PDF - ITextSharp C#

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

1
2
3
4
5
6
7
8
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));

" 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()时相同。

1
2
3
4
5
6
7
8
9
10
11
12
13
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);

我需要控制生成的PDF文档中的行高(行距,行距)。谁能帮助我指出正确的方向?我正在尝试一些选择。这些都有意义吗?

  • 在一个目录中创建一个CSS文件,该目录为不同的HTML标签定义行高,并通过流将其读取,然后将其传递给parseXHtml(PdfWriter writer, Document doc, InputStream in, InputStream inCssFile)
  • 为我的文档定义一种指定行高的字体吗?我看了一下,但没有找到办法。

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

enter image description here

如您所见,该段落的行高以Non eram nescius开头为16pt。由于我使用的默认字体是12磅Helvetica。该段看起来不错。

对于以omtra quos omnis开头的段落,我使用25pt的行高,您会发现各行之间存在很大的差距。

对于以Sive enim广告开头的段落,我使用的行高为13pt,仅比字体高度高1pt。在本段中,各行非常接近。

定义line-height的位置无关紧要。您可以选择在标记中,HTML的部分或从CSS的标题引用的外部CSS文件(或分别加载到XML Worker)中内联定义它。您最喜欢的东西都可以。