C# 使用iTextSharp在PDF上添加戳记/水印/内容
我正在使用以下代码:C# 使用iTextSharp在PDF上添加戳记/水印/内容,c#,itextsharp,C#,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 < PDFSt
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();
PdfReader PdfReader=newpdfreader(“C:\\file.pdf”);
FileStream Stream=新FileStream(“C:\\new.pdf”,FileMode.Create,FileAccess.Write);
PdfStamper PdfStamper=新的PdfStamper(PDFReader,流);
对于(int-iCount=0;iCount
但是PDFStamper.Close()代码>抛出错误。另外,我不确定是否调用PDFReader.Close()
在PDFStamper.Close()之前或之后代码>
PDF文件中未添加水印。您的关闭
调用顺序完全错误:
Stream.Close();
PDFReader.Close();
PDFStamper.Close();
尤其是PDFStamper
要求PDFReader
和流在关闭时仍处于打开状态
此外,除非抛出异常,流
将在PDFStamper.Close()期间自动关闭
因此,使用
PDFStamper.Close();
PDFReader.Close();
相反
如果要确保在出现异常时关闭流
,请使用using
语句。谢谢,它现在工作正常。但有一个问题,我想让我的文本出现在页面内部,它没有覆盖整个页面,有时比页面小,有时比页面大。你会出现这种行为,因为你使用的是硬编码坐标(x=300
和y=400
)。你应该计算偏移量。例如,在您的案例中,您还需要检查pagesize.getRight()
和pagesize.getTop()
,以确定水印是否超出了可用空间。另请参见以下Java示例。您必须进行最小的更改才能使其正常工作iTextSharp@BrunoLowagie你好,布鲁诺·洛瓦吉,谢谢你的回复。我很荣幸能和你讲话。我将尝试设置坐标。我试图把一个水印对角线的方式作为“样本文件”在PDF文件。我相信你一定在许多文件中看到过这样的情况。我想让它精确地从页面的左下角到右上角,而不考虑页面坐标等。所以,我将尝试使用一些数学来获得。并将调查您提供的链接。谢谢。@ComputerUser您还需要检查pagesize.getRight()
和pagesize.getTop()
以确定水印是否超出了可用空间。-同时检查pagesize.Left
和pagesize.Bottom
:它们不必是0
(即使它们经常是)!pagesize.getTop(0)与pagesize.Top相同吗?对于其他坐标,如pagesize.getLeft(0)和pagesize.Left?-对方法GetTop(float)
允许您自动将margin
值应用于边框,对于0
的边距,您将获得原始边框。