我目前正在使用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”,您可以看到它开始覆盖自身。
如果有人可以帮助我,我会很感激。如果我需要澄清,也请告诉我。
答案 0 :(得分:4)
好的,我终于找到了一些时间来看你的例子。
首先:你定义一个Font
,但不要在任何地方使用它。默认字体用于Phrase
(Helvetica 12pt,领先18pt)。
领先18pt,意味着您永远无法在y = 634
和y = 642
之间插入文字。我们来做y = 634
和y = 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();