diff --git a/samples/Pdf/21a_Pdf.php b/samples/Pdf/21a_Pdf.php
index b5572afe..33b61c9f 100644
--- a/samples/Pdf/21a_Pdf.php
+++ b/samples/Pdf/21a_Pdf.php
@@ -12,6 +12,8 @@ $spreadsheet->getActiveSheet()->setShowGridLines(false);
$helper->log('Set orientation to landscape');
$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
$spreadsheet->setActiveSheetIndex(0)->setPrintGridlines(true);
+// Issue 2299 - mpdf can't handle hide rows without kludge
+$spreadsheet->getActiveSheet()->getRowDimension(2)->setVisible(false);
function changeGridlines(string $html): string
{
diff --git a/src/PhpSpreadsheet/Writer/Html.php b/src/PhpSpreadsheet/Writer/Html.php
index f6c34a8a..362eae00 100644
--- a/src/PhpSpreadsheet/Writer/Html.php
+++ b/src/PhpSpreadsheet/Writer/Html.php
@@ -54,7 +54,7 @@ class Html extends BaseWriter
*
* @var bool
*/
- private $embedImages = false;
+ protected $embedImages = false;
/**
* Use inline CSS?
@@ -630,11 +630,12 @@ class Html extends BaseWriter
*
* @return string
*/
- public static function winFileToUrl($filename)
+ public static function winFileToUrl($filename, bool $mpdf = false)
{
// Windows filename
if (substr($filename, 1, 2) === ':\\') {
- $filename = 'file:///' . str_replace('\\', '/', $filename);
+ $protocol = $mpdf ? '' : 'file:///';
+ $filename = $protocol . str_replace('\\', '/', $filename);
}
return $filename;
@@ -676,9 +677,9 @@ class Html extends BaseWriter
$filename = htmlspecialchars($filename, Settings::htmlEntityFlags());
$html .= PHP_EOL;
- $imageData = self::winFileToUrl($filename);
+ $imageData = self::winFileToUrl($filename, $this->isMPdf);
- if (($this->embedImages && !$this->isPdf) || substr($imageData, 0, 6) === 'zip://') {
+ if ($this->embedImages || substr($imageData, 0, 6) === 'zip://') {
$picture = @file_get_contents($filename);
if ($picture !== false) {
$imageDetails = getimagesize($filename);
@@ -1160,9 +1161,9 @@ class Html extends BaseWriter
$html = '';
$id = $showid ? "id='sheet$sheetIndex'" : '';
if ($showid) {
- $html .= "
\n";
+ $html .= "
" . PHP_EOL;
} else {
- $html .= "
\n";
+ $html .= "
" . PHP_EOL;
}
$this->generateTableTag($worksheet, $id, $html, $sheetIndex);
@@ -1457,6 +1458,10 @@ class Html extends BaseWriter
// Sheet index
$sheetIndex = $worksheet->getParent()->getIndex($worksheet);
$html = $this->generateRowStart($worksheet, $sheetIndex, $row);
+ $generateDiv = $this->isMPdf && $worksheet->getRowDimension($row + 1)->getVisible() === false;
+ if ($generateDiv) {
+ $html .= '
' . PHP_EOL;
+ }
// Write cells
$colNum = 0;
@@ -1504,6 +1509,9 @@ class Html extends BaseWriter
}
// Write row end
+ if ($generateDiv) {
+ $html .= '
' . PHP_EOL;
+ }
$html .= ' ' . PHP_EOL;
// Return
@@ -1834,26 +1842,26 @@ class Html extends BaseWriter
} elseif ($orientation === \PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_PORTRAIT) {
$htmlPage .= 'size: portrait; ';
}
- $htmlPage .= "}\n";
+ $htmlPage .= '}' . PHP_EOL;
++$sheetId;
}
- $htmlPage .= <<
div {margin-top: 5px;}
- body>div:first-child {margin-top: 0;}
- .scrpgbrk {margin-top: 1px;}
-}
-@media print {
- .gridlinesp td {border: 1px solid black;}
- .gridlinesp th {border: 1px solid black;}
- .navigation {display: none;}
-}
-
-EOF;
+ $htmlPage .= implode(PHP_EOL, [
+ '.navigation {page-break-after: always;}',
+ '.scrpgbrk, div + div {page-break-before: always;}',
+ '@media screen {',
+ ' .gridlines td {border: 1px solid black;}',
+ ' .gridlines th {border: 1px solid black;}',
+ ' body>div {margin-top: 5px;}',
+ ' body>div:first-child {margin-top: 0;}',
+ ' .scrpgbrk {margin-top: 1px;}',
+ '}',
+ '@media print {',
+ ' .gridlinesp td {border: 1px solid black;}',
+ ' .gridlinesp th {border: 1px solid black;}',
+ ' .navigation {display: none;}',
+ '}',
+ '',
+ ]);
$htmlPage .= $generateSurroundingHTML ? ('' . PHP_EOL) : '';
return $htmlPage;
diff --git a/src/PhpSpreadsheet/Writer/Pdf/Dompdf.php b/src/PhpSpreadsheet/Writer/Pdf/Dompdf.php
index bf9e28cb..cd17cccf 100644
--- a/src/PhpSpreadsheet/Writer/Pdf/Dompdf.php
+++ b/src/PhpSpreadsheet/Writer/Pdf/Dompdf.php
@@ -7,6 +7,13 @@ use PhpOffice\PhpSpreadsheet\Writer\Pdf;
class Dompdf extends Pdf
{
+ /**
+ * embed images, or link to images.
+ *
+ * @var bool
+ */
+ protected $embedImages = true;
+
/**
* Gets the implementation of external PDF library that should be used.
*