Я испытываю странное поведение при записи текста в ячейках таблицы файла RTF с использованием PHPRtfLite учебный класс. Данные извлекаются из XML, но странное поведение может быть воспроизведено с помощью простого массива.
Я заметил, что после определенного числа циклов высота (заполнение снизу) ячеек увеличивается. Если я добавлю ЕДИНОЕ значение в массив (таким образом, цикл увеличивается на единицу), заполнение будет увеличиваться, скажем, X, если я добавлю ДВА значения, заполнение увеличит X * 2 и т. Д. Это происходит только из определенного цикла. Не с первой петли.
Загрузите класс и попробуйте следующее:
Другая странность в том, что нижняя граница ячейки не может быть установлена самим Word.. Загрузите RTF с Word и попробуйте исправить это. Нижняя граница не может быть перемещена к вершине. Он застрял, пустые строки не добавлены, а высота ячейки не установлена.
<?php
error_reporting(E_ALL & ~E_NOTICE);
require_once('PHPRtf/lib/PHPRtfLite.php');
$cars = array("Acura", "Alfa Romeo", "Aston Martin", "Audi", "Bentley", "BMW", "Bugatti", "Buick", "Cadillac", "Chevrolet", "Chrysler", "Citroen", "Dodge", "Ferrari", "FIAT", "Ford", "Geely", "GM", "GMC", "Honda", "Hyunday", "Infiniti", "Jaguar", "Jeep", "Kia", "Koenigsegg", "Lamborghini", "Land Rover", "Lexus", "Maserati", "Mazda", "McLaren");
PHPRtfLite::registerAutoloader();
$rtf = new PHPRtfLite();
$border = new PHPRtfLite_Border(
$rtf,
new PHPRtfLite_Border_Format(1, '#000000'), // left border
new PHPRtfLite_Border_Format(1, '#000000'), // top border
new PHPRtfLite_Border_Format(1, '#000000'), // right border
new PHPRtfLite_Border_Format(1, '#000000') // bottom border
);
$font = new PHPRtfLite_Font(12, 'DecimaWE Rg', '#000000', '#FFFFFF');
$justify = new PHPRtfLite_ParFormat(PHPRtfLite_ParFormat::TEXT_ALIGN_JUSTIFY);
$sect = $rtf->addSection();
$table = $sect->addTable();
$row = 1;
foreach($cars as $value) {
// Add a row of height 0 at every loop
$table->addRows(1, 0);
// Set two columns of the same width
$table->addColumnsList(array(8.5, 8.5));
// Set left cell
$cell = $table->getCell($row, 1);
$cell->setCellPaddings(0.4, 0, 0.4, 0);
$cell->setFont($font);
$cell->setTextAlignment(PHPRtfLite_Table_Cell::TEXT_ALIGN_JUSTIFY);
$cell->setBorder($border);
// Set right cell
$cell = $table->getCell($row, 2);
$cell->setCellPaddings(0.4, 0, 0.4, 0);
$cell->setFont($font);
$cell->setTextAlignment(PHPRtfLite_Table_Cell::TEXT_ALIGN_JUSTIFY);
$cell->setBorder($border);
// Write in the left cell
$table->writeToCell($row, 1, $value);
// Write in the right cell
$table->writeToCell($row, 2, $value);
$row++;
}
$rtf->save('cells.rtf');
?>
Я работаю сам.
Линия:
$table->addColumnsList(array(8.5, 8.5));
должен быть вне петли и должен быть помещен после addTable
:
$table = $sect->addTable();
$table->addColumnsList(array(8.5, 8.5));
Других решений пока нет …