我正在使用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文档中的行高(行间距,行距)。谁能帮助我指出正确的方向?我正在尝试通过一些选项。这些都有意义吗?
parseXHtml(PdfWriter writer, Document doc, InputStream in, InputStream inCssFile)
。答案 0 :(得分:1)
如果要为不同的段落设置不同的行高,则必须为CSS中的line-height
属性定义不同的值。我用一些非常简单的内联CSS做了一个非常简单的例子:
如您所见,以 Non eram nescius 开头的段落的行高为16pt。因为我使用12 pt Helvetica的默认字体。该段看起来很好。
对于以 Contra quos omnis 开头的段落,我使用25pt的行高,你会看到行之间有很大的间隙。
对于以 Sive enim ad 开头的段落,我使用的行高为13pt,仅比字体高度多1个点。这一段的线条非常接近。
定义line-height
的位置无关紧要。您可以选择在标记中,HTML的<head>
部分或外部CSS文件中内联定义,该文件可以从HTML标题中引用,也可以单独加载到XML Worker中。无论你最喜欢什么都可以。