ITextSharp 编辑现有 pdf
本文关键字:pdf 编辑 ITextSharp | 更新日期: 2023-09-27 17:57:10
我想使用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();
}
您想使用iTextSharp将文本添加到现有的PDF文件中,发现了不同的方法,但在所有这些方法中,编写器和阅读器都是单独的pdf文件。
由于iText(Sharp)使用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 中创建,完成后,将内存流的内容写入源文件路径。