【问题标题】:ColumnText and truncate issueColumnText 和截断问题
【发布时间】:2013-12-13 23:48:30
【问题描述】:

我目前正在使用 ITextSharp,并使用 IText in Action Second edition,特别是第 74 页使用 ColumnText 对象。

我正在使用 PDFReader 和 PDFStamper 类加载 PDF 文件,并尝试在 PDF 文档中添加多个元素。

 PdfStamper pdfStamper = new PdfStamper(pdfReader, fileStream);
 PdfContentByte canvas = pdfStamper.GetOverContent(1);
 Rectangle size = pdfReader.GetPageSizeWithRotation(1);


 ColumnText ct = new ColumnText(canvas);
 //I have multiple calls  like below, with different x,y coords
 ct.SetSimpleColumn(10, 634, 100, 642);
 ct.AddText(new Chunk("1234567890 999 9 9 999000 0 877"));
 ct.Go();

我注意到的是文本将停止然后开始自行覆盖(同一列?)。我基本上需要它在到达边界尽头时停止。我不需要额外的文本显示在另一列中。

我已阅读有关 ColumnText.HasMoreText 检查以及 Go() 返回的内容。在这种情况下,它将返回我认为是 2 的 NO_MORE_COLUMNS。

我不明白如何在没有文字写在自身之上的情况下使截断正常工作。

文本显示为“019 298397 4795 69 7989990000”,您可以看到它开始自行覆盖。

如果有人可以帮助我解决这个问题,我将不胜感激。如果我需要澄清,也请告诉我。

【问题讨论】:

  • 我已尝试使用最新版本的 iText 重现该问题,但无法重现该问题。也许您使用的是旧版本并且遇到了已修复的错误。
  • 好的,我将 ITextSharp 更新到 5.4.4,但我仍然得到重叠。你能不能给我看看你的测试代码,让我看看它是否适合我?
  • 我在一些示例代码中添加了Gist,这些示例代码正在执行我所说的操作。如果您运行该代码并查看 Test2.pdf,您将看到文本重叠。同样,如果我遗漏了什么,请告诉我。

标签: itextsharp


【解决方案1】:

好的,我终于有时间看看你的例子了。

首先这个:你定义了一个Font,但你没有在任何地方使用它。 Phrase 使用默认字体(Helvetica 12pt,前导为 18pt)。

18pt 的前导,意味着您将永远无法在y = 634y = 642 之间放置文本。让我们制作这个y = 634y = 652

最后,您使用的是文本模式。大多数时候最好使用复合模式。当您像这样更改代码时,它将起作用:

PdfReader reader = new PdfReader("resources/hello.pdf");
using (FileStream fileStream = new FileStream("PDF/Test2.pdf", FileMode.Create, FileAccess.Write)) {
    PdfStamper stamper = new PdfStamper(pdfReader, fileStream);
    ColumnText ct = new ColumnText(stamper.GetOverContent(1));
    ct.SetSimpleColumn(10, 634, 100, 652, 0, Element.ALIGN_LEFT);
    ct.AddElement(new Phrase("1234567890 999 9 9 999000 0 877"));
    ct.Go();
    stamper.Close();
}
reader.Close();

【讨论】:

  • 感谢您的帮助。在你的帮助下,我得到了这个工作。不过,我确实有一个愚蠢的问题。您如何确定文本是否适合 Y 之间?我必须寻找的只是领先吗?解决这个问题的“公式”是什么?字体大小也起作用吗?
  • 高度由不同的因素决定:字体大小是字形的平均高度。 Leading 是基线之间的距离。默认情况下,iText 使用 1.5 倍的字体大小。因此,对于 12 的字体大小,iText 默认采用 18 的前导(当然,您可以更改此值)。如果要准确高度,请看itextpdf.com/examples/iia.php?id=61getAscentPoint()getDescentPoint()的返回值之差就是实际高度。
猜你喜欢
  • 2010-09-14
  • 1970-01-01
  • 2020-08-03
  • 2010-09-12
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2019-11-14
相关资源
最近更新 更多