iTextSharp短语字符串在pdf输出上加倍

时间:2013-04-11 14:52:34

标签: c# winforms itextsharp

我很擅长使用iTextSharp生成pdf。我有以下代码将文本从我的表单放到pdf输出。我正在使用一个短语& ColumnText将文本从特定文本框定位到我的pdf输出。我将变量以及文本框的text属性绑定为Phrase字符串,但它将两组相同的文本放在一起(屏幕截图)。 enter image description here

string oldFile = Path.GetTempPath() + "invoice.pdf";
string newFile = Path.GetTempPath() + "NewInvoice.pdf";
PdfReader reader = new PdfReader(oldFile);
iTextSharp.text.Rectangle size = reader.GetPageSize(1);
Document doc = new Document(size);
FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
PdfContentByte cb = writer.DirectContent;
BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, true);
cb.SetColorFill(BaseColor.BLACK);
cb.SetFontAndSize(bf, 12);
cb.BeginText();
cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, invoiceDate, 480, 603, 0);
cb.EndText();
PdfImportedPage page = writer.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);

ColumnText ct = new ColumnText(cb);
Phrase phrase = new Phrase(textBox1.Text);
ct.SetSimpleColumn(phrase, 65, 375, 540, 300, 16, Element.ALIGN_LEFT);
ct.Go();
doc.Close();
fs.Close();
writer.Close();
reader.Close();
Process.Start(newFile);

如果我分配一个字符串(string whatever =“some text here ...”;)并将其放在Phrase字符串中(..新短语(无论如何);它工作正常。

1 个答案:

答案 0 :(得分:0)

首先让我说我是iText的原始开发者。

我希望当我说你应该使用PdfReader / PdfStamper组合代替Document / PdfWriter组合时,我会相信我。这在我的书的chapter 6中有记载。你可能没有看到外面的任何差异,但PDF在内部感觉好多了。

你在绝对位置添加文字有点奇怪。使用在需要文本的位置上具有一些AcroForm字段的模板不是更好吗?您的代码将更容易维护。

我还看到你使用HELVETICA作为嵌入参数的字体等于true。当然,您知道embedded参数将被忽略为HELVETICA,这是标准类型1字体之一。

最后针对您的问题:我不认为您的代码是两次添加短语。我认为你一直在试验,并且你在原始文件“invoice.pdf”中已经存在的短语上添加了一个新短语。如果你是100%,那不是这种情况,那么你应该分享你的PDF,以便我(或iText的其他人)可以检查它。