В одной славной компании жил да был славный операционный отдел, который считал сметы клиентовы и высылал их почтою. И всё в этом отделе шло замечательно, да только смета была некрасивой. Кручинились операционисты, что шаблон у них был неказист да плох. Обратились тогда они к красным молодцам из IT-отдела, мол, помогайте, братцы.
Долго ли коротко сражались славные программисты с чудищами заморскими, что в народе кличутся MS Excel и LibreOffice Calc. Да только упёрлись в проблему невиданную, мудрёную. Не умеют чудища считать высоту ячейки, если в свойствах оной стоит галочка “Переносить по словам”, да текста много. А коли высота ячейки не рассчитана, то срам и лезет в смету.
Список услуг в виде строк текста разной длины:
1. Услуги по организации проживания
2. Авиабилет Сидоров С. Кемерово-Москва-Кемерово 17.09-20.09.2019
3. Аэроэкспресс. Пассажир: Сидоров Сидор Сидорович. Дата отправления: 2019-09-20. г. Москва, отель Россия, Чистопрудный бул., дом 11 (Мероприятие в дивизионе -)
Разбить строки с ограничением по ширине в пикселях, как это делают Excel и Calc.
Считаем, что ширина ячейки равна 200px, а текст напечатан шрифтом NotoSerif 11pt. Слова могут переноситься только целиком. Результат должен получиться следующим:
Строка 1:
Услуги по организации
проживания
Строка 2:
Авиабилет Сидоров С.
Кемерово-Москва-
Кемерово 17.09-20.09.2019
Строка 3:
Аэроэкспресс. Пассажир:
Сидоров Сидор
Сидорович. Дата
отправления: 2019-09-20.
г. Москва, отель Россия,
Чистопрудный бул., дом
11 (Мероприятие в
дивизионе -)
Сформировать xlsx-файл, в котором высота строк задаётся в зависимости от содержимого ячеек. Файл должен одинаково отображаться в Excel и Calc.
<?php
$font = realpath('NotoSerif-Regular.ttf');
$size = 11;
$width = 200;
$orderLines = [
'Услуги по организации проживания',
'Авиабилет Сидоров С. Кемерово-Москва-Кемерово 17.09-20.09.2019',
'Аэроэкспресс. Пассажир: Сидоров Сидор Сидорович. Дата отправления: 2019-09-20. г. Москва, отель Россия, Чистопрудный бул., дом 11 (Мероприятие в дивизионе -)',
];
$splitLine = function($text, $font, $size, $width) {
// Разбиваем текст на строки с ограничением по ширине
};
foreach($orderLines as $i => $line) {
echo "Строка ", $i + 1, ":\n ", join("\n ", $splitLine($line, $font, $size, $width)), "\n\n";
}