AllOrOneSheetTest.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Writer\Html;
  3. use DOMDocument;
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PhpOffice\PhpSpreadsheet\Writer\Html;
  6. use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf;
  7. use PhpOffice\PhpSpreadsheet\Writer\Pdf\Tcpdf;
  8. use PhpOffice\PhpSpreadsheetTests\Functional;
  9. class AllOrOneSheetTest extends Functional\AbstractFunctional
  10. {
  11. public function testWriteAllSheets(): void
  12. {
  13. $spreadsheet = new Spreadsheet();
  14. $sheet1 = $spreadsheet->getActiveSheet();
  15. $sheet1->setCellValue('A1', 'first');
  16. $sheet2 = $spreadsheet->createSheet();
  17. $sheet2->setCellValue('A1', 'second');
  18. $writer = new Html($spreadsheet);
  19. self::assertFalse($writer->getEmbedImages());
  20. $writer->writeAllSheets();
  21. self::assertTrue($writer->getGenerateSheetNavigationBlock());
  22. $html = $writer->generateHTMLAll();
  23. $dom = new DOMDocument();
  24. $dom->loadHTML($html);
  25. $body = $dom->getElementsByTagName('body')[0];
  26. $divs = $body->getElementsByTagName('ul'); // sheet navigation
  27. self::assertCount(1, $divs);
  28. $divs = $body->getElementsByTagName('div');
  29. self::assertCount(2, $divs);
  30. self::assertEquals('page: page0', $divs->item(0)->getAttribute('style'));
  31. $tbl = $divs->item(0)->getElementsByTagName('table');
  32. self::assertEquals('sheet0', $tbl->item(0)->getAttribute('id'));
  33. self::assertEquals('sheet0 gridlines', $tbl->item(0)->getAttribute('class'));
  34. $tbl = $divs->item(1)->getElementsByTagName('table');
  35. self::assertEquals('page: page1', $divs->item(1)->getAttribute('style'));
  36. self::assertEquals('sheet1', $tbl->item(0)->getAttribute('id'));
  37. self::assertEquals('sheet1 gridlines', $tbl->item(0)->getAttribute('class'));
  38. $this->writeAndReload($spreadsheet, 'Html');
  39. }
  40. public function testWriteAllSheetsNoNav(): void
  41. {
  42. $spreadsheet = new Spreadsheet();
  43. $sheet1 = $spreadsheet->getActiveSheet();
  44. $sheet1->setCellValue('A1', 'first');
  45. $sheet2 = $spreadsheet->createSheet();
  46. $sheet2->setCellValue('A1', 'second');
  47. $writer = new Html($spreadsheet);
  48. $writer->writeAllSheets();
  49. $writer->setGenerateSheetNavigationBlock(false);
  50. $html = $writer->generateHTMLAll();
  51. $dom = new DOMDocument();
  52. $dom->loadHTML($html);
  53. $body = $dom->getElementsByTagName('body')[0];
  54. $divs = $body->getElementsByTagName('ul'); // sheet navigation
  55. self::assertCount(0, $divs);
  56. $divs = $body->getElementsByTagName('div');
  57. self::assertCount(2, $divs);
  58. self::assertEquals('page: page0', $divs->item(0)->getAttribute('style'));
  59. $tbl = $divs->item(0)->getElementsByTagName('table');
  60. self::assertEquals('sheet0', $tbl->item(0)->getAttribute('id'));
  61. self::assertEquals('sheet0 gridlines', $tbl->item(0)->getAttribute('class'));
  62. $tbl = $divs->item(1)->getElementsByTagName('table');
  63. self::assertEquals('page: page1', $divs->item(1)->getAttribute('style'));
  64. self::assertEquals('sheet1', $tbl->item(0)->getAttribute('id'));
  65. self::assertEquals('sheet1 gridlines', $tbl->item(0)->getAttribute('class'));
  66. $this->writeAndReload($spreadsheet, 'Html');
  67. }
  68. public function testWriteAllSheetsPdf(): void
  69. {
  70. $spreadsheet = new Spreadsheet();
  71. $sheet1 = $spreadsheet->getActiveSheet();
  72. $sheet1->setCellValue('A1', 'first');
  73. $sheet2 = $spreadsheet->createSheet();
  74. $sheet2->setCellValue('A1', 'second');
  75. $writer = new Mpdf($spreadsheet);
  76. $writer->writeAllSheets();
  77. $html = $writer->generateHTMLAll();
  78. $dom = new DOMDocument();
  79. $dom->loadHTML($html);
  80. $body = $dom->getElementsByTagName('body')[0];
  81. $divs = $body->getElementsByTagName('ul'); // sheet navigation
  82. self::assertCount(0, $divs);
  83. $divs = $body->getElementsByTagName('div');
  84. self::assertCount(2, $divs);
  85. self::assertEquals('page: page0', $divs->item(0)->getAttribute('style'));
  86. $tbl = $divs->item(0)->getElementsByTagName('table');
  87. self::assertEquals('sheet0', $tbl->item(0)->getAttribute('id'));
  88. self::assertEquals('sheet0 gridlines', $tbl->item(0)->getAttribute('class'));
  89. $tbl = $divs->item(1)->getElementsByTagName('table');
  90. self::assertEquals('page: page1', $divs->item(1)->getAttribute('style'));
  91. self::assertEquals('sheet1', $tbl->item(0)->getAttribute('id'));
  92. self::assertEquals('sheet1 gridlines', $tbl->item(0)->getAttribute('class'));
  93. }
  94. public function testWriteOneSheet(): void
  95. {
  96. $spreadsheet = new Spreadsheet();
  97. $sheet1 = $spreadsheet->getActiveSheet();
  98. $sheet1->setCellValue('A1', 'first');
  99. $sheet2 = $spreadsheet->createSheet();
  100. $sheet2->setCellValue('A1', 'second');
  101. $writer = new Html($spreadsheet);
  102. $writer->setSheetIndex(1);
  103. $html = $writer->generateHTMLAll();
  104. $dom = new DOMDocument();
  105. $dom->loadHTML($html);
  106. $body = $dom->getElementsByTagName('body')[0];
  107. $divs = $body->getElementsByTagName('ul'); // sheet navigation
  108. self::assertCount(0, $divs);
  109. $divs = $body->getElementsByTagName('div');
  110. self::assertCount(1, $divs);
  111. self::assertEquals('page: page1', $divs->item(0)->getAttribute('style'));
  112. $tbl = $divs->item(0)->getElementsByTagName('table');
  113. self::assertEquals('sheet1', $tbl->item(0)->getAttribute('id'));
  114. self::assertEquals('sheet1 gridlines', $tbl->item(0)->getAttribute('class'));
  115. $this->writeAndReload($spreadsheet, 'Html');
  116. }
  117. public function testPageBreak(): void
  118. {
  119. $spreadsheet = new Spreadsheet();
  120. $sheet = $spreadsheet->getActiveSheet();
  121. $sheet->setShowGridlines(true)->setPrintGridlines(true);
  122. $sheet->setCellValue('A1', 1);
  123. $sheet->setCellValue('A2', 'before page break');
  124. $sheet->setBreak('A2', \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::BREAK_ROW);
  125. $sheet->setCellValue('A3', 'after page break');
  126. $sheet->setCellValue('A4', 4);
  127. $sheet = $spreadsheet->createSheet();
  128. $sheet->setCellValue('A1', 'new sheet');
  129. $writer = new Html($spreadsheet);
  130. $writer->writeAllSheets();
  131. $html = $writer->generateHTMLAll();
  132. $dom = new DOMDocument();
  133. $dom->loadHTML($html);
  134. $body = $dom->getElementsByTagName('body')[0];
  135. $divs = $body->getElementsByTagName('div');
  136. self::assertCount(3, $divs);
  137. $sty = $divs[0]->getAttribute('style');
  138. $cls = $divs[0]->getAttribute('class');
  139. self::assertEquals('page: page0', $sty);
  140. self::assertEquals('', $cls);
  141. $sty = $divs[1]->getAttribute('style');
  142. $cls = $divs[1]->getAttribute('class');
  143. self::assertEquals('page: page0', $sty);
  144. self::assertEquals('scrpgbrk', $cls);
  145. $sty = $divs[2]->getAttribute('style');
  146. $cls = $divs[2]->getAttribute('class');
  147. self::assertEquals('page: page1', $sty);
  148. self::assertEquals('', $cls);
  149. $this->writeAndReload($spreadsheet, 'Html');
  150. }
  151. public function testTcpdfPageBreak(): void
  152. {
  153. $spreadsheet = new Spreadsheet();
  154. $sheet1 = $spreadsheet->getActiveSheet();
  155. $sheet1->setCellValue('A1', 'First sheet');
  156. $sheet2 = $spreadsheet->createSheet();
  157. $sheet2->setCellValue('A2', 'Second sheet');
  158. $sheet2->setCellValue('A2', 'before page break');
  159. $sheet2->setBreak('A2', \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::BREAK_ROW);
  160. $sheet2->setCellValue('A3', 'after page break');
  161. $writer = new Tcpdf($spreadsheet);
  162. $writer->writeAllSheets();
  163. $html = $writer->generateHtmlAll();
  164. $dom = new DOMDocument();
  165. $dom->loadHTML($html);
  166. $body = $dom->getElementsByTagName('body')[0];
  167. $divs = $body->getElementsByTagName('div');
  168. self::assertCount(5, $divs);
  169. self::assertEquals('page: page0', $divs[0]->getAttribute('style'));
  170. self::assertEquals('page: page1', $divs[2]->getAttribute('style'));
  171. self::assertEquals('page: page1', $divs[4]->getAttribute('style'));
  172. self::assertEquals('page-break-before:always', $divs[1]->getAttribute('style'));
  173. self::assertEquals('page-break-before:always', $divs[3]->getAttribute('style'));
  174. }
  175. }