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 中报告它以供将来参考。