从PHPWord生成的.docx生成PDF

从PHPWord生成的.docx生成PDF,php,pdf,docx,phpword,Php,Pdf,Docx,Phpword,我正在使用PHPWord从模板创建.docx文件。它工作正常,但现在我想将生成的文件转换为PDF 首先,我尝试将tcpdf与PHPWord $wordPdf = \PhpOffice\PhpWord\IOFactory::load($filename.".docx"); \PhpOffice\PhpWord\Settings::setPdfRendererPath(dirname(__FILE__)."/../../Office/tcpdf"); \PhpOffice\PhpWord\Sett

我正在使用
PHPWord
从模板创建
.docx
文件。它工作正常,但现在我想将生成的文件转换为
PDF

首先,我尝试将
tcpdf
PHPWord

$wordPdf = \PhpOffice\PhpWord\IOFactory::load($filename.".docx");

\PhpOffice\PhpWord\Settings::setPdfRendererPath(dirname(__FILE__)."/../../Office/tcpdf");
\PhpOffice\PhpWord\Settings::setPdfRendererName('TCPDF');

$pdfWriter = \PhpOffice\PhpWord\IOFactory::createWriter($wordPdf , 'PDF');
if (file_exists($filename.".pdf")) unlink($filename.".pdf");
$pdfWriter->save($filename.".pdf");  
但是,当我尝试加载文件以将其转换为
PDF
时,在加载文件时出现以下异常

致命错误:未捕获异常“BadMethodCallException”,消息为“无法在节中添加保留文本”

经过一些研究,我发现有些人也有这个bug()

编辑

在尝试了更多之后,我发现只有当我的文档中有一些
邮件合并字段时才会出现
异常。一旦我删除它们,
异常
就不再出现,但是转换的
PDF
文件看起来很糟糕。所有的样式信息都消失了,我无法使用结果,因此需要另一种样式



我想用另一种方法生成PDF,但我只能找到4种方法:

  • 使用-不可能,因为我无法在服务器上安装任何软件。同样,按照前面提到的方法也不起作用,因为我的hoster()使用SunOS作为操作系统,这需要Linux
  • 使用-我没有任何预算,演示无法创建PDF
  • 使用-这是可行的,但限制为每天250个文档,每小时20个文档,我必须一次转换大约300个文档,甚至一天转换多次
  • 使用-输出看起来比使用
    PHPWord
    tcpdf
    更好,但仍然不可用,因为缺少图像和大多数(不是全部!)样式

  • 有第五种生成PDF的方法吗?或者有什么解决方案可以让生成的PDF文档看起来更漂亮吗?

    我认为我不正确。。 将文档另存为HTML内容

    $objWriter=\PhpOffice\PhpWord\IOFactory::createWriter($PhpWord,'HTML')

    之后,在mPDF或tcPdf或fpdf的帮助下,阅读HTML文件内容并将内容写入PDF文件

    我曾将phpword生成的docx文件转换为PDF:

    $success = Gears\Pdf::convert(
                'file_path/file_name.docx',
                'file_path/file_name.pdf');
    

    您试图在保存PDF文件之前取消链接,还必须取消DOCX文档的链接,而不是PDF文档的链接

    试试这个

    $pdfWriter = \PhpOffice\PhpWord\IOFactory::createWriter($wordPdf , 'PDF');    
    $pdfWriter->save($filename.".pdf");
    unlink($wordPdf);
    
    试试这个:

    // get the name of the input PDF
    $inputFile = "C:\\PHP\\Test1.docx";
    
    // get the name of the output MS-WORD file
    $outputFile = "C:\\PHP\\Test1.pdf";
    
    try
        {
        $oLoader = new COM("easyPDF.Loader.8");
        $oPrinter = $oLoader->LoadObject("easyPDF.Printer.8");
        $oPrintJob = $oPrinter->PrintJob;
        $oPrintJob->PrintOut ($inputFile, $outputFile);
        print "Success";
        }
    
    
    catch(com_exception $e)
        {
        Print "error code".$e->getcode(). "\n";
        print $e->getMessage();
        }
    

    良好的PDF输出可能需要您创建第二个模板(您已经有了MSWord模板,接下来您将需要一个PDF模板将源文档转换为tcpdf所需的输入)。@Rob_M是的,我已经考虑过创建HTML模板,因为有一些库可以将HTML转换为PDF,但是我有很多不同的模板,所以创建它们和重写我用内容填充它们的方式需要做很多工作,所以我希望有另一种更简单的方法……这个链接可能会有所帮助:PHPWord应该完成这项工作,就像@hasan.hameed提到的那样。由于您无法安装其他软件,因此不应该有任何其他选项将其转换为好看的PDF格式。我的另一个想法是使用Imagick,但这需要
    软件
    二进制文件,它不应该安装在strato上。。。