using ComPDFKit.PDFDocument;
using ComPDFKit.PDFWatermark;
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Runtime.InteropServices;
namespace WatermarkTest
{
internal class WatermarkTest
{
static private string outputPath = Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()))) + "\\Output\\Watermark";
static void Main(string[] args)
{
#region Perparation work
Console.WriteLine("Running Watermark test sample…\r\n");
SDKLicenseHelper.LicenseVerify();
CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (!Directory.Exists(outputPath))
{
Directory.CreateDirectory(outputPath);
}
#endregion
#region Sample 1: Add text watermark.
if (AddTextWatermark(document))
{
Console.WriteLine("Add text watermark done.");
}
else
{
Console.WriteLine("Add text watermark failed.");
}
document.Release();
Console.WriteLine("--------------------");
#endregion
#region Sample 2: Add image watermark
document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (AddImageWatermark(document))
{
Console.WriteLine("Add image watermark done.");
}
else
{
Console.WriteLine("Add image watermark failed.");
}
document.Release();
Console.WriteLine("--------------------");
#endregion
#region Sample 3: Delete watermark
CPDFDocument textWatermarkDocument = CPDFDocument.InitWithFilePath("Watermark.pdf");
if (DeleteWatermark(textWatermarkDocument))
{
Console.WriteLine("Delete watermark done.");
}
else
{
Console.WriteLine("Delete watermark failed.");
}
textWatermarkDocument.Release();
Console.WriteLine("--------------------");
#endregion
Console.WriteLine("Done!");
Console.WriteLine("--------------------");
Console.ReadLine();
}
///
/// Add text watermark
///
/// Regular document without watermark.
static private bool AddTextWatermark(CPDFDocument document)
{
CPDFWatermark watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_TEXT);
watermark.SetText("test");
watermark.SetFontName("Helvetica");
watermark.SetPages("0-3");
byte[] color = { 255, 0, 0 };
watermark.SetTextRGBColor(color);
watermark.SetScale(2);
watermark.SetRotation(0);
watermark.SetOpacity(120);
watermark.SetVertalign(C_Watermark_Vertalign.WATERMARK_VERTALIGN_CENTER);
watermark.SetHorizalign(C_Watermark_Horizalign.WATERMARK_HORIZALIGN_CENTER);
watermark.SetVertOffset(0);
watermark.SetHorizOffset(0);
watermark.SetFront(true);
watermark.SetFullScreen(true);
watermark.SetVerticalSpacing(10);
watermark.SetHorizontalSpacing(10);
watermark.CreateWatermark();
string path = outputPath + "\\AddTextWatermarkTest.pdf";
if (!document.WriteToFilePath(path))
{
return false;
}
Console.WriteLine("Browse the changed file in " + path);
return true;
}
///
/// Convert the bitmap to an array that can be set as an image watermark
///
/// Image source to be used as a image watermark.
/// An array for setting image
public static byte[] BitmapToByteArray(Bitmap bitmap)
{
BitmapData bmpdata = null;
try
{
bmpdata = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat);
int numbytes = bmpdata.Stride * bitmap.Height;
byte[] bytedata = new byte[numbytes];
IntPtr ptr = bmpdata.Scan0;
Marshal.Copy(ptr, bytedata, 0, numbytes);
return bytedata;
}
finally
{
if (bmpdata != null)
bitmap.UnlockBits(bmpdata);
}
}
///
/// Add image watermark
///
/// Image source to be used as a image watermark.
static private bool AddImageWatermark(CPDFDocument document)
{
CPDFWatermark watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_IMG);
Bitmap bitmap = new Bitmap("logo.png");
watermark.SetImage(BitmapToByteArray(bitmap), bitmap.Width, bitmap.Height);
watermark.SetPages("0-3");
watermark.SetScale(2);
watermark.SetRotation(1);
watermark.SetOpacity(128);
watermark.SetVertalign(C_Watermark_Vertalign.WATERMARK_VERTALIGN_CENTER);
watermark.SetHorizalign(C_Watermark_Horizalign.WATERMARK_HORIZALIGN_CENTER);
watermark.SetVertOffset(0);
watermark.SetHorizOffset(0);
watermark.SetFront(false);
watermark.SetFullScreen(true);
watermark.SetVerticalSpacing(10);
watermark.SetHorizontalSpacing(10);
watermark.CreateWatermark();
watermark.UpdateWatermark();
string path = outputPath + "\\AddImageWatermarkTest.pdf";
if (!document.WriteToFilePath(path))
{
return false;
}
Console.WriteLine("Browse the changed file in " + path);
return true;
}
///
/// Delete watermark
///
/// Documents with text watermarks
static private bool DeleteWatermark(CPDFDocument watermarkDocument)
{
watermarkDocument.DeleteWatermarks();
string path = outputPath + "\\DeleteWatermarkTest.pdf";
if (!watermarkDocument.WriteToFilePath(path))
{
return false;
}
Console.WriteLine("Browse the changed file in " + path);
return true;
}
}
}