使用 iTextSharp 在 PDF 上添加图章/水印/内容

Com*_*ser 7 c# itext

我正在使用以下代码:

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();
Run Code Online (Sandbox Code Playgroud)

PDFStamper.Close();抛出错误。另外,我不确定是PDFReader.Close();在之前还是之后打电话PDFStamper.Close();

并且PDF文件中不添加水印。

mkl*_*mkl 3

您的调用顺序Close完全错误:

Stream.Close();
PDFReader.Close();
PDFStamper.Close();
Run Code Online (Sandbox Code Playgroud)

特别是PDFStamper要求PDFReaderStream关闭时仍保持打开状态。

此外,除非抛出异常,否则Stream会在 期间自动关闭PDFStamper.Close()

因此,使用

PDFStamper.Close();
PDFReader.Close();
Run Code Online (Sandbox Code Playgroud)

反而。

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

  • @ComputerUser *您还想检查 `pagesize.getRight()` 和 `pagesize.getTop()` 以查明您的水印是否超出可用空间。* - 还要检查 `pagesize.Left` 和 `pagesize.Bottom` :它们不需要是“0”(即使它们经常是)! (2认同)