#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)]);