Я создаю .docx
файлы из шаблона с помощью PHPWord
, Он работает нормально, но теперь я хочу преобразовать сгенерированный файл в 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» с сообщением «Невозможно добавить PreserveText в раздел».
После некоторых исследований я обнаружил, что некоторые другие также имеют эту ошибку (phpWord — Невозможно добавить PreserveText в разделе)
РЕДАКТИРОВАТЬ
Попробовав еще немного, я узнал, что
Exception
происходит только тогда, когда у меня есть некоторыеmail merge fields
в моем документе. Как только я удалил ихException
больше не подходит, но переделанный
Я думал об использовании другого способа создания PDF, но я мог найти только 4 способа:
PHPWord
а также tcpdf
, но по-прежнему нельзя использовать, так как изображения отсутствуют, и большинство (не все!) стилейЕсть ли 5-й способ создания PDF? Или есть какое-нибудь решение, чтобы сгенерированные PDF документы выглядели красиво?
я использовал Шестерни / PDF преобразовать файл docx, сгенерированный phpword, в 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();
}
Я не думаю, что я прав ..
Вы сохраняете документ как контент HTML
$ objWriter = \ PhpOffice \ PhpWord \ IOFactory :: createWriter ($ phpWord, ‘HTML’);
После этого вы читаете содержимое файла HTML и записываете содержимое в виде файла PDF с помощью MPDF или tcPdf или fpdf.