From 4d4cc5737ab7f92e01e92d36fe72e9d6dba4d704 Mon Sep 17 00:00:00 2001 From: KB Bot Date: Thu, 13 Jun 2024 12:12:34 +0000 Subject: [PATCH 1/4] Added new kb article add-shadow-image-radpdfprocessing --- .../add-shadow-image-radpdfprocessing.md | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 knowledge-base/add-shadow-image-radpdfprocessing.md diff --git a/knowledge-base/add-shadow-image-radpdfprocessing.md b/knowledge-base/add-shadow-image-radpdfprocessing.md new file mode 100644 index 00000000..dc62168b --- /dev/null +++ b/knowledge-base/add-shadow-image-radpdfprocessing.md @@ -0,0 +1,99 @@ +--- +title: Adding Images with a Shadow in PDF Documents +description: Learn how to add a shadow effect when inserting images into PDF documents using RadPdfProcessing. +type: how-to +page_title: How to Simulate Shadow Effects for Images in PDFs with RadPdfProcessing +slug: add-shadow-image-radpdfprocessing +tags: radpdfprocessing, document processing, image, shadow, insertimage, path, geometry +res_type: kb +ticketid: 1655064 +--- + +## Environment + +| Version | Product | Author | +| --- | --- | ---- | +| 2024.2.426| RadPdfProcessing |[Desislava Yordanova](https://www.telerik.com/blogs/author/desislava-yordanova)| + +## Description + +When inserting an image into a PDF document using the [Block.InsertImage](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/model/path) method, you might want to add a shadow effect to enhance its appearance. RadPdfProcessing provides functionalities to draw paths and geometries, enabling the simulation of shadows around images. This KB article demonstrates how to add a shadow to an image in a PDF document. + +## Solution + +To add a shadow to an image, utilize paths with specific geometries to simulate the shadow effect. The following example outlines the necessary steps to insert an image and draw a shadow around it using RadPdfProcessing: + +1. **Prepare the environment**: Ensure that `ImagePropertiesResolver` and `JpegImageConverter` are set for cross-platform image scenarios. Refer to the RadPdfProcessing documentation on [cross-platform image handling](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/cross-platform/images). + +2. **Insert the image**: Use the `Block.InsertImage` method to insert the image into a block. + +3. **Draw the shadow**: Create a `RectangleGeometry` around the image's location with an offset to simulate the shadow effect. Use a dark color for the shadow and adjust its opacity as needed. + +4. **Export the PDF document**: Use the `PdfFormatProvider` to export the document to a PDF file. + +```csharp +public static Padding pageMarginsValue = new Telerik.Windows.Documents.Primitives.Padding( + Unit.MmToDip(20), //left + Unit.MmToDip(20), //top + Unit.MmToDip(0), //right + Unit.MmToDip(0)); //bottom + +static void Main(string[] args) +{ + // Setup the environment for image handling + Telerik.Documents.ImageUtils.ImagePropertiesResolver defaultImagePropertiesResolver = new Telerik.Documents.ImageUtils.ImagePropertiesResolver(); + Telerik.Windows.Documents.Extensibility.FixedExtensibilityManager.ImagePropertiesResolver = defaultImagePropertiesResolver; + Telerik.Windows.Documents.Extensibility.JpegImageConverterBase defaultJpegImageConverter = new Telerik.Documents.ImageUtils.JpegImageConverter(); + Telerik.Windows.Documents.Extensibility.FixedExtensibilityManager.JpegImageConverter = defaultJpegImageConverter; + + RadFixedDocument fixedDocument = new RadFixedDocument(); + RadFixedPage fixedPage = fixedDocument.Pages.AddPage(); + FixedContentEditor fixedContentEditor = new FixedContentEditor(fixedPage); + + using (Stream imageStream = File.OpenRead("ninja.png")) + { + Block imageBlock = new Block(); + imageBlock.SpacingAfter = 0; + imageBlock.HorizontalAlignment = Telerik.Windows.Documents.Fixed.Model.Editing.Flow.HorizontalAlignment.Center; + Telerik.Windows.Documents.Fixed.Model.Resources.ImageSource _imageSource = + new Telerik.Windows.Documents.Fixed.Model.Resources.ImageSource(imageStream); + imageBlock.InsertImage(_imageSource); + Size imageBlockDesiredSize = imageBlock.Measure(); + int shadowWidth = 10; + + // DrawShadow + RectangleGeometry rectangleGeometry = new RectangleGeometry(); + rectangleGeometry.Rect = new Rect(pageMarginsValue.Left + shadowWidth, pageMarginsValue.Top + shadowWidth, imageBlockDesiredSize.Width, imageBlockDesiredSize.Height); + Telerik.Windows.Documents.Fixed.Model.Graphics.Path path = fixedPage.Content.AddPath(); + path.IsFilled = true; + path.IsStroked = false; + RgbColor shadowColor = new RgbColor(80, 0, 0, 0); + path.Fill = shadowColor; + path.Geometry = rectangleGeometry; + + fixedContentEditor.DrawBlock(imageBlock); + + // Export the document + PdfFormatProvider provider = new PdfFormatProvider(); + string outputFilePath = @"sample.pdf"; + using (Stream output = File.OpenWrite(outputFilePath)) + { + provider.Export(fixedDocument, output); + } + Process.Start(new ProcessStartInfo() { FileName = outputFilePath, UseShellExecute = true }); + } +} +``` + +Adjust the shadow's size, color, and opacity according to your requirements. This approach can be customized to fit specific needs or visual styles. + +## Notes + +- The provided example is a basic approach to simulating a shadow and might not cover all use cases. +- Experiment with different geometry shapes and colors to achieve the desired shadow effect. + +## See Also + +- [RadPdfProcessing Documentation](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/overview) +- [Drawing Geometries in PDF Documents](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/editing/fixedcontenteditor#inserting-geometries) +- [Handling Images in Cross-Platform Scenarios](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/cross-platform/images) From 751eb1ac956e936cab9347e1d3e5d32864c640d4 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Thu, 13 Jun 2024 15:17:00 +0300 Subject: [PATCH 2/4] add image --- .../add-shadow-image-radpdfprocessing.md | 1 + knowledge-base/images/image-shadow-pdf.png | Bin 0 -> 25028 bytes 2 files changed, 1 insertion(+) create mode 100644 knowledge-base/images/image-shadow-pdf.png diff --git a/knowledge-base/add-shadow-image-radpdfprocessing.md b/knowledge-base/add-shadow-image-radpdfprocessing.md index dc62168b..722d572c 100644 --- a/knowledge-base/add-shadow-image-radpdfprocessing.md +++ b/knowledge-base/add-shadow-image-radpdfprocessing.md @@ -84,6 +84,7 @@ static void Main(string[] args) } } ``` + ![Image Shadon in PDF](images/image-shadow-pdf.png) Adjust the shadow's size, color, and opacity according to your requirements. This approach can be customized to fit specific needs or visual styles. diff --git a/knowledge-base/images/image-shadow-pdf.png b/knowledge-base/images/image-shadow-pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..5293165f73a58d7c27d25e063eca11be249a7b47 GIT binary patch literal 25028 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 Date: Tue, 25 Jun 2024 17:49:37 +0300 Subject: [PATCH 3/4] fix links with slug --- knowledge-base/add-shadow-image-radpdfprocessing.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/knowledge-base/add-shadow-image-radpdfprocessing.md b/knowledge-base/add-shadow-image-radpdfprocessing.md index 722d572c..4431b4b2 100644 --- a/knowledge-base/add-shadow-image-radpdfprocessing.md +++ b/knowledge-base/add-shadow-image-radpdfprocessing.md @@ -17,13 +17,13 @@ ticketid: 1655064 ## Description -When inserting an image into a PDF document using the [Block.InsertImage](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/model/path) method, you might want to add a shadow effect to enhance its appearance. RadPdfProcessing provides functionalities to draw paths and geometries, enabling the simulation of shadows around images. This KB article demonstrates how to add a shadow to an image in a PDF document. +When inserting an image into a PDF document using the [Block.InsertImage](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/editing/block#inserting-image) method, you might want to add a shadow effect to enhance its appearance. [RadPdfProcessing](%slug radpdfprocessing-overview%) provides functionalities to draw paths and geometries, enabling the simulation of shadows around images. This KB article demonstrates how to add a shadow to an image in a PDF document. ## Solution To add a shadow to an image, utilize paths with specific geometries to simulate the shadow effect. The following example outlines the necessary steps to insert an image and draw a shadow around it using RadPdfProcessing: -1. **Prepare the environment**: Ensure that `ImagePropertiesResolver` and `JpegImageConverter` are set for cross-platform image scenarios. Refer to the RadPdfProcessing documentation on [cross-platform image handling](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/cross-platform/images). +1. **Prepare the environment**: Ensure that `ImagePropertiesResolver` and `JpegImageConverter` are set for cross-platform image scenarios. Refer to the RadPdfProcessing documentation on [cross-platform image handling]({%slug radpdfprocessing-cross-platform-images%}). 2. **Insert the image**: Use the `Block.InsertImage` method to insert the image into a block. @@ -95,6 +95,6 @@ Adjust the shadow's size, color, and opacity according to your requirements. Thi ## See Also -- [RadPdfProcessing Documentation](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/overview) +- [RadPdfProcessing Documentation]({%slug radpdfprocessing-overview%}) - [Drawing Geometries in PDF Documents](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/editing/fixedcontenteditor#inserting-geometries) -- [Handling Images in Cross-Platform Scenarios](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/cross-platform/images) +- [Handling Images in Cross-Platform Scenarios]({%slug radpdfprocessing-cross-platform-images%}) From 8eeaa6a5d7b2adb4f8839c5c41c309d0e2f9daba Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Tue, 2 Jul 2024 16:49:17 +0300 Subject: [PATCH 4/4] addressed feedback and comments --- knowledge-base/add-shadow-image-radpdfprocessing.md | 6 +++--- libraries/radpdfprocessing/editing/fixedcontenteditor.md | 1 + libraries/radpdfprocessing/model/image.md | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/knowledge-base/add-shadow-image-radpdfprocessing.md b/knowledge-base/add-shadow-image-radpdfprocessing.md index 4431b4b2..782d1ff7 100644 --- a/knowledge-base/add-shadow-image-radpdfprocessing.md +++ b/knowledge-base/add-shadow-image-radpdfprocessing.md @@ -21,15 +21,15 @@ When inserting an image into a PDF document using the [Block.InsertImage](https: ## Solution -To add a shadow to an image, utilize paths with specific geometries to simulate the shadow effect. The following example outlines the necessary steps to insert an image and draw a shadow around it using RadPdfProcessing: +To add a shadow to an image, utilize [paths]({%slug radpdfprocessing-model-path%}) with specific [geometries]({%slug radpdfprocessing-concepts-geometry%}) to simulate the shadow effect. The following example outlines the necessary steps to insert an image and draw a shadow around it using RadPdfProcessing: -1. **Prepare the environment**: Ensure that `ImagePropertiesResolver` and `JpegImageConverter` are set for cross-platform image scenarios. Refer to the RadPdfProcessing documentation on [cross-platform image handling]({%slug radpdfprocessing-cross-platform-images%}). +1. **Prepare the environment**: Ensure that [ImagePropertiesResolver](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/cross-platform/images#imagepropertiesresolver) and [JpegImageConverter](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/cross-platform/images#jpegimageconverter) are set for cross-platform image scenarios. Refer to the RadPdfProcessing documentation on [cross-platform image handling]({%slug radpdfprocessing-cross-platform-images%}). 2. **Insert the image**: Use the `Block.InsertImage` method to insert the image into a block. 3. **Draw the shadow**: Create a `RectangleGeometry` around the image's location with an offset to simulate the shadow effect. Use a dark color for the shadow and adjust its opacity as needed. -4. **Export the PDF document**: Use the `PdfFormatProvider` to export the document to a PDF file. +4. **Export the PDF document**: Use the [PdfFormatProvider]({%slug radpdfprocessing-formats-and-conversion-pdf-pdfformatprovider%}) to export the document to a PDF file. ```csharp public static Padding pageMarginsValue = new Telerik.Windows.Documents.Primitives.Padding( diff --git a/libraries/radpdfprocessing/editing/fixedcontenteditor.md b/libraries/radpdfprocessing/editing/fixedcontenteditor.md index 169221fd..7fe32dab 100644 --- a/libraries/radpdfprocessing/editing/fixedcontenteditor.md +++ b/libraries/radpdfprocessing/editing/fixedcontenteditor.md @@ -300,3 +300,4 @@ __FixedContentEditor__ has some properties and methods that affect how it will b * [Clipping]({%slug radpdfprocessing-concepts-clipping%}) * [Table]({%slug radpdfprocessing-editing-table%}) * [How to Generate a PDF Document from Images with FixedContentEditor]({%slug pdf-from-images-with-fixedcontenteditor%}) + * [Adding Images with a Shadow in PDF Documents]({%slug add-shadow-image-radpdfprocessing%}) \ No newline at end of file diff --git a/libraries/radpdfprocessing/model/image.md b/libraries/radpdfprocessing/model/image.md index dabf3cd8..4f0b6690 100644 --- a/libraries/radpdfprocessing/model/image.md +++ b/libraries/radpdfprocessing/model/image.md @@ -75,4 +75,5 @@ The Image class exposes also the **GetBitmapSource()** method, enabling you to o * [Position]({%slug radpdfprocessing-concepts-position%}) * [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%}) - * [Change file size of a PDF with images through ImageCompression and ImageQuality]({%slug pdfprocessing-change-file-size-through-image-quality-and-compression%}) \ No newline at end of file + * [Change file size of a PDF with images through ImageCompression and ImageQuality]({%slug pdfprocessing-change-file-size-through-image-quality-and-compression%}) + * [Adding Images with a Shadow in PDF Documents]({%slug add-shadow-image-radpdfprocessing%}) \ No newline at end of file