2015-10-12 76 views
8

PHPWordを使用してテンプレートからファイル.docxを作成しています。それはうまく動作しますが、今私はPDFに生成されたファイルを変換したい。PHPWordによって生成された.docxからPDFを生成

まず私は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"); 

と組み合わせてtcpdfを使用してみましたが、私はPDFに変換するファイルをロードしようとすると、

Fatal error: Uncaught exception 'BadMethodCallException' with message 'Cannot add PreserveText in Section.'

ファイルをロードしている間、私は次の例外を取得しますいくつかの調査の後、私はいくつかの他の人もこのバグを持っていることを発見した(phpWord - Cannot add PreserveText in Section

EDIT

After trying around some more I found out, that the Exception only occurs when I have some mail merge fields in my document. Once I removed them the Exception does not come up anymore, but the converted PDF files look horrible. All style information are gone and I can't use the result, so the need for an alternative stays.



私は、PDFを生成するための別の方法を使用して考えたが、私は唯一の4つの方法を見つけることができる:

OpenOffice使用
  1. - インポッシブルをサーバーにソフトウェアをインストールすることはできません。また、道を行くことはhereは、OSとしてのSunOSを使用しており、これはphpdocxを用いたLinux
  2. を必要とする(Strato)私のホスティング事業者としてのいずれかで動作しませんでした言及 - 私はそれを支払うための任意の予算を持っていないとデモがPDFを作成することはできません
  3. PHPLiveDocx使用 - これはPHP-Digital-Format-Convertを使用して動作しますが、一日あたり250のドキュメントの制限があり、時速20と私は一度にarroundの300の文書を変換する必要があり、多分複数回日
  4. - 出力をよりもよく見えますとtcpdfが、画像としてまだ使用可能ではないが不足している、最もされている(すべてではない!)のスタイル

のPDFを生成するための第五の方法はありますか?または、生成されたPDF文書を見栄えの良いものにするためのソリューションはありますか?

+2

まともなPDF出力は、おそらくあなたの隣'LL、すでにMSWordのテンプレートを持っている(第2のテンプレートを作成することが必要になりますがソース文書をtcpdfが望む入力に変換するPDFテンプレートが必要です)。 –

+0

@Rob_Mそうですね、HTMLをPDFに変換するライブラリがあるので、すでにHTMLテンプレートを作成することを考えましたが、テンプレートがかなり異なるため、テンプレートを作成して書き直す作業がかなり必要になりますコンテンツがあるので、もう少し簡単な方法があることを願っています。 – Pinguin895

+0

このリンクは役に立ちます: https://github.com/PHPOffice/PHPWord/issues/311 –

答えて

0

私は私が正しいだとは思わない... あなたはHTMLコンテンツとして文書を保存

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

した後、あなたは、HTMLファイルの内容を読み、の助けを借りて、PDFファイルなどのコンテンツを書くよりも、 mPDFまたはtcPdfまたはfpdf。

0

私はPDFにphpwordによって生成されたのdocxファイルに変換するためにGears/pdfを使用:

$success = Gears\Pdf::convert(
      'file_path/file_name.docx', 
      'file_path/file_name.pdf'); 
関連する問題