使用 XMLWorker 将 HTML 解析为 PDF 时设置行距 - ITextSharp C#
Set line spacing when using XMLWorker to parse HTML to 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 中的 "leading")比之前生成的 PDF 小得多。我需要确保行间距看起来和以前一样。
我读到我可以在我构建的段落上设置前导,但是当简单地调用 ParseXHtml() 时这对我没有帮助。我读到 ITextSharp 默认的行距大小是字体大小的 1.5 倍。
我在这里 itextsupport documentation 读到我可以使用此行来使用 XML Worker 附带的 default.css。
CSSResolver cssResolver = XMLWorkerHelper.getInstance().getDefaultCssResolver(true);
我认为默认 CSS 可能会生成与我的旧 PDF 具有相同前导的 PDF,但以下代码产生的输出 PDF 与我仅使用 ParseXHtml() 时相同。
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 文档中控制行高(行距、行距)。谁能帮我指出正确的方向?我正在尝试通过一些选项。这些都有意义吗?
- 在为不同的 HTML 标签定义行高的目录中创建一个 CSS 文件,用流读取它,并将其传递给
parseXHtml(PdfWriter writer, Document doc, InputStream in, InputStream inCssFile)
.
- 为我的文档定义一种指定行高的字体?我看了但没有找到方法。
如果您想为不同的段落设置不同的 line-height,则必须在 CSS 中为 line-height
属性定义不同的值。我用一些非常简单的内联 CSS:
做了一个非常简单的例子
如您所见,以Non eram nescius开头的段落的line-height是16pt。因为我使用默认字体 12 pt Helvetica。段落看起来不错。
对于以 Contra quos omnis 开头的段落,我使用了 25pt 的 line-height,您会看到线条之间有很大的差距。
对于以Sive enim ad开头的段落,我使用了13pt的line-height,仅比字体高度高1pt。这一段的线条非常靠近。
在何处定义 line-height
并不重要。您的选择是在标记中内联定义它,在您的 HTML 的 <head>
部分或从您的 header 引用的外部 CSS 文件中=39=] 或分别加载到 XML Worker 中。自己喜欢就好。
我正在使用 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 中的 "leading")比之前生成的 PDF 小得多。我需要确保行间距看起来和以前一样。
我读到我可以在我构建的段落上设置前导,但是当简单地调用 ParseXHtml() 时这对我没有帮助。我读到 ITextSharp 默认的行距大小是字体大小的 1.5 倍。
我在这里 itextsupport documentation 读到我可以使用此行来使用 XML Worker 附带的 default.css。
CSSResolver cssResolver = XMLWorkerHelper.getInstance().getDefaultCssResolver(true);
我认为默认 CSS 可能会生成与我的旧 PDF 具有相同前导的 PDF,但以下代码产生的输出 PDF 与我仅使用 ParseXHtml() 时相同。
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 文档中控制行高(行距、行距)。谁能帮我指出正确的方向?我正在尝试通过一些选项。这些都有意义吗?
- 在为不同的 HTML 标签定义行高的目录中创建一个 CSS 文件,用流读取它,并将其传递给
parseXHtml(PdfWriter writer, Document doc, InputStream in, InputStream inCssFile)
. - 为我的文档定义一种指定行高的字体?我看了但没有找到方法。
如果您想为不同的段落设置不同的 line-height,则必须在 CSS 中为 line-height
属性定义不同的值。我用一些非常简单的内联 CSS:
如您所见,以Non eram nescius开头的段落的line-height是16pt。因为我使用默认字体 12 pt Helvetica。段落看起来不错。
对于以 Contra quos omnis 开头的段落,我使用了 25pt 的 line-height,您会看到线条之间有很大的差距。
对于以Sive enim ad开头的段落,我使用了13pt的line-height,仅比字体高度高1pt。这一段的线条非常靠近。
在何处定义 line-height
并不重要。您的选择是在标记中内联定义它,在您的 HTML 的 <head>
部分或从您的 header 引用的外部 CSS 文件中=39=] 或分别加载到 XML Worker 中。自己喜欢就好。