Добавление водяного знака изображения в PDF при создании его с помощью iTextSharp - PullRequest
6 голосов
/ 18 мая 2011

Интересно, если это возможно. Видел много постов о добавлении водяного знака после того, как PDF создан и сохранен на диске. Но при создании документа, как мне добавить изображение водяного знака. Я знаю, как добавить изображение в документ. Но как мне расположить его так, чтобы оно было в конце страницы?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

Для C # используйте этот код ...

//new Document

Document DOC = new Document();


// open Document

DOC.Open();


//create New FileStream with image "WM.JPG"

FileStream fs1 = new FileStream("WM.JPG", FileMode.Open);


iTextSharp.text.Image JPG = iTextSharp.text.Image.GetInstance(System.Drawing.Image.FromStream(fs1), ImageFormat.Jpeg);


//Scale image

JPG.ScalePercent(35f);


//Set position

JPG.SetAbsolutePosition(130f,240f);

//Close Stream

fs1.Close();


DOC.Add(JPG);
4 голосов
/ 18 мая 2011

Это практически идентично добавлению верхнего или нижнего колонтитула.

Вам необходимо создать класс, который реализует PdfPageEvent, а в OnPageEnd захватить PdfContentByte страницы и нарисовать там свое изображение. Используйте абсолютную позицию.

Примечание: вы, вероятно, хотите наследовать от PdfPageEventHelper, у него есть пустые реализации всех событий страницы, поэтому вам просто нужно написать метод, который вам действительно нужен.

Примечание. Если ваше изображение не является в основном прозрачным, его нанесение поверх вашей страницы покроет многие вещи. IIRC («Если я правильно помню»), файлы PNG и GIF, добавленные iText, будут автоматически маскироваться, позволяя вещам, находящимся под ними, просвечивать.

Если вы хотите добавить непрозрачное изображение под всем, вы должны вместо OnStartPage() переопределить.

Это Java, но его преобразование в основном заключается в использовании заглавных букв имен методов и обмене вызовами get / set для доступа к свойству.

Image watermarkImage = new Image(imgPath);
watermarkImage.setAbsolutePosition(x, y);

writer.setPageEvent( new MyPageEvent(watermarkImage) );


public MyPageEvent extends PdfPageEventHelper {
  private Image waterMark;
  public MyPageEvent(Image img) {
    waterMark = img;
  }
  public void OnEndPage/*OnStartPage*/(PdfWriter writer, Document doc) {
    PdfContentByte content = writer.getContent();
    content.addImage( waterMark );
  }
}
...