DocumentCompressionTests.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.Diagnostics;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  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, 100))
  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. Assert.That(sizeRatio, Is.GreaterThan(3));
  58. var generationTimeRatio = withCompression.generationTime / (float)withoutCompression.generationTime;
  59. Assert.That(generationTimeRatio, Is.LessThan(2));
  60. (int documentSize, float generationTime) MeasureDocumentSizeAndGenerationTime(bool compress)
  61. {
  62. var stopwatch = new Stopwatch();
  63. stopwatch.Restart();
  64. var documentSize = document
  65. .WithSettings(new DocumentSettings { CompressDocument = compress })
  66. .GeneratePdf()
  67. .Length;
  68. stopwatch.Stop();
  69. return (documentSize, stopwatch.ElapsedMilliseconds);
  70. }
  71. }
  72. }