setName('Verdana')->setSize(10); $width = Font::getTextWidthPixelsApprox('n', $font, 0); self::assertEquals(8, $width); $width = Font::getTextWidthPixelsApprox('n', $font, 45); self::assertEquals(7, $width); $width = Font::getTextWidthPixelsApprox('n', $font, -165); self::assertEquals(4, $width); } /** * @dataProvider providerCalculateApproximateColumnWidth */ public function testCalculateApproximateColumnWidth( float $expectedWidth, StyleFont $font, string $text, int $rotation, StyleFont $defaultFont, bool $filter, int $indent ): void { $columnWidth = Font::calculateColumnWidth($font, $text, $rotation, $defaultFont, $filter, $indent); self::assertEquals($expectedWidth, $columnWidth); } public static function providerCalculateApproximateColumnWidth(): array { return [ [13.9966, new StyleFont(), 'Hello World', 0, new StyleFont(), false, 0], [16.2817, new StyleFont(), 'Hello World', 0, new StyleFont(), true, 0], [16.2817, new StyleFont(), 'Hello World', 0, new StyleFont(), false, 1], [18.7097, new StyleFont(), 'Hello World', 0, new StyleFont(), false, 2], [20.9949, new StyleFont(), 'Hello World', 0, new StyleFont(), false, 3], [6.9983, new StyleFont(), "Hello\nWorld", 0, new StyleFont(), false, 0], [9.2834, new StyleFont(), "Hello\nWorld", 0, new StyleFont(), true, 0], [17.5671, new StyleFont(), 'PhpSpreadsheet', 0, new StyleFont(), false, 0], [19.8523, new StyleFont(), 'PhpSpreadsheet', 0, new StyleFont(), false, 1], 'CJK characters width must be >= 43.00' => [55.2722, new StyleFont(), '如果某一列是CJK 其中的一种,这样的设置方式无效', 0, new StyleFont(), false, 0], 'non-CJK characters width must be >= 24.73' => [31.7065, new StyleFont(), 'abcdefghijklmnopqrstuvwxyz', 0, new StyleFont(), false, 0], ]; } }