phpword中是否有一些代码行可以在docx到pdf转换中设置纸张大小
is there some line of code in phpword to setup papersize in docx to pdf convertion
我正在尝试使用 domPDF 和 PHPWord 将现有的 docx 文件转换为 pdf,一切正常,但生成的文件是 A4 大小,原始 docx 文件是 Letter,生成的文件也必须是 letter , 我能做什么?请帮忙
$existingfile='../../CC BB03-04-30.docx';
Settings::setPdfRendererName(Settings::PDF_RENDERER_DOMPDF);
Settings::setPdfRendererPath('../../dompdf-master/vendor/');
$phpWord = IOFactory::load($existingfile, 'Word2007');
$phpWord->save('../../test.pdf', 'PDF');
正如我所说,代码运行良好,我要解决的唯一问题是纸张大小。我需要 PDF 文件的字母大小。
尝试
composer require phpoffice/phpword
Php:
Settings::setPdfRendererName(Settings::PDF_RENDERER_DOMPDF);
Settings::setPdfRendererPath('../../dompdf-master/vendor/');
$paper = new \PhpOffice\PhpWord\Style\Paper();
$paper->setSize('Letter');
$phpWord = IOFactory::load($existingfile, 'Word2007');
$phpWord->addSection(['pageSizeW' => $paper->getWidth(), 'pageSizeH' => $paper->getHeight()]);
$phpWord->save('../../test.pdf', 'PDF');
对于那些仍然有这个问题的人,我遇到了同样的问题。我尝试修改几个不同的东西,最后我发现这里的罪魁祸首是 PHPWord 的 DomPDF writer 函数。
您要查找的文件是:
vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/DomPDF.php
基本上我发现 DomPDF save()
函数将 A4 硬编码为纸张大小。
原函数是这个:
public function save($filename = null)
{
$fileHandle = parent::prepareForSave($filename);
// PDF settings
$paperSize = 'A4';
$orientation = 'portrait';
// Create PDF
$pdf = $this->createExternalWriterInstance();
$pdf->setPaper(strtolower($paperSize), $orientation);
$pdf->loadHtml(str_replace(PHP_EOL, '', $this->getContent()));
$pdf->render();
// Write to file
fwrite($fileHandle, $pdf->output());
parent::restoreStateAfterSave($fileHandle);
}
所以,基本上我所做的就是将 $paperSize
变量修改为 'letter'
并且它起作用了。我唯一不确定的是如果 composer 更新了 PHPWord 会发生什么,但我想你总是可以单独下载库并修改那个参数。我将在他们的 Github 中报告它以供将来参考。
我正在尝试使用 domPDF 和 PHPWord 将现有的 docx 文件转换为 pdf,一切正常,但生成的文件是 A4 大小,原始 docx 文件是 Letter,生成的文件也必须是 letter , 我能做什么?请帮忙
$existingfile='../../CC BB03-04-30.docx';
Settings::setPdfRendererName(Settings::PDF_RENDERER_DOMPDF);
Settings::setPdfRendererPath('../../dompdf-master/vendor/');
$phpWord = IOFactory::load($existingfile, 'Word2007');
$phpWord->save('../../test.pdf', 'PDF');
正如我所说,代码运行良好,我要解决的唯一问题是纸张大小。我需要 PDF 文件的字母大小。
尝试
composer require phpoffice/phpword
Php:
Settings::setPdfRendererName(Settings::PDF_RENDERER_DOMPDF);
Settings::setPdfRendererPath('../../dompdf-master/vendor/');
$paper = new \PhpOffice\PhpWord\Style\Paper();
$paper->setSize('Letter');
$phpWord = IOFactory::load($existingfile, 'Word2007');
$phpWord->addSection(['pageSizeW' => $paper->getWidth(), 'pageSizeH' => $paper->getHeight()]);
$phpWord->save('../../test.pdf', 'PDF');
对于那些仍然有这个问题的人,我遇到了同样的问题。我尝试修改几个不同的东西,最后我发现这里的罪魁祸首是 PHPWord 的 DomPDF writer 函数。
您要查找的文件是:
vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/DomPDF.php
基本上我发现 DomPDF save()
函数将 A4 硬编码为纸张大小。
原函数是这个:
public function save($filename = null)
{
$fileHandle = parent::prepareForSave($filename);
// PDF settings
$paperSize = 'A4';
$orientation = 'portrait';
// Create PDF
$pdf = $this->createExternalWriterInstance();
$pdf->setPaper(strtolower($paperSize), $orientation);
$pdf->loadHtml(str_replace(PHP_EOL, '', $this->getContent()));
$pdf->render();
// Write to file
fwrite($fileHandle, $pdf->output());
parent::restoreStateAfterSave($fileHandle);
}
所以,基本上我所做的就是将 $paperSize
变量修改为 'letter'
并且它起作用了。我唯一不确定的是如果 composer 更新了 PHPWord 会发生什么,但我想你总是可以单独下载库并修改那个参数。我将在他们的 Github 中报告它以供将来参考。