How to implement C# code into uipath

//using static System.Net.Mime.MediaTypeNames;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System;
using System.Collections.Generic;
using SkiaSharp;
using System.Drawing.Imaging;
using System.IO;
using System.Drawing;
using iTextSharp.xmp.impl.xpath;

string imageFolder = @“INPUT_FOLDER_PATH”; // Path to images

string outputFolder = @“OUTPUT_FOLDER_PATH”;
int maxPdfSize = 2 * 1024 * 1024;

string images = Directory.GetFiles(imageFolder);
List<List> imageGroups = DistributeImages(images, 5);
int count = 1;
int fixedQuality = 100;
foreach (var imgs in imageGroups)
{

bool qualityCheck = true;
int quality = fixedQuality;
while (qualityCheck)
{
    Document document = new Document(PageSize.A4, 25, 25, 25, 25);
    MemoryStream memoryStream = new MemoryStream();
    PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);
    document.Open();
    foreach (string path in imgs)
    {
        Image img = CompressImage(path, quality);
        document.Add(img);
        writer.Flush();

    }

   
    if (memoryStream.Length < maxPdfSize)
    {
        document.Close();
        File.WriteAllBytes(Path.Combine(outputFolder, $"PDF_{count}.pdf"), memoryStream.ToArray());
        count++;
        qualityCheck = false;
        
    }
    else
    {
        
        quality = quality - 10;            
        document = new Document(PageSize.A4, 25, 25, 25, 25);
    }
}

}

static Image CompressImage(string imagePath,int quality)
{
using (SKBitmap bitmap = SKBitmap.Decode(imagePath))
{
int newWidth = 600;
int newHeight = (int)(bitmap.Height * (600.0 / bitmap.Width)); // Maintain aspect ratio

    using (SKBitmap resizedBitmap = bitmap.Resize(new SKImageInfo(newWidth, newHeight), SKFilterQuality.Medium))
    using (SKImage img = SKImage.FromBitmap(resizedBitmap))
    using (SKData data = img.Encode(SKEncodedImageFormat.Jpeg, quality)) // 70% quality
    {
        return Image.GetInstance(data.ToArray());
    }
}

}

static List<List> DistributeImages(string images, int numFiles)
{
var groups = new List<List>();
int imagesPerFile = images.Length / numFiles;
int remaining = images.Length % numFiles;

int index = 0;
for (int i = 0; i < numFiles; i++)
{
    int count = imagesPerFile + (remaining-- > 0 ? 1 : 0);
    groups.Add(images.Skip(index).Take(count).ToList());
    index += count;
}

return groups;

}

Hi @SHYAM_KUMAR_SK , you can use invoke code activity and change the language to C# from properties panel. Please check the image for your reference. Also make sure you are passing arguments correctly to get the expected output.

Hope this helps! Happy Automation.

Hi @SHYAM_KUMAR_SK ,

  1. Use “Invoke Code” Activity

The Invoke Code activity in UiPath allows you to execute C# code directly within your workflow.

Use a Custom C# Library (DLL)

You can write your own C# code in Visual Studio, compile it as a DLL, and use it in UiPath.

Regard,
Arivu

Hi @SHYAM_KUMAR_SK ,

Adding to arivu, you can also go through the below video as reference on how to invoke/implement the C# code in UiPath to get some ideas :innocent:

Happy Learning and Happy Automation