使用 iTextSharp 在 PDF 上添加 Stamp/Watermark/Content

Adding Stamp/Watermark/Content over PDF using iTextSharp

我正在使用以下代码:

PdfReader PDFReader = new PdfReader("C:\file.pdf");

FileStream Stream = new FileStream("C:\new.pdf", FileMode.Create, FileAccess.Write);

PdfStamper PDFStamper = new PdfStamper(PDFReader, Stream);

for (int iCount = 0; iCount < PDFStamper.Reader.NumberOfPages; iCount++)
{
    PdfContentByte PDFData = PDFStamper.GetOverContent(iCount + 1);
    BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
    PDFData.BeginText();
    PDFData.SetColorFill(CMYKColor.LIGHT_GRAY);
    PDFData.SetFontAndSize(baseFont, 80);
    PDFData.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "SAMPLE DOCUMENT", 300, 400, 45);
    PDFData.EndText();
}

Stream.Close();
PDFReader.Close();
PDFStamper.Close();

但是 PDFStamper.Close(); 抛出错误。另外,我不确定是在 PDFStamper.Close();

之前还是之后调用 PDFReader.Close();

并且PDF文件中没有添加水印。

你的 Close 调用顺序全错了:

Stream.Close();
PDFReader.Close();
PDFStamper.Close();

特别是 PDFStamper 要求 PDFReaderStream 在关闭时仍然打开。

此外,除非抛出异常,否则 StreamPDFStamper.Close() 期间自动关闭。

因此,使用

PDFStamper.Close();
PDFReader.Close();

相反。

如果要确保 Stream 在发生异常时关闭,请使用 using 语句。