using ComPDFKit.PDFDocument;
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Runtime.InteropServices;
namespace BackgroundTest
{
internal class BackgroundTest
{
static private string parentPath = Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())));
static private string outputPath = Path.Combine(parentPath, "Output", "CS");
static void Main(string[] args)
{
Console.WriteLine("Running Watermark test sample…" + Environment.NewLine);
SDKLicenseHelper.LicenseVerify();
CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (!Directory.Exists(outputPath))
{
Directory.CreateDirectory(outputPath);
}
#region Sample 1: Add color background
if (AddColorBackground(document))
{
Console.WriteLine("Add color background done.");
}
document.Release();
Console.WriteLine("--------------------");
#endregion
#region Sample 2: Add image background
document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (AddImageBackground(document))
{
Console.WriteLine("Add image background done.");
}
document.Release();
Console.WriteLine("--------------------");
#endregion
#region Sample 3: Remove background
CPDFDocument colorBgDocument = CPDFDocument.InitWithFilePath("ColorBackground.pdf");
CPDFDocument imageBgDocument = CPDFDocument.InitWithFilePath("ImageBackground.pdf");
if (RemoveBackground(colorBgDocument, imageBgDocument))
{
Console.WriteLine("Remove background done.");
}
colorBgDocument.Release();
imageBgDocument.Release();
Console.WriteLine("--------------------");
#endregion
Console.WriteLine("Done!");
Console.WriteLine("--------------------");
Console.ReadLine();
}
///
/// Add color background
///
/// Regular document
static private bool AddColorBackground(CPDFDocument document)
{
CPDFBackground background = document.GetBackground();
background.SetBackgroundType(C_Background_Type.BG_TYPE_COLOR);
background.SetColor(new byte[] { 255, 0, 0 });
background.SetOpacity(255);//0-255
background.SetScale(1);//1 == 100%
background.SetRotation(0);//Use radians
background.SetHorizalign(C_Background_Horizalign.BG_HORIZALIGN_CENTER);
background.SetVertalign(C_Background_Vertalign.BG_VERTALIGN_CENTER);
background.SetXOffset(0);
background.SetYOffset(0);
background.SetPages("0-2");//Page numbering from 0
background.Update();//Note: update after setup is complete
string path = Path.Combine(outputPath, "AddColorBackgroundTest.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 background.
///
/// Regular document
static private bool AddImageBackground(CPDFDocument document)
{
CPDFBackground background = document.GetBackground();
background.SetBackgroundType(C_Background_Type.BG_TYPE_IMAGE);
Bitmap bitmap = new Bitmap("logo.png");
background.SetImage(BitmapToByteArray(bitmap), bitmap.Width, bitmap.Height, ComPDFKit.Import.C_Scale_Type.fitCenter);
background.SetOpacity(128);//0-255
background.SetScale(1);//1 == 100%
background.SetRotation(1f);//Use radians
background.SetHorizalign(C_Background_Horizalign.BG_HORIZALIGN_CENTER);
background.SetVertalign(C_Background_Vertalign.BG_VERTALIGN_CENTER);
background.SetXOffset(0);
background.SetYOffset(0);
background.SetPages("0-2");//Page numbering from 0
background.Update();//Note: update after setup is complete
string path = Path.Combine(outputPath, "AddImageBackgroundTest.pdf");
if (!document.WriteToFilePath(path))
{
return false;
}
Console.WriteLine("Browse the changed file in " + path);
return true;
}
///
/// Check background type, and remove background.
///
/// Document with clolor background.
/// Document with image background.
///
static private bool RemoveBackground(CPDFDocument colorBgDocument, CPDFDocument imageBgDocument)
{
CPDFBackground colorBackground = colorBgDocument.GetBackground();
if(colorBackground.GetBackgroundType() != C_Background_Type.BG_TYPE_COLOR)
{
return false;
}
colorBackground.Clear();
string path1 = Path.Combine(outputPath, "ClearColorBgTest.pdf");
if (!colorBgDocument.WriteToFilePath(path1))
{
return false;
}
Console.WriteLine("Browse the changed file in " + path1);
CPDFBackground imageBackground = imageBgDocument.GetBackground();
imageBackground.Clear();
string path2 = Path.Combine(outputPath, "ClearImageBgTest.pdf");
if (!imageBgDocument.WriteToFilePath(path2))
{
return false;
}
Console.WriteLine("Browse the changed file in " + path2);
return true;
}
}
}