DocumentCompressionTests.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. var withoutCompression = MeasureDocumentSizeAndGenerationTime(false);
  53. var withCompression = MeasureDocumentSizeAndGenerationTime(true);
  54. var sizeRatio = withoutCompression.documentSize / (float)withCompression.documentSize;
  55. sizeRatio.Should().BeGreaterThan(3);
  56. Math.Abs(withCompression.generationTime - withoutCompression.generationTime).Should().BeLessThan(100);
  57. (int documentSize, float generationTime) MeasureDocumentSizeAndGenerationTime(bool compress)
  58. {
  59. var stopwatch = new Stopwatch();
  60. stopwatch.Restart();
  61. var documentSize = document
  62. .WithSettings(new DocumentSettings { CompressDocument = compress })
  63. .GeneratePdf()
  64. .Length;
  65. stopwatch.Stop();
  66. return (documentSize, stopwatch.ElapsedMilliseconds);
  67. }
  68. }
  69. }