GroupDocs.Watermark for .NET 17.10.0 Release Notes
Major Features
There are the following features and enhancements in this release:
- Ability to work with attachments in a PDF document.
- Ability to work with attachments in an Excel document.
All Changes
Key | Summary | Category |
---|---|---|
WATERMARKNET-686 | Implement the ability to work with attachments in a PDF document | New Feature |
WATERMARKNET-687 | Implement the ability to work with attachments in an Excel document | New Feature |
Public API and Backward Incompatible Changes
Ability to work with attachments in a PDF document
Description
This feature allows user to add, remove and edit attachments in PDF documents.
Public API changes
Attachment class has been added to GroupDocs.Watermark namespace.
PdfAttachment class has been added to GroupDocs.Watermark.Pdf namespace.
PdfAttachmentCollection class has been added to GroupDocs.Watermark.Pdf namespace.
PdfAttachedImagePossibleWatermark class has been added to GroupDocs.Watermark.Pdf namespace.
AttachedImages item has been added to PdfSearchableObjects enum.
Attachments property has been added to PdfDocument class.
Usage
Extract all attachments from a PDF document.
C#
string targetFolder = @"D:\attachments";
using (PdfDocument doc = Document.Load<PdfDocument>(@"D:\test.pdf"))
{
foreach (PdfAttachment attachment in doc.Attachments)
{
Console.WriteLine("Name: {0}", attachment.Name);
Console.WriteLine("Description: {0}", attachment.Description);
Console.WriteLine("File format: {0}", attachment.DocumentInfo.FileFormat);
// Save the attached file on disk
File.WriteAllBytes(Path.Combine(targetFolder, attachment.Name), attachment.Content);
}
}
Console.ReadKey();
Remove particular attachments from a PDF document.
C#
using (PdfDocument doc = Document.Load<PdfDocument>(@"D:\test.pdf"))
{
for (int i = doc.Attachments.Count - 1; i >= 0; i--)
{
PdfAttachment attachment = doc.Attachments[i];
// Remove all attached pdf files with a particular name
if (attachment.Name.Contains("EULA") && attachment.DocumentInfo.FileFormat == FileFormat.Pdf)
{
doc.Attachments.RemoveAt(i);
}
}
// Save changes
doc.Save();
}
Add watermark to all attached files of supported types.
C#
TextWatermark watermark = new TextWatermark("Test watermark", new Font("Arial", 19));
using (PdfDocument doc = Document.Load<PdfDocument>(@"D:\test.pdf"))
{
foreach (PdfAttachment attachment in doc.Attachments)
{
// Check if the attached file is supported by GroupDocs.Watermark
if (attachment.DocumentInfo.FileFormat != FileFormat.Undefined && !attachment.DocumentInfo.IsEncrypted)
{
// Load the attached document
using (Document attachedDocument = attachment.LoadDocument())
{
// Add wateramrk
attachedDocument.AddWatermark(watermark);
// Save changes in the attached file
attachedDocument.Save();
}
}
}
// Save changes in the document
doc.Save();
}
Search for images in the attached files using FindImages or FindWatermarks method.
GroupDocs.Watermark provides the ability to search for images that are similar to a given sample image. This feature now works for the attached images in PDF documents.
C#
using (PdfDocument doc = Document.Load<PdfDocument>(@"D:\test.pdf"))
{
// Consider only the attached images
doc.SearchableObjects.PdfSearchableObjects = PdfSearchableObjects.AttachedImages;
// Specify sample image to compare document images with
ImageSearchCriteria criteria = new ImageDctHashSearchCriteria(@"D:\sample.png");
// Search for similar images
PossibleWatermarkCollection possibleWatermarks = doc.FindWatermarks(criteria);
// Remove or modify found image watermarks
}
Add an attachment to a PDF document.
C#
string attachmentPath = @"D:\EULA.doc";
using (PdfDocument doc = Document.Load<PdfDocument>(@"D:\test.pdf"))
{
// Add the attachment
doc.Attachments.Add(File.ReadAllBytes(attachmentPath), "License Agreement.doc", "end-user license agreement");
// Save changes
doc.Save();
}
Ability to work with attachments in an Excel document
Description
This feature allows user to add, remove and edit attachments (OLE objects) in Excel documents.
Public API changes
CellsAttachment class has been added to GroupDocs.Watermark.Office.Cells namespace.
CellsAttachmentCollection class has been added to GroupDocs.Watermark.Office.Cells namespace.
CellsAttachedImagePossibleWatermark class has been added to GroupDocs.Watermark.Office.Cells namespace.
AttachedImages item has been added to CellsSearchableObjects enum.
Attachments property has been added to CellsWorksheet class.
Usage
Extract information about all attachments in an Excel document.
C#
using (CellsDocument doc = Document.Load<CellsDocument>(@"D:\test.xlsx"))
{
foreach (CellsWorksheet worksheet in doc.Worksheets)
{
foreach (CellsAttachment attachment in worksheet.Attachments)
{
Console.WriteLine("Alternative text: {0}", attachment.AlternativeText);
Console.WriteLine("Attachment frame x-coordinate: {0}", attachment.X);
Console.WriteLine("Attachment frame y-coordinate: {0}", attachment.Y);
Console.WriteLine("Attachment frame width: {0}", attachment.Width);
Console.WriteLine("Attachment frame height: {0}", attachment.Height);
Console.WriteLine("Preview image size: {0}", attachment.PreviewImageContent != null ? attachment.PreviewImageContent.Length : 0);
if (attachment.IsLink)
{
// The document contains only a link to the attached file
Console.WriteLine("Full path to the attached file: {0}", attachment.SourceFullName);
}
else
{
// The attached file is stored in the document
Console.WriteLine("File format: {0}", attachment.DocumentInfo.FileFormat);
Console.WriteLine("Name of the source file: {0}", attachment.SourceFullName);
Console.WriteLine("File size: {0}", attachment.Content.Length);
}
}
}
}
Console.ReadKey();
Remove particular attachments from an Excel document.
C#
using (CellsDocument doc = Document.Load<CellsDocument>(@"D:\test.xlsx"))
{
foreach (CellsWorksheet worksheet in doc.Worksheets)
{
for (int i = worksheet.Attachments.Count - 1; i >= 0; i--)
{
CellsAttachment attachment = worksheet.Attachments[i];
if (attachment.IsLink && !File.Exists(attachment.SourceFullName) || // Linked file that is not available at this moment
attachment.DocumentInfo.IsEncrypted) // Attached file protected with a password
{
// Remove the file if it meets at least one of the conditions above
worksheet.Attachments.RemoveAt(i);
}
}
}
// Save changes
doc.Save();
}
Add watermark to all attached files of supported types.
C#
TextWatermark watermark = new TextWatermark("Test watermark", new Font("Arial", 19));
using (CellsDocument doc = Document.Load<CellsDocument>(@"D:\test.xlsx"))
{
foreach (CellsWorksheet worksheet in doc.Worksheets)
{
foreach (CellsAttachment attachment in worksheet.Attachments)
{
// Check if the attached file is supported by GroupDocs.Watermark
if (attachment.DocumentInfo.FileFormat != FileFormat.Undefined && !attachment.DocumentInfo.IsEncrypted)
{
// Load the attached document
using (Document attachedDocument = attachment.LoadDocument())
{
// Add wateramrk
attachedDocument.AddWatermark(watermark);
// Save changes in the attached file
attachedDocument.Save();
}
}
}
}
// Save changes in the document
doc.Save();
}
Search for images in the attached files using FindImages or FindWatermarks method.
GroupDocs.Watermark provides the ability to search for images that are similar to a given sample image. This feature now works for the attached images in Excel documents.
C#
using (CellsDocument doc = Document.Load<CellsDocument>(@"D:\test.xlsx"))
{
// Consider only the attached images
doc.SearchableObjects.CellsSearchableObjects = CellsSearchableObjects.AttachedImages;
// Specify sample image to compare document images with
ImageSearchCriteria criteria = new ImageDctHashSearchCriteria(@"D:\sample.png");
// Search for similar images
PossibleWatermarkCollection possibleWatermarks = doc.FindWatermarks(criteria);
// Remove or modify found image watermarks
}
Add an attachment to an Excel document.
C#
string attachmentPath = @"D:\EULA.doc";
string previewImagePath = @"D:\preview.png";
using (CellsDocument doc = Document.Load<CellsDocument>(@"D:\test.xlsx"))
{
CellsWorksheet worksheet = doc.Worksheets[0];
// Add the attachment
worksheet.Attachments.AddAttachment(
File.ReadAllBytes(attachmentPath), // File content
attachmentPath, // Source file full name (the extension is used to determine appropriate application to open the file)
File.ReadAllBytes(previewImagePath), // Preview image content
50, // X-coordinate of the attachment frame
100, // Y-coordinate of the attachment frame
200, // Attachment frame width
400); // Attachment frame height
// Save changes
doc.Save();
}
Add a linked file to an Excel document
C#
string attachmentPath = @"D:\EULA.doc";
string previewImagePath = @"D:\preview.png";
using (CellsDocument doc = Document.Load<CellsDocument>(@"D:\test.xlsx"))
{
CellsWorksheet worksheet = doc.Worksheets[0];
// Add the attachment
worksheet.Attachments.AddLink(
attachmentPath, // Source file path
File.ReadAllBytes(previewImagePath), // Preview image content
50, // X-coordinate of the attachment frame
100, // Y-coordinate of the attachment frame
200, // Attachment frame width
400); // Attachment frame height
// Save changes
doc.Save();
}