From 0870f3d61c985104510355a2b39ea353c31020d6 Mon Sep 17 00:00:00 2001 From: KB Bot Date: Wed, 15 Jan 2025 13:38:49 +0000 Subject: [PATCH 1/4] Added new kb article convert-color-pdf-to-black-and-white-telerik-document-processing --- ...k-and-white-telerik-document-processing.md | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md diff --git a/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md b/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md new file mode 100644 index 00000000..00eee096 --- /dev/null +++ b/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md @@ -0,0 +1,97 @@ +--- +title: Converting Colored PDF Documents to GrayScale with Telerik Document Processing +description: Learn how to use Telerik Document Processing libraries to convert color PDF reports into black and white format. +type: how-to +page_title: How to Convert Color PDF Reports to Black & White Using Telerik Document Processing +slug: convert-color-pdf-to-black-and-white-telerik-document-processing +tags: document, processing, pdf, conversion, black, white, grays +res_type: kb +ticketid: 1675661 +--- + +## Environment + +| Version | Product | Author | +| ---- | ---- | ---- | +| 2024.4.1106| RadPdfProcessing |[Desislava Yordanova](https://www.telerik.com/blogs/author/desislava-yordanova)| + +## Description + +This article shows a sample approach how to convert a colored PDF document to a grayscale one with RadPdfProcessing. + +## Solution + +To convert a colored PDF file to black and white using Telerik Document Processing, follow the steps below: + +1. Use the [RadPdfProcessing](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/overview) library to import the PDF file. +2. Iterate through the content of the PDF file, including Path, TextFragment, and Image instances. +3. Modify the colors to grayscale and export the processed file as a new PDF document. + +Here is a complete code snippet that demonstrates how to achieve this conversion: + +```csharp +using System; +using System.Diagnostics; +using System.Windows.Media.Imaging; +using Telerik.Windows.Documents.Fixed.FormatProviders.Pdf; +using Telerik.Windows.Documents.Fixed.Model; +using Telerik.Windows.Documents.Fixed.Model.Graphics; +using Telerik.Windows.Documents.Fixed.Model.Objects; +using Telerik.Windows.Documents.Fixed.Model.Text; + +namespace PDFToBlackAndWhite +{ + class Program + { + static void Main(string[] args) + { + // Load your original PDF report + PdfFormatProvider provider = new PdfFormatProvider(); + RadFixedDocument document = provider.Import(System.IO.File.ReadAllBytes("yourOriginalReport.pdf")); + + // Convert each element's color to grayscale + foreach (RadFixedPage page in document.Pages) + { + foreach (ContentElementBase element in page.Content) + { + MakeGrayscale(element); + } + } + + // Export the modified document as a new PDF file + string resultFile = "grayscaleReport.pdf"; + System.IO.File.WriteAllBytes(resultFile, provider.Export(document)); + Process.Start(new ProcessStartInfo(resultFile) { UseShellExecute = true }); + } + + private static void MakeGrayscale(ContentElementBase element) + { + if (element is TextFragment text) + { + text.Stroke = MakeGrayscale(text.Stroke); + text.Fill = MakeGrayscale(text.Fill); + } + + if (element is Path path) + { + path.Stroke = MakeGrayscale(path.Stroke); + path.Fill = MakeGrayscale(path.Fill); + } + + if (element is Image image) + { + // Convert the image to grayscale - Implementation depends on your specific requirements + } + } + + // Implement the MakeGrayscale method for ColorBase, Path, and Image as per your requirements + } +} +``` + +Ensure to adjust the `MakeGrayscale` methods for `ColorBase`, `Path`, and `Image` according to your specific needs. This sample demonstrates the basic approach to converting document elements to grayscale but might require adjustments for complex scenarios or specific color processing requirements. +## See Also + +- [RadPdfProcessing Overview](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/overview) +- [Telerik Document Processing Introduction](https://docs.telerik.com/devtools/document-processing/introduction) +- [Conditional Formatting in Telerik Reporting](https://docs.telerik.com/reporting/designing-reports/connecting-to-data/expressions/using-expressions/conditional-formatting) From 162b6157bab20ec0617ed68bf5122985dddee974 Mon Sep 17 00:00:00 2001 From: Dess Date: Wed, 15 Jan 2025 16:30:18 +0200 Subject: [PATCH 2/4] Update convert-color-pdf-to-black-and-white-telerik-document-processing.md --- ...k-and-white-telerik-document-processing.md | 182 ++++++++++++++++-- 1 file changed, 163 insertions(+), 19 deletions(-) diff --git a/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md b/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md index 00eee096..da395c03 100644 --- a/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md +++ b/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md @@ -32,59 +32,203 @@ Here is a complete code snippet that demonstrates how to achieve this conversion ```csharp using System; using System.Diagnostics; +using System.Windows.Media; using System.Windows.Media.Imaging; using Telerik.Windows.Documents.Fixed.FormatProviders.Pdf; using Telerik.Windows.Documents.Fixed.Model; +using Telerik.Windows.Documents.Fixed.Model.ColorSpaces; +using Telerik.Windows.Documents.Fixed.Model.Common; using Telerik.Windows.Documents.Fixed.Model.Graphics; using Telerik.Windows.Documents.Fixed.Model.Objects; using Telerik.Windows.Documents.Fixed.Model.Text; -namespace PDFToBlackAndWhite +namespace _1675661GrayScalePDF { - class Program + internal class Program { static void Main(string[] args) { - // Load your original PDF report - PdfFormatProvider provider = new PdfFormatProvider(); - RadFixedDocument document = provider.Import(System.IO.File.ReadAllBytes("yourOriginalReport.pdf")); + var reportProcessor = new Telerik.Reporting.Processing.ReportProcessor(); + var deviceInfo = new System.Collections.Hashtable(); + var reportSource = new Telerik.Reporting.UriReportSource(); + reportSource.Uri = "ConditionalReport.trdp"; - // Convert each element's color to grayscale - foreach (RadFixedPage page in document.Pages) + Telerik.Reporting.Processing.RenderingResult result = reportProcessor.RenderReport("PDF", reportSource, deviceInfo); + + if (!result.HasErrors) { - foreach (ContentElementBase element in page.Content) + string fileName = result.DocumentName + "." + result.Extension; + string path = System.IO.Path.GetTempPath(); + string filePath = System.IO.Path.Combine(path, fileName); + + using (System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Create)) { - MakeGrayscale(element); + fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length); } - } - // Export the modified document as a new PDF file - string resultFile = "grayscaleReport.pdf"; - System.IO.File.WriteAllBytes(resultFile, provider.Export(document)); - Process.Start(new ProcessStartInfo(resultFile) { UseShellExecute = true }); - } + Process.Start(new ProcessStartInfo() { FileName = filePath, UseShellExecute = true }); + + PdfFormatProvider provider = new PdfFormatProvider(); + RadFixedDocument document = provider.Import(System.IO.File.ReadAllBytes(filePath)); + + foreach (RadFixedPage page in document.Pages) + { + foreach (ContentElementBase element in page.Content) + { + MakeGrayscale(element); + } + } + + string resultFile = "grayscale.pdf"; + if (System.IO.File.Exists(resultFile)) + { + System.IO.File.Delete(resultFile); + } + + System.IO.File.WriteAllBytes(resultFile, provider.Export(document, TimeSpan.FromSeconds(10))); + Process.Start(resultFile); + + } + } private static void MakeGrayscale(ContentElementBase element) { - if (element is TextFragment text) + TextFragment text = element as TextFragment; + + if (text != null) { text.Stroke = MakeGrayscale(text.Stroke); text.Fill = MakeGrayscale(text.Fill); } + if (element is Path path) { path.Stroke = MakeGrayscale(path.Stroke); path.Fill = MakeGrayscale(path.Fill); } - if (element is Image image) + Image image = element as Image; + + if (image != null) { - // Convert the image to grayscale - Implementation depends on your specific requirements + BitmapSource originalImage = image.ImageSource.GetBitmapSource(); + BitmapSource grayscaleImage = MakeGrayscale(originalImage); + image.ImageSource = new Telerik.Windows.Documents.Fixed.Model.Resources.ImageSource(grayscaleImage); } } - // Implement the MakeGrayscale method for ColorBase, Path, and Image as per your requirements + private static BitmapSource MakeGrayscale(BitmapSource source) + { + byte?[,] intensities = GetPixelsIntensity(source); + BitmapSource grayscaleSource = CreateImageFromGrayPixels(intensities); + + return grayscaleSource; + } + + private static ColorBase MakeGrayscale(ColorBase color) + { + RgbColor rgb = (RgbColor)color; + + byte gray = GetGrayIntensity(rgb.R, rgb.G, rgb.G); + + return new RgbColor(rgb.A, gray, gray, gray); + } + + private static BitmapSource CreateImageFromGrayPixels(byte?[,] pixels) + { + double dpi = 96; + int height = pixels.GetLength(0); + int width = pixels.GetLength(1); + byte[] pixelData = new byte[width * height]; + + for (int y = 0; y < height; ++y) + { + int yIndex = y * width; + for (int x = 0; x < width; ++x) + { + pixelData[x + yIndex] = pixels[y, x] ?? 255; + } + } + + BitmapSource bmpSource = BitmapSource.Create(width, height, dpi, dpi, PixelFormats.Gray8, null, pixelData, width); + + return bmpSource; + } + + private static byte?[,] GetPixelsIntensity(BitmapSource bitmapSource) + { + int width = bitmapSource.PixelWidth; + int height = bitmapSource.PixelHeight; + byte?[,] intensities = new byte?[height, width]; + int[] pixels = GetPixels(bitmapSource); + int pixelIndex = 0; + + for (int i = 0; i < height; i++) + { + for (int j = 0; j < width; j++) + { + byte a, r, g, b; + GetComponentsFromPixel(pixels[pixelIndex++], out a, out r, out g, out b); + byte? intensity; + if (a == 0) + { + intensity = null; + } + else + { + intensity = (byte)((a / 255.0) * GetGrayIntensity(r, g, b)); + intensity = intensity.Value < 255 ? ((byte)(intensity.Value + 1)) : intensity.Value; + } + + intensities[i, j] = intensity; + } + } + + return intensities; + } + + private static void GetComponentsFromPixel(int pixel, out byte a, out byte r, out byte g, out byte b) + { + b = (byte)(pixel & 0xFF); + g = (byte)((pixel >> 8) & 0xFF); + r = (byte)((pixel >> 16) & 0xFF); + a = (byte)((pixel >> 24) & 0xFF); + } + + private static int[] GetPixels(BitmapSource source) + { + int[] pixels = new int[source.PixelWidth * source.PixelHeight]; + if (source.Format == PixelFormats.Bgr32 || source.Format == PixelFormats.Bgra32 || source.Format == PixelFormats.Pbgra32) + { + checked + { + source.CopyPixels(pixels, source.PixelWidth * 4, 0); + } + } + else if (source.Format == PixelFormats.Indexed8) + { + byte[] indices = new byte[source.PixelWidth * source.PixelHeight]; + source.CopyPixels(indices, source.PixelWidth, 0); + for (int i = 0; i < indices.Length; ++i) + { + Color c = source.Palette.Colors[indices[i]]; + pixels[i] = (c.A << 24) | (c.R << 16) | (c.G << 8) | (c.B << 0); + } + } + else + { + FormatConvertedBitmap converted = new FormatConvertedBitmap(source, PixelFormats.Bgra32, null, 0); + converted.CopyPixels(pixels, source.PixelWidth * 4, 0); + } + + return pixels; + } + + private static byte GetGrayIntensity(byte r, byte g, byte b) + { + return (byte)(0.2126 * r + 0.7152 * g + 0.0722 * b); + } } } ``` From 8d190afab1e2ee16d563de7a6c07de2d927882ce Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Mon, 27 Jan 2025 15:35:57 +0200 Subject: [PATCH 3/4] new KB - Converting Colored PDF Documents to GrayScale with Telerik Document Processing --- ...ck-and-white-telerik-document-processing.md | 17 ++++++++++------- knowledge-base/images/convert-grascale-pdf.png | Bin 0 -> 65002 bytes .../pdf-from-images-with-fixedcontenteditor.md | 3 ++- ...-from-images-with-radfixeddocumenteditor.md | 1 + 4 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 knowledge-base/images/convert-grascale-pdf.png diff --git a/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md b/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md index da395c03..1375548f 100644 --- a/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md +++ b/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md @@ -4,7 +4,7 @@ description: Learn how to use Telerik Document Processing libraries to convert c type: how-to page_title: How to Convert Color PDF Reports to Black & White Using Telerik Document Processing slug: convert-color-pdf-to-black-and-white-telerik-document-processing -tags: document, processing, pdf, conversion, black, white, grays +tags: document, processing, pdf, conversion, black, white, gray, image, convert res_type: kb ticketid: 1675661 --- @@ -17,14 +17,16 @@ ticketid: 1675661 ## Description -This article shows a sample approach how to convert a colored PDF document to a grayscale one with RadPdfProcessing. +This article shows a sample approach how to convert a **colored** PDF document to a **grayscale** one with [RadPdfProcessing]({%slug radpdfprocessing-overview%}). + +![Converting Colored PDF Documents to GrayScale](images/convert-grascale-pdf.png) ## Solution To convert a colored PDF file to black and white using Telerik Document Processing, follow the steps below: -1. Use the [RadPdfProcessing](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/overview) library to import the PDF file. -2. Iterate through the content of the PDF file, including Path, TextFragment, and Image instances. +1. Use the [RadPdfProcessing]({%slug radpdfprocessing-overview%}) library to import the PDF file. +2. Iterate through the content of the PDF file, including [Path]({%slug radpdfprocessing-model-path%}), [TextFragment]({%slug radpdfprocessing-model-textfragment%}), and [Image]({%slug radpdfprocessing-model-image%}) instances. 3. Modify the colors to grayscale and export the processed file as a new PDF document. Here is a complete code snippet that demonstrates how to achieve this conversion: @@ -234,8 +236,9 @@ namespace _1675661GrayScalePDF ``` Ensure to adjust the `MakeGrayscale` methods for `ColorBase`, `Path`, and `Image` according to your specific needs. This sample demonstrates the basic approach to converting document elements to grayscale but might require adjustments for complex scenarios or specific color processing requirements. + ## See Also -- [RadPdfProcessing Overview](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/overview) -- [Telerik Document Processing Introduction](https://docs.telerik.com/devtools/document-processing/introduction) -- [Conditional Formatting in Telerik Reporting](https://docs.telerik.com/reporting/designing-reports/connecting-to-data/expressions/using-expressions/conditional-formatting) +- [RadPdfProcessing Overview]({%slug radpdfprocessing-overview%}) +- [How to Generate a PDF Document from Images with FixedContentEditor]({%slug pdf-from-images-with-fixedcontenteditor%}) +- [How to Generate a PDF Document from Images with RadFixedDocumentEditor]({%slug pdf-from-images-with-radfixeddocumenteditor%}) diff --git a/knowledge-base/images/convert-grascale-pdf.png b/knowledge-base/images/convert-grascale-pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..b5f58290e621a1b7c0154df7d1d97180e55c0073 GIT binary patch literal 65002 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 literal 0 HcmV?d00001 diff --git a/knowledge-base/pdf-from-images-with-fixedcontenteditor.md b/knowledge-base/pdf-from-images-with-fixedcontenteditor.md index 339198d6..9d19e312 100644 --- a/knowledge-base/pdf-from-images-with-fixedcontenteditor.md +++ b/knowledge-base/pdf-from-images-with-fixedcontenteditor.md @@ -86,4 +86,5 @@ The produced document is illustrated in the screenshot: - [RadFixedPage]({%slug radpdfprocessing-model-radfixedpage%}) - [Position]({%slug radpdfprocessing-concepts-position%}) - [PdfFormatProvider]({%slug radpdfprocessing-formats-and-conversion-pdf-pdfformatprovider%}) -- [RadPdfProcessing Documentation](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/overview) +- [RadPdfProcessing](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/overview) +- [Converting Colored PDF Documents to GrayScale with Telerik Document Processing]({%slug convert-color-pdf-to-black-and-white-telerik-document-processing%}) diff --git a/knowledge-base/pdf-from-images-with-radfixeddocumenteditor.md b/knowledge-base/pdf-from-images-with-radfixeddocumenteditor.md index 853413b0..2eb1842e 100644 --- a/knowledge-base/pdf-from-images-with-radfixeddocumenteditor.md +++ b/knowledge-base/pdf-from-images-with-radfixeddocumenteditor.md @@ -62,3 +62,4 @@ The produced document is illustrated in the screenshot: - [RadFixedDocumentEditor]({%slug radpdfprocessing-editing-radfixeddocumenteditor%}) - [PdfFormatProvider]({%slug radpdfprocessing-formats-and-conversion-pdf-pdfformatprovider%}) - [RadPdfProcessing]({%slug radpdfprocessing-overview%}) +- [Converting Colored PDF Documents to GrayScale with Telerik Document Processing]({%slug convert-color-pdf-to-black-and-white-telerik-document-processing%}) From d5d92af17a5a0498bb6f4d5edcca4eb55c0e41af Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Tue, 25 Feb 2025 07:52:15 +0200 Subject: [PATCH 4/4] eliminated the reporting part --- ...k-and-white-telerik-document-processing.md | 44 +------------------ 1 file changed, 2 insertions(+), 42 deletions(-) diff --git a/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md b/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md index 1375548f..45695838 100644 --- a/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md +++ b/knowledge-base/convert-color-pdf-to-black-and-white-telerik-document-processing.md @@ -32,44 +32,8 @@ To convert a colored PDF file to black and white using Telerik Document Processi Here is a complete code snippet that demonstrates how to achieve this conversion: ```csharp -using System; -using System.Diagnostics; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using Telerik.Windows.Documents.Fixed.FormatProviders.Pdf; -using Telerik.Windows.Documents.Fixed.Model; -using Telerik.Windows.Documents.Fixed.Model.ColorSpaces; -using Telerik.Windows.Documents.Fixed.Model.Common; -using Telerik.Windows.Documents.Fixed.Model.Graphics; -using Telerik.Windows.Documents.Fixed.Model.Objects; -using Telerik.Windows.Documents.Fixed.Model.Text; - -namespace _1675661GrayScalePDF -{ - internal class Program - { static void Main(string[] args) - { - var reportProcessor = new Telerik.Reporting.Processing.ReportProcessor(); - var deviceInfo = new System.Collections.Hashtable(); - var reportSource = new Telerik.Reporting.UriReportSource(); - reportSource.Uri = "ConditionalReport.trdp"; - - Telerik.Reporting.Processing.RenderingResult result = reportProcessor.RenderReport("PDF", reportSource, deviceInfo); - - if (!result.HasErrors) - { - string fileName = result.DocumentName + "." + result.Extension; - string path = System.IO.Path.GetTempPath(); - string filePath = System.IO.Path.Combine(path, fileName); - - using (System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Create)) - { - fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length); - } - - Process.Start(new ProcessStartInfo() { FileName = filePath, UseShellExecute = true }); - + { PdfFormatProvider provider = new PdfFormatProvider(); RadFixedDocument document = provider.Import(System.IO.File.ReadAllBytes(filePath)); @@ -89,9 +53,7 @@ namespace _1675661GrayScalePDF } System.IO.File.WriteAllBytes(resultFile, provider.Export(document, TimeSpan.FromSeconds(10))); - Process.Start(resultFile); - - } + Process.Start(resultFile); } private static void MakeGrayscale(ContentElementBase element) { @@ -231,8 +193,6 @@ namespace _1675661GrayScalePDF { return (byte)(0.2126 * r + 0.7152 * g + 0.0722 * b); } - } -} ``` Ensure to adjust the `MakeGrayscale` methods for `ColorBase`, `Path`, and `Image` according to your specific needs. This sample demonstrates the basic approach to converting document elements to grayscale but might require adjustments for complex scenarios or specific color processing requirements.