Добавить нумерацию строк в Docx в PHP

#php #ms-word #phpoffice

#php #ms-word #phpoffice

Вопрос:

Я работаю над docx, загруженным пользователями, и я хочу добавить нумерацию строк (вот так:http://prntscr.com/n5rc1s ) в docx перед экспортом в PDF.

Я пытался добавить это с помощью PHPOffice, но мне это не удалось.

Мой код может конвертировать в PDF, но без нумерации строк.

Спасибо за вашу помощь 🙂

Мой код:

 require_once('vendor/autoload.php');


define('PHPWORD_BASE_DIR', realpath(__DIR__));
$domPdfPath = realpath(PHPWORD_BASE_DIR . '/vendor/dompdf/dompdf');
PhpOfficePhpWordSettings::setPdfRendererPath($domPdfPath);
PhpOfficePhpWordSettings::setPdfRendererName('DomPDF');

$phpWord = new PhpOfficePhpWordPhpWord();

//Open template and save it as docx
$document = $phpWord->loadTemplate('test.docx');
$document->saveAs('temp.docx');

//Load temp file
$phpWord = PhpOfficePhpWordIOFactory::load('temp.docx');
$sections = $phpWord->getSections();
foreach ($sections as $section) {
    $section->getStyle()->setLineNumbering(array());

}
//Save it
$xmlWriter = PhpOfficePhpWordIOFactory::createWriter($phpWord , 'PDF');
$xmlWriter->save('result.pdf');
  

Комментарии:

1. Я нахожу такие программы, как BBEdit, добавляющие номера строк, другое, что приходит на ум, — это редактор файлов программистов…

2. Я не могу открыть ваш скриншот. Пожалуйста, добавьте это в свой вопрос, чтобы мы не зависели от внешних сервисов.

Ответ №1:

Вы близки, но вам нужно передать значения в

 $section->getStyle()->setLineNumbering(array());
  

вместо пустого массива. В исходном

 /**
 * Line numbering
 *
 * @var PhpOfficePhpWordStyleLineNumbering
 * @see  http://www.schemacentral.com/sc/ooxml/e-w_lnNumType-1.html
 */
private $lineNumbering;
  

там есть ссылка на схему, поэтому вам действительно нужно передать значения для countBy и т.д. Вероятно, вам нужен хотя бы некоторый интервал между текстом и номерами строк, поэтому вы можете сделать что-то вроде

 $section->getStyle()->setLineNumbering(['countBy' => 1, 'restart' => 'continuous', 'distance' => PhpOfficePhpWordSharedConverter::inchToTwip(.2)]);