Invert PDF Document Colors
Product Version | Product | Author |
---|---|---|
2021.1.322 | RadPdfProcessing | Martin Velikov |
Description
This article describes how to invert the background and text colors within a PDF document by iterating its content.
Solution
The provided code snippets demonstrates how to import a PDF document and invert its background and text color by iterating its content.
Import PDF file and Invert its Background and Content Color
RadFixedDocument document;
PdfFormatProvider provider = new PdfFormatProvider();
using (Stream input = File.OpenRead(path))
{
document = provider.Import(input);
}
TextColor = RgbColors.White;
BackGroundColor = RgbColors.Black;
InvertBackgroundColor(document);
InvertContentColor(document);
string exportedDocument = "ExportedDocument6.pdf";
if (File.Exists(exportedDocument))
{
File.Delete(exportedDocument);
}
using (Stream output = File.OpenWrite(exportedDocument))
{
provider.Export(document, output);
}
Invert Document's Background Color
private static void InvertBackgroundColor(RadFixedDocument document)
{
foreach (RadFixedPage page in document.Pages)
{
Graphics.Path path = new Graphics.Path();
path.Fill = BackGroundColor;
Graphics.RectangleGeometry rectangle = new Graphics.RectangleGeometry(page.MediaBox);
path.Geometry = rectangle;
page.Content.Insert(0, path);
}
}
Invert Document Content`s Color
private static void InvertContentColor(RadFixedDocument document)
{
foreach (RadFixedPage page in document.Pages)
{
InvertCollectionColors(page.Content);
}
}
private static void InvertCollectionColors(ContentElementCollection contentElementCollection)
{
foreach (ContentElementBase contentElement in contentElementCollection)
{
if (contentElement is TextFragment textFragment)
{
textFragment.Fill = TextColor;
}
else if (contentElement is Graphics.Path path && path.Fill.Equals(TextColor))
{
path.Fill = BackGroundColor;
}
else if (contentElement is Form form)
{
InvertCollectionColors(form.FormSource.Content);
}
}
}