VMWare support

Can you please tell me whether your product has been tested and works in virtual environments?

For example, our web servers are actually VMWare virtual machines so any software or component that we purchase has to be tested and works in these environments.

We already own a .NET PDF library but it is not compatible with VMWare environments unless we purchase an expensive upgrade, so I am exploring other products as a replacement.

Many thanks,

Phil

Hi Philip,

Thank you very much for considering Aspose.

I would like to inform you that all the operating systems listed in the system requirement section at the following link are supported on the VMWares for Aspose.Pdf.Kit: [System Requirements for .Net ](http://www.aspose.com/documentation/file-format-components/aspose.pdf.kit-for-.net-and-java/system-requirements-for-net.html)

You can download a [trial version](http://www.aspose.com/community/files/51/file-format-components/aspose.pdf.kit-for-.net-and-java/default.aspx) and test it at your end.

I hope this helps. If you still find any questions please do let us know.

Regards,

we have an issue with Aspose.PDF kit when save a stamped document on vmware machine it takes 15 to 30 seconds and the CPU peaks between 30% to 40 % , but this not happen at physical machine it takes only miliseconds:

Aspose.Pdf.Facades.PdfFileStamp fileStamp = new Aspose.Pdf.Facades.PdfFileStamp(pdf);
the slowness happen on below when save:
fileStamp.Save(outStream); // << Directly save to MemoryStream

IS there any solution for this since our server is a vmware server.

@Abueloun

The behavior and performance of the API depends upon the system configuration like available memory and resources. The memory and resources required by the API depend upon the file structure and complexity it is processing. Nevertheless, if you can please share a sample file and full information of your environment, we will create an investigation ticket in our issue management system to analyze this scenario and share the ticket ID with you.

PS: Please make sure that you are using the latest available version of the API.

We would appreciate it if you could explain how the fileStamp.Save(outStream); method works. When called from a .NET application under IIS on a VMware VM, it takes 12 to 19 seconds, whereas on a physical server it completes in milliseconds. It seems there may be a configuration either in your library or in VMware that could optimize the internal save process.

Additionally, I would like to note that the slowness does not occur with all PDFs — only with certain ones, even small PDFs that contain a single page.

Another point to mention is that when using the same code in a Windows Forms application on the same VMware server, it works perfectly and is very fast. The slowness only occurs when running under IIS, where the delay is significant (12 to 19 seconds).

Specifications:

.NET framework :4.8.0
aspovdf version:24.3.0
VMware specification similar to hardware specification:
Windows server 2019 Standard
4 physical processor and 8 cores per each

The code is :

using Aspose.Pdf;
using Aspose.Pdf.Facades;
public static class LogHelper
{
private static readonly string logPath =
“D:/logs/watermark_log.txt”;

    public static void Log(string msg)
    {
        try
        {
            File.AppendAllText(
                logPath,
                DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") +
                "  " + msg + Environment.NewLine
            );
        }
        catch
        {
            // ignore logging errors
        }
    }

    public static Stopwatch StartTimer(string name)
    {
        Log("[START] " + name);
        return Stopwatch.StartNew();
    }

    public static void EndTimer(string name, Stopwatch sw)
    {
        sw.Stop();
        Log("[END] " + name + "  - " + sw.ElapsedMilliseconds + " ms");
    }
}
static public byte[] setWaterMark(Stream ms)
{
    try
    {
        Stopwatch swTotal = LogHelper.StartTimer("SetWaterMark - TOTAL");

        // ----------------------------------------
        // APPLY LICENSE
        // ----------------------------------------
        LogHelper.Log("Loading license...");
        Stopwatch sw = LogHelper.StartTimer("LoadLicense");

        try
        {
            var PdfLicense = new Aspose.Pdf.License();
            PdfLicense.SetLicense(HttpContext.Current.Server.MapPath("~/License/Aspose.Pdf.lic"));
        }
        catch (Exception ex)
        {
            throw new Exception("Aspose License not applied: " + ex.Message);
        }
        LogHelper.EndTimer("LoadLicense", sw);

        // ----------------------------------------
        // LOAD PDF
        // ----------------------------------------
        LogHelper.Log("Loading PDF...");
        sw = LogHelper.StartTimer("LoadPdf");
        Aspose.Pdf.Document pdf = new Aspose.Pdf.Document(ms);
        LogHelper.EndTimer("LoadPdf", sw);

        // ----------------------------------------
        // CREATE WATERMARK IMAGE
        // ----------------------------------------
        string LogID = DateTime.Now.ToString("yyyyMMdd") + "MIF";
        LogHelper.Log("Creating watermark...");
        sw = LogHelper.StartTimer("CreateWaterMark");
        MemoryStream wmStream = CreateWaterMark(LogID);
        LogHelper.EndTimer("CreateWaterMark", sw);

        // ----------------------------------------
        // STAMP PAGES
        // ----------------------------------------
        LogHelper.Log("Stamping pages...");
        sw = LogHelper.StartTimer("StampPages");

        Aspose.Pdf.Facades.PdfFileStamp fileStamp = new Aspose.Pdf.Facades.PdfFileStamp(pdf);
        Aspose.Pdf.Facades.Stamp stamp = new Aspose.Pdf.Facades.Stamp();
        stamp.BindImage(wmStream);
        stamp.IsBackground = false;
        stamp.Opacity = 0.1f;

        // Add watermark positions

        int[] xPositions = { 100, 50, 125, 350, 200, 325 };
        int[] yPositions = { 175, 400, 550, 175, 400, 550 };
        


      

        for (int i = 0; i < xPositions.Length; i++)
        {
            stamp.SetOrigin(xPositions[i], yPositions[i]);
            fileStamp.AddStamp(stamp);
        }

        LogHelper.EndTimer("StampPages", sw);

        // ----------------------------------------
        // SAVE PDF TO MEMORY STREAM
        // ----------------------------------------
        LogHelper.Log("Saving PDF to memory...");
        sw = LogHelper.StartTimer("SavePdf");

        var optimizeOptions = new Aspose.Pdf.Optimization.OptimizationOptions();

        // Disable image recompression (takes a LOT of CPU on VMware)
        optimizeOptions.ImageCompressionOptions.CompressImages = false;
        optimizeOptions.ImageCompressionOptions.ResizeImages = false;

        // Disable font optimization

        optimizeOptions.UnembedFonts = false;

        // Disable remove-unused-object scanning
        optimizeOptions.RemoveUnusedObjects = false;
        optimizeOptions.RemoveUnusedStreams = false;

        pdf.OptimizeResources(optimizeOptions);

        using (MemoryStream outStream = new MemoryStream())
        {
            
            fileStamp.Save(outStream); // << Directly save to MemoryStream
            fileStamp.Close();
            wmStream.Dispose();

            LogHelper.EndTimer("SavePdf", sw);
            LogHelper.EndTimer("SetWaterMark - TOTAL", swTotal);

            return outStream.ToArray(); // Return byte array
        }
    }
    catch (Exception ex)
    {
        LogHelper.Log(ex.StackTrace + ex.Message);
        return null;
    }
}

// string tempFile = Path.Combine(@"D:\files", Guid.NewGuid() + ".pdf");
static public MemoryStream CreateWaterMark(string textID)
{
    MemoryStream output = new MemoryStream();

    byte[] baseImage = File.ReadAllBytes(
        HttpContext.Current.Server.MapPath("~/img/emptywatermark.png")
    );

    using (MemoryStream stream = new MemoryStream(baseImage))
    using (System.Drawing.Image img = System.Drawing.Image.FromStream(stream))
    using (System.Drawing.Graphics g = Graphics.FromImage(img))
    {
        System.Drawing.Brush myBrush =
            new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(25, System.Drawing.Color.LightSteelBlue));

        System.Drawing.Font f = new System.Drawing.Font(
            System.Drawing.FontFamily.GenericSerif, 18);

        g.RotateTransform(-45f);
        g.DrawString(textID, f, myBrush, new System.Drawing.Point(-20, 105));
        g.RotateTransform(45f);

        img.Save(output, ImageFormat.Png);
    }

    output.Position = 0;
    return output;

}

The log on VMWARE for the pdf is :

2025-12-10 12:26:25.449 [START] SetWaterMark - TOTAL
2025-12-10 12:26:25.451 Loading license…
2025-12-10 12:26:25.452 [START] LoadLicense
2025-12-10 12:26:25.587 [END] LoadLicense - 134 ms
2025-12-10 12:26:25.588 Loading PDF…
2025-12-10 12:26:25.588 [START] LoadPdf
2025-12-10 12:26:25.745 [END] LoadPdf - 156 ms
2025-12-10 12:26:25.746 Creating watermark…
2025-12-10 12:26:25.747 [START] CreateWaterMark
2025-12-10 12:26:25.750 [END] CreateWaterMark - 2 ms
2025-12-10 12:26:25.751 Stamping pages…
2025-12-10 12:26:25.751 [START] StampPages
2025-12-10 12:26:26.192 [END] StampPages - 440 ms
2025-12-10 12:26:26.193 Saving PDF to memory…
2025-12-10 12:26:26.194 [START] SavePdf
2025-12-10 12:26:45.594 [END] SavePdf - 19400 ms
2025-12-10 12:26:45.596 [END] SetWaterMark - TOTAL - 20145 ms
2025-12-10 12:40:06.988 [START] SetWaterMark - TOTAL
2025-12-10 12:40:06.989 Loading license…
2025-12-10 12:40:06.990 [START] LoadLicense
2025-12-10 12:40:07.096 [END] LoadLicense - 104 ms
2025-12-10 12:40:07.096 Loading PDF…
2025-12-10 12:40:07.097 [START] LoadPdf
2025-12-10 12:40:07.251 [END] LoadPdf - 153 ms
2025-12-10 12:40:07.252 Creating watermark…
2025-12-10 12:40:07.253 [START] CreateWaterMark
2025-12-10 12:40:07.257 [END] CreateWaterMark - 3 ms
2025-12-10 12:40:07.258 Stamping pages…
2025-12-10 12:40:07.258 [START] StampPages
2025-12-10 12:40:07.527 [END] StampPages - 268 ms
2025-12-10 12:40:07.528 Saving PDF to memory…
2025-12-10 12:40:07.528 [START] SavePdf
2025-12-10 12:40:19.487 [END] SavePdf - 11958 ms
2025-12-10 12:40:19.489 [END] SetWaterMark - TOTAL - 12500 ms
2025-12-10 12:40:26.395 [START] SetWaterMark - TOTAL
2025-12-10 12:40:26.397 Loading license…
2025-12-10 12:40:26.397 [START] LoadLicense
2025-12-10 12:40:26.506 [END] LoadLicense - 108 ms
2025-12-10 12:40:26.507 Loading PDF…
2025-12-10 12:40:26.508 [START] LoadPdf
2025-12-10 12:40:26.760 [END] LoadPdf - 251 ms
2025-12-10 12:40:26.761 Creating watermark…
2025-12-10 12:40:26.762 [START] CreateWaterMark
2025-12-10 12:40:26.767 [END] CreateWaterMark - 2 ms
2025-12-10 12:40:26.767 Stamping pages…
2025-12-10 12:40:26.768 [START] StampPages
2025-12-10 12:40:27.110 [END] StampPages - 341 ms
2025-12-10 12:40:27.111 Saving PDF to memory…
2025-12-10 12:40:27.112 [START] SavePdf
2025-12-10 12:40:44.305 [END] SavePdf - 17192 ms
2025-12-10 12:40:44.306 [END] SetWaterMark - TOTAL - 17909 ms
2025-12-10 13:16:22.904 [START] SetWaterMark - TOTAL
2025-12-10 13:16:22.906 Loading license…
2025-12-10 13:16:22.907 [START] LoadLicense
2025-12-10 13:16:23.026 [END] LoadLicense - 118 ms
2025-12-10 13:16:23.027 Loading PDF…
2025-12-10 13:16:23.027 [START] LoadPdf
2025-12-10 13:16:23.268 [END] LoadPdf - 240 ms
2025-12-10 13:16:23.269 Creating watermark…
2025-12-10 13:16:23.270 [START] CreateWaterMark
2025-12-10 13:16:23.273 [END] CreateWaterMark - 2 ms
2025-12-10 13:16:23.274 Stamping pages…
2025-12-10 13:16:23.275 [START] StampPages
2025-12-10 13:16:23.512 [END] StampPages - 237 ms
2025-12-10 13:16:23.513 Saving PDF to memory…
2025-12-10 13:16:23.514 [START] SavePdf
2025-12-10 13:16:39.859 [END] SavePdf - 16345 ms
2025-12-10 13:16:39.860 [END] SetWaterMark - TOTAL - 16954 ms
2025-12-10 14:07:59.843 [START] SetWaterMark - TOTAL
2025-12-10 14:07:59.844 Loading license…
2025-12-10 14:07:59.845 [START] LoadLicense
2025-12-10 14:08:00.293 [END] LoadLicense - 446 ms
2025-12-10 14:08:00.294 Loading PDF…
2025-12-10 14:08:00.294 [START] LoadPdf
2025-12-10 14:08:00.846 [END] LoadPdf - 550 ms
2025-12-10 14:08:00.847 Creating watermark…
2025-12-10 14:08:00.848 [START] CreateWaterMark
2025-12-10 14:08:00.852 [END] CreateWaterMark - 3 ms
2025-12-10 14:08:00.852 Stamping pages…
2025-12-10 14:08:00.853 [START] StampPages
2025-12-10 14:08:01.291 [END] StampPages - 437 ms
2025-12-10 14:08:01.292 Saving PDF to memory…
2025-12-10 14:08:01.292 [START] SavePdf
2025-12-10 14:08:19.446 [END] SavePdf - 18153 ms
2025-12-10 14:08:19.447 [END] SetWaterMark - TOTAL - 19603 ms
2025-12-10 14:09:25.614 [START] SetWaterMark - TOTAL
2025-12-10 14:09:25.615 Loading license…
2025-12-10 14:09:25.616 [START] LoadLicense
2025-12-10 14:09:25.735 [END] LoadLicense - 118 ms
2025-12-10 14:09:25.736 Loading PDF…
2025-12-10 14:09:25.737 [START] LoadPdf
2025-12-10 14:09:25.941 [END] LoadPdf - 203 ms
2025-12-10 14:09:25.942 Creating watermark…
2025-12-10 14:09:25.943 [START] CreateWaterMark
2025-12-10 14:09:25.948 [END] CreateWaterMark - 4 ms
2025-12-10 14:09:25.949 Stamping pages…
2025-12-10 14:09:25.949 [START] StampPages
2025-12-10 14:09:26.379 [END] StampPages - 429 ms
2025-12-10 14:09:26.380 Saving PDF to memory…
2025-12-10 14:09:26.382 [START] SavePdf
2025-12-10 14:09:43.474 [END] SavePdf - 17090 ms
2025-12-10 14:09:43.475 [END] SetWaterMark - TOTAL - 17859 ms

The log on physical hardware server for the same pdf:

2025-12-10 13:30:55.766 [START] SetWaterMark - TOTAL
2025-12-10 13:30:55.767 Loading license…
2025-12-10 13:30:55.767 [START] LoadLicense
2025-12-10 13:30:55.768 Loading PDF…
2025-12-10 13:30:55.769 [START] LoadPdf
2025-12-10 13:30:55.785 [END] LoadPdf - 15 ms
2025-12-10 13:30:55.786 Creating watermark…
2025-12-10 13:30:55.786 [START] CreateWaterMark
2025-12-10 13:30:55.787 [END] CreateWaterMark - 0 ms
2025-12-10 13:30:55.788 Stamping pages…
2025-12-10 13:30:55.789 [START] StampPages
2025-12-10 13:30:55.798 [END] StampPages - 8 ms
2025-12-10 13:30:55.799 Saving PDF to memory…
2025-12-10 13:30:55.799 [START] SavePdf
2025-12-10 13:30:55.835 [END] SavePdf - 34 ms
2025-12-10 13:30:55.836 [END] SetWaterMark - TOTAL - 68 ms
2025-12-10 13:31:10.488 [START] SetWaterMark - TOTAL
2025-12-10 13:31:10.489 Loading license…
2025-12-10 13:31:10.490 [START] LoadLicense
2025-12-10 13:31:10.491 Loading PDF…
2025-12-10 13:31:10.492 [START] LoadPdf
2025-12-10 13:31:10.496 [END] LoadPdf - 3 ms
2025-12-10 13:31:10.497 Creating watermark…
2025-12-10 13:31:10.497 [START] CreateWaterMark
2025-12-10 13:31:10.499 [END] CreateWaterMark - 1 ms
2025-12-10 13:31:10.500 Stamping pages…
2025-12-10 13:31:10.500 [START] StampPages
2025-12-10 13:31:10.510 [END] StampPages - 8 ms
2025-12-10 13:31:10.511 Saving PDF to memory…
2025-12-10 13:31:10.511 [START] SavePdf
2025-12-10 13:31:10.536 [END] SavePdf - 23 ms
2025-12-10 13:31:10.536 [END] SetWaterMark - TOTAL - 46 ms
2025-12-10 13:35:54.121 [START] SetWaterMark - TOTAL
2025-12-10 13:35:54.122 Loading license…
2025-12-10 13:35:54.123 [START] LoadLicense
2025-12-10 13:35:54.124 Loading PDF…
2025-12-10 13:35:54.125 [START] LoadPdf
2025-12-10 13:35:54.128 [END] LoadPdf - 2 ms
2025-12-10 13:35:54.130 Creating watermark…
2025-12-10 13:35:54.131 [START] CreateWaterMark
2025-12-10 13:35:54.133 [END] CreateWaterMark - 1 ms
2025-12-10 13:35:54.134 Stamping pages…
2025-12-10 13:35:54.134 [START] StampPages
2025-12-10 13:35:54.146 [END] StampPages - 11 ms
2025-12-10 13:35:54.147 Saving PDF to memory…
2025-12-10 13:35:54.147 [START] SavePdf
2025-12-10 13:35:54.172 [END] SavePdf - 23 ms
2025-12-10 13:35:54.173 [END] SetWaterMark - TOTAL - 50 ms
2025-12-10 14:05:18.421 [START] SetWaterMark - TOTAL
2025-12-10 14:05:18.425 Loading license…
2025-12-10 14:05:18.425 [START] LoadLicense
2025-12-10 14:05:18.657 [END] LoadLicense - 231 ms
2025-12-10 14:05:18.658 Loading PDF…
2025-12-10 14:05:18.658 [START] LoadPdf
2025-12-10 14:05:18.844 [END] LoadPdf - 184 ms
2025-12-10 14:05:18.845 Creating watermark…
2025-12-10 14:05:18.845 [START] CreateWaterMark
2025-12-10 14:05:18.861 [END] CreateWaterMark - 14 ms
2025-12-10 14:05:18.861 Stamping pages…
2025-12-10 14:05:18.862 [START] StampPages
2025-12-10 14:05:18.916 [END] StampPages - 53 ms
2025-12-10 14:05:18.917 Saving PDF to memory…
2025-12-10 14:05:18.918 [START] SavePdf
2025-12-10 14:05:19.012 [END] SavePdf - 93 ms
2025-12-10 14:05:19.013 [END] SetWaterMark - TOTAL - 587 ms
2025-12-10 14:08:52.590 [START] SetWaterMark - TOTAL
2025-12-10 14:08:52.594 Loading license…
2025-12-10 14:08:52.595 [START] LoadLicense
2025-12-10 14:08:52.879 [END] LoadLicense - 283 ms
2025-12-10 14:08:52.880 Loading PDF…
2025-12-10 14:08:52.881 [START] LoadPdf
2025-12-10 14:08:53.076 [END] LoadPdf - 194 ms
2025-12-10 14:08:53.076 Creating watermark…
2025-12-10 14:08:53.077 [START] CreateWaterMark
2025-12-10 14:08:53.094 [END] CreateWaterMark - 16 ms
2025-12-10 14:08:53.094 Stamping pages…
2025-12-10 14:08:53.095 [START] StampPages
2025-12-10 14:08:53.152 [END] StampPages - 55 ms
2025-12-10 14:08:53.153 Saving PDF to memory…
2025-12-10 14:08:53.154 [START] SavePdf
2025-12-10 14:08:53.256 [END] SavePdf - 101 ms
2025-12-10 14:08:53.256 [END] SetWaterMark - TOTAL - 662 ms
2025-12-10 14:10:10.519 [START] SetWaterMark - TOTAL
2025-12-10 14:10:10.521 Loading license…
2025-12-10 14:10:10.522 [START] LoadLicense
2025-12-10 14:10:10.731 [END] LoadLicense - 208 ms
2025-12-10 14:10:10.732 Loading PDF…
2025-12-10 14:10:10.733 [START] LoadPdf
2025-12-10 14:10:10.902 [END] LoadPdf - 168 ms
2025-12-10 14:10:10.903 Creating watermark…
2025-12-10 14:10:10.904 [START] CreateWaterMark
2025-12-10 14:10:10.916 [END] CreateWaterMark - 11 ms
2025-12-10 14:10:10.917 Stamping pages…
2025-12-10 14:10:10.918 [START] StampPages
2025-12-10 14:10:10.971 [END] StampPages - 52 ms
2025-12-10 14:10:10.972 Saving PDF to memory…
2025-12-10 14:10:10.972 [START] SavePdf
2025-12-10 14:10:11.065 [END] SavePdf - 91 ms
2025-12-10 14:10:11.065 [END] SetWaterMark - TOTAL - 543 ms
2025-12-10 14:16:57.610 [START] SetWaterMark - TOTAL
2025-12-10 14:16:57.611 Loading license…
2025-12-10 14:16:57.612 [START] LoadLicense
2025-12-10 14:16:57.668 [END] LoadLicense - 54 ms
2025-12-10 14:16:57.668 Loading PDF…
2025-12-10 14:16:57.669 [START] LoadPdf
2025-12-10 14:16:57.683 [END] LoadPdf - 13 ms
2025-12-10 14:16:57.684 Creating watermark…
2025-12-10 14:16:57.685 [START] CreateWaterMark
2025-12-10 14:16:57.687 [END] CreateWaterMark - 1 ms
2025-12-10 14:16:57.687 Stamping pages…
2025-12-10 14:16:57.688 [START] StampPages
2025-12-10 14:16:57.698 [END] StampPages - 9 ms
2025-12-10 14:16:57.700 Saving PDF to memory…
2025-12-10 14:16:57.701 [START] SavePdf
2025-12-10 14:16:57.733 [END] SavePdf - 30 ms
2025-12-10 14:16:57.733 [END] SetWaterMark - TOTAL - 122 ms

@Abueloun

Thanks for sharing such details. We will configure duplicate environment and perform investigation further against this scenario. For the purpose, an investigation ticket as PDFNET-61424 has been registered in our issue tracking system. We will look into its details and let you know as soon as the ticket is resolved. Please be patient and spare us some time.

PS: Did you try testing with 25.11 version of the API? Did it have any impact on the performance?

@asad.ali

yes, we have tried version 25.11, but the delay was same, it seems once the asposepdf dll running under IIS it became so slow at time of save.

@Abueloun

Thanks for sharing the feedback. We will investigate the ticket on first-come, first-served basis and as soon as we have some updates, we will inform you via this forum thread.