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

我正在使用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));

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

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

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

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

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

我认为默认的CSS可能会生成与我的旧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);

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

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

解决方法:

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

如您所见,以非Eram nescius开头的段落的行高为16pt.因为我使用12 pt Helvetica的默认字体.该段看起来很好.

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

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

在哪里定义行高并不重要.您可以选择在标签中内联,在< head>中定义它. HTML的一部分或外部CSS文件,它可以从HTML的标题中引用,也可以单独加载到XML Worker中.无论你最喜欢什么都可以.

上一篇:c# – iTextSharp将预先存在的PDF作为图层添加到另一个PDF


下一篇:c# – 使用iTextSharp和PDFStamper在PDF中使用不同的字体