DocumentCompressionTests.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System;
  2. using System.Diagnostics;
  3. using System.Linq;
  4. using FluentAssertions;
  5. using NUnit.Framework;
  6. using QuestPDF.Fluent;
  7. using QuestPDF.Helpers;
  8. using QuestPDF.Infrastructure;
  9. namespace QuestPDF.UnitTests;
  10. public class DocumentCompressionTests
  11. {
  12. [Test]
  13. public void Test()
  14. {
  15. var document = Document.Create(document =>
  16. {
  17. document.Page(page =>
  18. {
  19. page.Size(PageSizes.A4);
  20. page.Content()
  21. .Table(table =>
  22. {
  23. table.ColumnsDefinition(columns =>
  24. {
  25. columns.RelativeColumn();
  26. columns.RelativeColumn();
  27. columns.RelativeColumn();
  28. columns.RelativeColumn();
  29. columns.ConstantColumn(100);
  30. });
  31. foreach (var y in Enumerable.Range(1, 1_00))
  32. {
  33. foreach (var x in Enumerable.Range(1, 4))
  34. {
  35. table
  36. .Cell()
  37. .Padding(5)
  38. .Border(1)
  39. .Background(Placeholders.BackgroundColor())
  40. .Padding(5)
  41. .Text($"f({y}, {x}) = '{Placeholders.Sentence()}'");
  42. }
  43. table
  44. .Cell()
  45. .Padding(5)
  46. .AspectRatio(2f)
  47. .Image(Placeholders.Image);
  48. }
  49. });
  50. });
  51. });
  52. // warmup cache
  53. document.GeneratePdf();
  54. var withoutCompression = MeasureDocumentSizeAndGenerationTime(false);
  55. var withCompression = MeasureDocumentSizeAndGenerationTime(true);
  56. var sizeRatio = withoutCompression.documentSize / (float)withCompression.documentSize;
  57. sizeRatio.Should().BeGreaterThan(3);
  58. (withCompression.generationTime / withoutCompression.generationTime).Should().BeLessThan(2f);
  59. (int documentSize, float generationTime) MeasureDocumentSizeAndGenerationTime(bool compress)
  60. {
  61. var stopwatch = new Stopwatch();
  62. stopwatch.Restart();
  63. var documentSize = document
  64. .WithSettings(new DocumentSettings { CompressDocument = compress })
  65. .GeneratePdf()
  66. .Length;
  67. stopwatch.Stop();
  68. return (documentSize, stopwatch.ElapsedMilliseconds);
  69. }
  70. }
  71. }