我想使用iTextSharp为现有PDF文件添加文本,我找到了不同的方法,但在所有这些方面,编写器和阅读器都是单独的pdf文件。 我想要一种方式,这样我就可以打开一个pdf,然后在不同的位置写出不同的东西。 现在我有这个代码,但它创建了一个新文件。
using (FileStream stream1 = File.Open(path, FileMode.OpenOrCreate))
{
BaseFont bf = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
PdfReader reader = new PdfReader("C:\\26178DATA\\pdf\\holding.pdf");
var pageSize = reader.GetPageSize(1);
PdfStamper stamper = new PdfStamper(reader, stream1);
iTextSharp.text.Font tmpFont = new iTextSharp.text.Font(bf, fontSize);
PdfContentByte canvas = stamper.GetOverContent(1);
Phrase ph = new Phrase(words[1], tmpFont);
ph.Font = tmpFont;
canvas.SetFontAndSize(bf, fontSize);
ColumnText.ShowTextAligned(canvas, Element.ALIGN_LEFT, ph, iTextSharp.text.Utilities.MillimetersToPoints(x * 10), pageSize.GetTop(iTextSharp.text.Utilities.MillimetersToPoints(y * 10)), 0);
stamper.Close();
}
答案 0 :(得分:4)
您想要使用iTextSharp向现有PDF文件添加文本,找到不同的方式,但在所有这些文件中,编写器和阅读器都是单独的pdf文件。
由于iText(夏普)使用PdfStamper操作PDF的正常方式,可能涉及对现有PDF元素进行重大重组,因此iText不会编辑文件。另一种方式,使用追加模式,可以进行编辑;但是没有实施这样的选择。就地编辑的一个重要缺点是,在某些程序失败的情况下,有问题的文件可能仍处于中间状态,不可用状态。
话虽这么说,您可以将新文件保存到原始文件的路径中,方法是首先将文件完全读入内存,然后开始使用相同的路径创建输出。如果您的示例代码至少意味着在创建输出流之前使用PdfReader构造函数:
PdfReader reader = new PdfReader(path);
using (FileStream stream1 = File.Open(path, FileMode.OpenOrCreate))
{
BaseFont bf = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
...
或者,您可以在内存中创建结果文件,即在MemoryStream中而不是FileStream中创建结果文件,完成后,将内存流的内容写入源文件路径。