Search code examples
c#itextwatermark

IDE error on the itextSharp code: "A field initializer cannot reference the non static field"


I am using the following code for watermarking my PDF

using System;
using System.Collections.Generic;
using System.Text;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

namespace WatermarkDemo
{
    public class Class1
    {
       string watermarkedFile = "Watermarked.pdf";
       // Creating watermark on a separate layer
       // Creating iTextSharp.text.pdf.PdfReader object to read the Existing PDF Document
       PdfReader reader1 = new PdfReader(originalFile);
       using (FileStream fs = new FileStream(watermarkedFile, FileMode.Create, FileAccess.Write, FileShare.None))
       // Creating iTextSharp.text.pdf.PdfStamper object to write Data from iTextSharp.text.pdf.PdfReader object to FileStream object

       using (PdfStamper stamper = new PdfStamper(reader1, fs))
       {
            // Getting total number of pages of the Existing Document
            int pageCount = reader1.NumberOfPages;

            // Create New Layer for Watermark
            PdfLayer layer = new PdfLayer("WatermarkLayer", stamper.Writer);
            // Loop through each Page
            for (int i = 1; i <= pageCount; i++)
            {
                // Getting the Page Size
                Rectangle rect = reader1.GetPageSize(i);

                // Get the ContentByte object
                PdfContentByte cb = stamper.GetUnderContent(i);

                // Tell the cb that the next commands should be "bound" to this new layer
                cb.BeginLayer(layer);
                cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 50);

                PdfGState gState = new PdfGState();
                gState.FillOpacity = 0.25f;
                cb.SetGState(gState);

                cb.SetColorFill(BaseColor.BLACK);
                cb.BeginText();
                cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, watermarkText, rect.Width / 2, rect.Height / 2, 45f);
                cb.EndText();

                // Close the layer
                cb.EndLayer();
            }
        }
    }
}

I don't know why I am getting red squiggly line under most of my variables. Most of them say:

A field initializer cannot reference the non static field.

What can I do to fix this?


Solution

  • You have put your code immediately into the class body:

    namespace WatermarkDemo
    {
        public class Class1
        {
           string watermarkedFile = "Watermarked.pdf";
           // Creating watermark on a separate layer
           // Creating iTextSharp.text.pdf.PdfReader object to read the Existing PDF Document
           PdfReader reader1 = new PdfReader(originalFile);
           using (FileStream fs = new FileStream(watermarkedFile, FileMode.Create, FileAccess.Write, FileShare.None))
        ...
    

    You should put it into a method

    namespace WatermarkDemo
    {
        public class Class1
        {
           void myMethod()
           {
               string watermarkedFile = "Watermarked.pdf";
               // Creating watermark on a separate layer
               // Creating iTextSharp.text.pdf.PdfReader object to read the Existing PDF Document
               PdfReader reader1 = new PdfReader(originalFile);
               using (FileStream fs = new FileStream(watermarkedFile, FileMode.Create, FileAccess.Write, FileShare.None))
    
        ...