DocumentCompressionTests.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System;
  2. using System.Diagnostics;
  3. using System.Linq;
  4. using NUnit.Framework;
  5. using QuestPDF.Fluent;
  6. using QuestPDF.Helpers;
  7. using QuestPDF.Infrastructure;
  8. namespace QuestPDF.UnitTests;
  9. public class DocumentCompressionTests
  10. {
  11. [Test]
  12. public void Test()
  13. {
  14. var document = Document.Create(document =>
  15. {
  16. document.Page(page =>
  17. {
  18. page.Size(PageSizes.A4);
  19. page.Content()
  20. .Table(table =>
  21. {
  22. table.ColumnsDefinition(columns =>
  23. {
  24. columns.RelativeColumn();
  25. columns.RelativeColumn();
  26. columns.RelativeColumn();
  27. columns.RelativeColumn();
  28. columns.ConstantColumn(100);
  29. });
  30. foreach (var y in Enumerable.Range(1, 100))
  31. {
  32. foreach (var x in Enumerable.Range(1, 4))
  33. {
  34. table
  35. .Cell()
  36. .Padding(5)
  37. .Border(1)
  38. .Background(Placeholders.BackgroundColor())
  39. .Padding(5)
  40. .Text($"f({y}, {x}) = '{Placeholders.Sentence()}'");
  41. }
  42. table
  43. .Cell()
  44. .Padding(5)
  45. .AspectRatio(2f)
  46. .Image(Placeholders.Image);
  47. }
  48. });
  49. });
  50. });
  51. // warmup cache
  52. document.GeneratePdf();
  53. var withoutCompression = MeasureDocumentSizeAndGenerationTime(false);
  54. var withCompression = MeasureDocumentSizeAndGenerationTime(true);
  55. var sizeRatio = withoutCompression.documentSize / (float)withCompression.documentSize;
  56. Assert.That(sizeRatio, Is.GreaterThan(3));
  57. var generationTimeRatio = withCompression.generationTime / (float)withoutCompression.generationTime;
  58. Assert.That(generationTimeRatio, Is.LessThan(2));
  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. }