ColumnText和truncate问题

时间:2013-11-28 04:24:06

标签: itextsharp

我目前正在使用ITextSharp,并在Action Second Edition中使用IText,特别是第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()返回的内容。在这种情况下,它将返回NO_MORE_COLUMNS,我认为是2。

我不理解如何在没有文本写作的情况下使截断正常工作。

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

如果有人可以帮助我,我会很感激。如果我需要澄清,也请告诉我。

1 个答案:

答案 0 :(得分:4)

好的,我终于找到了一些时间来看你的例子。

首先:你定义一个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();