From dbaafba6c6dcf8c75a2c460d85758514ccb8e08f Mon Sep 17 00:00:00 2001 From: Igor Date: Mon, 17 Jan 2022 15:59:31 +1000 Subject: [PATCH] Fix loading drawing size (#2492) --- src/PhpSpreadsheet/Reader/Xlsx.php | 4 +-- .../Reader/Xlsx/DrawingOneCellAnchorTest.php | 28 ++++++++++++++++++ .../Reader/XLSX/drawingOneCellAnchor.xlsx | Bin 0 -> 13206 bytes 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 tests/PhpSpreadsheetTests/Reader/Xlsx/DrawingOneCellAnchorTest.php create mode 100644 tests/data/Reader/XLSX/drawingOneCellAnchor.xlsx diff --git a/src/PhpSpreadsheet/Reader/Xlsx.php b/src/PhpSpreadsheet/Reader/Xlsx.php index 6a5f1f3a..75703be3 100644 --- a/src/PhpSpreadsheet/Reader/Xlsx.php +++ b/src/PhpSpreadsheet/Reader/Xlsx.php @@ -1257,8 +1257,8 @@ class Xlsx extends BaseReader $objDrawing->setOffsetX((int) Drawing::EMUToPixels($oneCellAnchor->from->colOff)); $objDrawing->setOffsetY(Drawing::EMUToPixels($oneCellAnchor->from->rowOff)); $objDrawing->setResizeProportional(false); - $objDrawing->setWidth(Drawing::EMUToPixels(self::getArrayItem((int) self::getAttributes($oneCellAnchor->ext), 'cx'))); - $objDrawing->setHeight(Drawing::EMUToPixels(self::getArrayItem((int) self::getAttributes($oneCellAnchor->ext), 'cy'))); + $objDrawing->setWidth(Drawing::EMUToPixels(self::getArrayItem(self::getAttributes($oneCellAnchor->ext), 'cx'))); + $objDrawing->setHeight(Drawing::EMUToPixels(self::getArrayItem(self::getAttributes($oneCellAnchor->ext), 'cy'))); if ($xfrm) { $objDrawing->setRotation((int) Drawing::angleToDegrees(self::getArrayItem(self::getAttributes($xfrm), 'rot'))); } diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/DrawingOneCellAnchorTest.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/DrawingOneCellAnchorTest.php new file mode 100644 index 00000000..fe6b8078 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/DrawingOneCellAnchorTest.php @@ -0,0 +1,28 @@ +load($filename); + $worksheet = $spreadsheet->getActiveSheet(); + $collection = $worksheet->getDrawingCollection(); + self::assertCount(1, $collection); + + /** @var BaseDrawing $drawing */ + $drawing = $collection[0]; + self::assertEquals('A2', $drawing->getCoordinates()); + self::assertEquals(10, $drawing->getOffsetX()); + self::assertEquals(10, $drawing->getOffsetY()); + self::assertEquals(150, $drawing->getHeight()); + self::assertEquals(150, $drawing->getWidth()); + } +} diff --git a/tests/data/Reader/XLSX/drawingOneCellAnchor.xlsx b/tests/data/Reader/XLSX/drawingOneCellAnchor.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..65b9e6dde74a1282fce09a58286ab68a6035b3a5 GIT binary patch literal 13206 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 j9^iKixdB8Bz@L9-1>~i`A^!LY3gC?nh