DrawingTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Worksheet;
  3. use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
  6. use PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooterDrawing;
  7. use PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing;
  8. use PHPUnit\Framework\TestCase;
  9. class DrawingTest extends TestCase
  10. {
  11. public function testCloningWorksheetWithImages(): void
  12. {
  13. $gdImage = @imagecreatetruecolor(120, 20);
  14. $textColor = ($gdImage === false) ? false : imagecolorallocate($gdImage, 255, 255, 255);
  15. if ($gdImage === false || $textColor === false) {
  16. self::fail('imagecreatetruecolor or imagecolorallocate failed');
  17. } else {
  18. $spreadsheet = new Spreadsheet();
  19. $aSheet = $spreadsheet->getActiveSheet();
  20. imagestring($gdImage, 1, 5, 5, 'Created with PhpSpreadsheet', $textColor);
  21. $drawing = new MemoryDrawing();
  22. $drawing->setName('In-Memory image 1');
  23. $drawing->setDescription('In-Memory image 1');
  24. $drawing->setCoordinates('A1');
  25. $drawing->setImageResource($gdImage);
  26. $drawing->setRenderingFunction(
  27. MemoryDrawing::RENDERING_JPEG
  28. );
  29. $drawing->setMimeType(MemoryDrawing::MIMETYPE_DEFAULT);
  30. $drawing->setHeight(36);
  31. $drawing->setWorksheet($aSheet);
  32. $originDrawingCount = count($aSheet->getDrawingCollection());
  33. $clonedWorksheet = clone $aSheet;
  34. $clonedDrawingCount = count($clonedWorksheet->getDrawingCollection());
  35. self::assertEquals($originDrawingCount, $clonedDrawingCount);
  36. self::assertNotSame($aSheet, $clonedWorksheet);
  37. self::assertNotSame($aSheet->getDrawingCollection(), $clonedWorksheet->getDrawingCollection());
  38. $spreadsheet->disconnectWorksheets();
  39. }
  40. }
  41. public function testChangeWorksheet(): void
  42. {
  43. $spreadsheet = new Spreadsheet();
  44. $sheet1 = $spreadsheet->getActiveSheet();
  45. $sheet2 = $spreadsheet->createSheet();
  46. $drawing = new Drawing();
  47. $drawing->setName('Green Square');
  48. $drawing->setPath('tests/data/Writer/XLSX/green_square.gif');
  49. self::assertEquals($drawing->getWidth(), 150);
  50. self::assertEquals($drawing->getHeight(), 150);
  51. $drawing->setCoordinates('A1');
  52. $drawing->setOffsetX(30);
  53. $drawing->setOffsetY(10);
  54. $drawing->setWorksheet($sheet1);
  55. try {
  56. $drawing->setWorksheet($sheet2);
  57. self::fail('Should throw exception when attempting set worksheet without specifying override');
  58. } catch (PhpSpreadsheetException $e) {
  59. self::assertStringContainsString('A Worksheet has already been assigned.', $e->getMessage());
  60. }
  61. self::assertSame($sheet1, $drawing->getWorksheet());
  62. self::assertCount(1, $sheet1->getDrawingCollection());
  63. self::assertCount(0, $sheet2->getDrawingCollection());
  64. $drawing->setWorksheet($sheet2, true);
  65. self::assertSame($sheet2, $drawing->getWorksheet());
  66. self::assertCount(0, $sheet1->getDrawingCollection());
  67. self::assertCount(1, $sheet2->getDrawingCollection());
  68. }
  69. public function testHeaderFooter(): void
  70. {
  71. $drawing1 = new HeaderFooterDrawing();
  72. $drawing1->setName('Blue Square');
  73. $drawing1->setPath('tests/data/Writer/XLSX/blue_square.png');
  74. self::assertEquals($drawing1->getWidth(), 100);
  75. self::assertEquals($drawing1->getHeight(), 100);
  76. $drawing2 = new HeaderFooterDrawing();
  77. $drawing2->setName('Blue Square');
  78. $drawing2->setPath('tests/data/Writer/XLSX/blue_square.png');
  79. self::assertSame($drawing1->getHashCode(), $drawing2->getHashCode());
  80. $drawing2->setOffsetX(100);
  81. self::assertNotEquals($drawing1->getHashCode(), $drawing2->getHashCode());
  82. }
  83. public function testSetWidthAndHeight(): void
  84. {
  85. $drawing = new Drawing();
  86. $drawing->setName('Blue Square');
  87. $drawing->setPath('tests/data/Writer/XLSX/blue_square.png');
  88. self::assertSame(100, $drawing->getWidth());
  89. self::assertSame(100, $drawing->getHeight());
  90. self::assertTrue($drawing->getResizeProportional());
  91. $drawing->setResizeProportional(false);
  92. $drawing->setWidthAndHeight(150, 200);
  93. self::assertSame(150, $drawing->getWidth());
  94. self::assertSame(200, $drawing->getHeight());
  95. $drawing->setResizeProportional(true);
  96. $drawing->setWidthAndHeight(300, 250);
  97. // width increase% more than height, so scale width
  98. self::assertSame(188, $drawing->getWidth());
  99. self::assertSame(250, $drawing->getHeight());
  100. $drawing->setResizeProportional(false);
  101. $drawing->setWidthAndHeight(150, 200);
  102. $drawing->setResizeProportional(true);
  103. // height increase% more than width, so scale height
  104. $drawing->setWidthAndHeight(175, 350);
  105. self::assertSame(175, $drawing->getWidth());
  106. self::assertSame(234, $drawing->getHeight());
  107. }
  108. }