Hi Team,
We recently updated Aspose.Pdf from version 24.02 to 25.06 in our .NET Framework application. After the update, we observed a significant performance degradation when generating bigger documents that include header and footer. If we remove header footer, there is no difference in the performance.
The document generation time has increased by 5–6 times in Aspose.Pdf version 25.06 compared to version 24.02. The provided code below can be used to reproduce this issue. Please generate the same document using both versions and compare the time taken to observe the performance difference.
.Net Vesrsion: .Net Framework 4.6.2
Aspose PDF version working: 24.02
Asppose PDF version with performance issue: 25.06
using Aspose.Pdf;
using Aspose.Pdf.Annotations;Preformatted text
using Aspose.Pdf.Optimization;
using Aspose.Pdf.Text;
using System;
using System.IO;
namespace Aspos_HTML_SamplApplication
{
class Program
{
static void Main(string[] args)
{
AsposeLicenseStream.SetLicense2504();
// Create PDF document
var document = new Aspose.Pdf.Document();
var page = document.Pages.Add();
page.SetPageSize(590, 850);
var marginInfo = new MarginInfo(42, 100,
35, 100);
page.PageInfo.Margin = marginInfo;
// Add page
for (int i = 0; i < 500; i++)
{
for (int k = 0; k < 10; k++)
{
// Add table
var table = GetTable();
AddData(table, true, "header");
for (int j = 0; j < 20; j++)
{
AddData(table, false, "value");
}
page.Paragraphs.Add(table);
}
}
AddHeaderAndFooterAsText(document);
using (var stream = new MemoryStream())
{
var optimizationStrategy = new OptimizationOptions()
{
RemoveUnusedObjects = true,
RemoveUnusedStreams = true,
ImageCompressionOptions =
{
CompressImages = true,
ImageQuality = 50,
Version = ImageCompressionVersion.Standard
},
ImageEncoding = ImageEncoding.Flate,
AllowReusePageContent = true,
};
document.OptimizeResources(optimizationStrategy);
document.Save(stream);
document = new Document(stream);
document.Save("C:\\Temp\\BiggerDocument25_04.pdf");
}
}
private static void AddHeaderAndFooterAsText(Document document)
{
for (var i = 1; i <= document.Pages.Count; i++)
{
var table = GetTable();
// Create header
var header = new Aspose.Pdf.HeaderFooter();
header.Paragraphs.Add(table);
AddData(table, false, "header footer");
// Create footer
var footer = new Aspose.Pdf.HeaderFooter();
footer.Paragraphs.Add(table);
header.Margin = new Aspose.Pdf.MarginInfo
{
Left = 31,
Top = 20
};
footer.Margin = new Aspose.Pdf.MarginInfo
{
Left = 50,
Top = 20
};
document.Pages[i].Header = header;
document.Pages[i].Footer = footer;
}
using (var stream = new MemoryStream())
{
document.Save(stream);
}
}
private static Table GetTable()
{
var table = new Aspose.Pdf.Table
{
ColumnWidths = "100 100 100 100",
Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.Box, 1f, Aspose.Pdf.Color.DarkSlateGray),
DefaultCellBorder =
new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.Box, 0.5f, Aspose.Pdf.Color.Black),
DefaultCellPadding = new Aspose.Pdf.MarginInfo(4.5, 4.5, 4.5, 4.5),
Margin =
{
Bottom = 10
},
DefaultCellTextState =
{
FontSize = 10,
Font = Aspose.Pdf.Text.FontRepository.FindFont("Arial")
}
};
return table;
}
private static void AddData(Table table, bool isHeader, string text)
{
var row = table.Rows.Add();
for (int i = 0; i < 5; i++)
{
var cell = new Cell();
if (isHeader)
cell.BackgroundColor = Color.Gray;
var textFragment = new TextFragment(text);
var textState = new TextState(System.Drawing.Color.Black, 7);
textState.Font = Aspose.Pdf.Text.FontRepository.FindFont("Arial");
textFragment.TextState.ApplyChangesFrom(textState);
textFragment.TextState.ForegroundColor = Color.Black;
cell.Paragraphs.Add(textFragment);
row.Cells.Add(cell);
}
}
}
}