【问题标题】:Line spacing (leading) changes after page break iTextSharp分页符 iTextSharp 后行间距(前导)更改
【发布时间】:2017-11-28 02:41:41
【问题描述】:

我正在使用 iTextSharp c# 创建一个 pdf,当一段文本运行到新页面时遇到问题。 以下工作正常,直到例如第 2 节运行到下一页。

private Font _smallFont = new Font(iTextSharp.text.Font.FontFamily.HELVETICA, 10, iTextSharp.text.Font.NORMAL, BaseColor.BLACK);
private Font _smallBoldFont = new Font(iTextSharp.text.Font.FontFamily.HELVETICA, 10, iTextSharp.text.Font.BOLD, BaseColor.BLACK);

AddParagraph(doc, Element.ALIGN_LEFT, _smallBoldFont, new Paragraph("\nSection 1\n"));
AddParagraph(doc, Element.ALIGN_LEFT, _smallFont, new Paragraph(textBox2.Text));
AddParagraph(doc, Element.ALIGN_LEFT, _smallBoldFont, new Paragraph("\nSection 2\n"));
AddParagraph(doc, Element.ALIGN_LEFT, _smallFont, new Paragraph(textBox3.Text));

在覆盖的 base.OnStartPage 中,我添加了一个徽标和标题文本。

Image logoImage = Image.GetInstance(appPath + "\\logo.jpg");
logoImage.ScaleAbsolute(newWidth: 141f, newHeight: 65f);
logoImage.Alignment = Element.ALIGN_CENTER;
document.Add(logoImage);

var headerText = "\nReport Header  " + "\n";
Paragraph subText = new Paragraph(headerText, new Font(iTextSharp.text.Font.FontFamily.HELVETICA, 12, iTextSharp.text.Font.BOLD, BaseColor.BLACK));
document.Add(subText);

cb.AddTemplate(templateH, pageSize.GetLeft(document.LeftMargin), pageSize.GetTop(document.TopMargin - 5));

除了行距增加到大约 1.5(默认?)直到新的 AddParagraph 之外,这有效。即使标题文本的字体和大小相同,也会发生这种情况。我有一个非常肮脏的解决方法,我在标题中添加了第二行,字体大小为 Helvetica 8。这确保了与上一页相同的行距。为什么 8 我不知道这些部分是 Helvetica 10。我尝试在 AddParagraph 中设置前导,但这没有帮助。 我做错了什么?

【问题讨论】:

  • 您是否尝试过使用不同的字体,列宽可能需要随着调整为较小的字体大小而减小。我过去也遇到过类似的问题
  • 是的,尝试了不同的字体:-(我没有使用表格,只是输出段落。

标签: c# itext


【解决方案1】:

据记载在不同的地方,禁止OnStartPage方法中添加内容。您应该在 OnEndPage() 方法中添加徽标和标题文本。例如见How to add multiple headers and footers in pdf using itext

另请注意,您在document.Add(subText); 中使用的Document 对象与您在其余代码中使用的Document 对象不是同一个对象禁止在页面事件中使用Add() 方法。文档中也对此进行了说明。另见"'System.StackOverflowException" in "OnEndPage" event handler

【讨论】:

  • 好的,我才刚刚开始使用 iTextSharp,但这似乎不合逻辑 - 在 OnEndPage 事件中添加标题。我肯定会根据指南修改我的代码,但目前我通过强制标题文本中的前导 (12) 使其工作。段落 subText = new Paragraph(12, headerText, new Font(iTextSharp.text.Font.FontFamily.HELVETICA, 12, iTextSharp.text.Font.BOLD, BaseColor.BLACK));谢谢。
  • 如果您刚开始使用 iTextSharp,那么为什么要使用过时的版本?请参阅我对this question 的回答:我知道这很奇怪,但话又说回来,您使用的是旧的 iText 版本。如果您想要更一致的 API,请使用 iText 7。该升级非常重要。我们在改进 iText 上花费了大量的时间和金钱,所以看到新的 iText 开发人员选择使用 iText 5 而不是 iText 7,这有点令人沮丧。
  • 阅读iText 7 Jump-Start tutorial 了解如何在 iText 7 中添加页眉和页脚。您还必须考虑必须维护您的代码的人员。他们真的会讨厌你当前的“修复”。
  • 非常感谢。我不知道 iText 7。我一定会检查一下。顺便说一句,因为这是出于爱好(我是一名退休人员,并且正在编程以保持小灰色细胞正常工作)没有其他人会维护它:-)
  • 如果您想通过自己的爱好赚钱:我们正在寻找有好主意的人,他们将自己的想法变成附加组件。如果插件有市场,我们会在 iText 7 平台上发布它,我们负责全球销售和营销。使用插件获得的收入将与原始开发者分享。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多