У меня есть проект, в котором мы используем phpdocx pro для создания файла .docx в шаблонах from. Я могу достаточно легко ввести данные в шаблон, однако, когда файл загружается и открывается в MS Word 2010, программа сообщает, что файл не может быть открыт, потому что есть проблемы с содержимым, подробности: «Файл поврежден и не может быть открыт». Word может восстановить документ, однако проблема в том, что он не должен быть поврежден в первую очередь.
Вот как я создаю документ:
function generateUnitDesign(){
if($this->populateRecords()){
require_once dirname(__FILE__).'/phpdocx/classes/CreateDocx.inc';
$filename = 'UnitDesignTemplate-'.str_replace(' ', '', $this->rec->title);
//Create Document
$document = new CreateDocx();
$document->addTemplate(dirname(__FILE__).'/templates/unitdesigntemplate.docx');
// Fill in text fields
$document->addTemplateVariable('TITLE', $this->rec->title);
$document->addTemplateVariable('CHALLENGE', $this->rec->challenge, 'html');
$document->addTemplateVariable('HOOK', $this->rec->hook, 'html');
$document->addTemplateVariable('RESEARCH', $this->rec->research, 'html');
$document->addTemplateVariable('AUDIENCE', $this->rec->audience, 'html');
$document->addTemplateVariable('SUMMARY', $this->rec->project_brief, 'html');
$document->addTemplateVariable('RESOURCES', $this->rec->resources, 'html');
$document->addTemplateVariable('REQUIREMENTS', $this->rec->requirements, 'html');
$document->addTemplateVariable('SCAFFOLDING', $this->rec->scaffolding, 'html');
$document->createDocx($filename);
unset($document);
header("Content-Type: application/vnd.ms-word");
header("Content-Length: ".filesize($filename.'.docx'));
header('Content-Disposition: attachment; filename='.$filename.'.docx');
header('Content-Transfer-Encoding: binary');
ob_clean();
flush();
readfile($filename.'.docx');
unlink($filename.'.docx');
}
}
Первоначально я пытался использовать их функцию createDocxAndDownload()
для получения файла, но она оставила бы копию файла .docx на сервере, что было не идеально. Я что-то упускаю? Есть ли кто-нибудь с большим опытом работы с phpdocx, чтобы протянуть руку помощи?
Редактировать: Ну, я чувствую себя идиотом. После сужения проблемы до части кода, которая выводит файл, я, наконец, открыл файл в HEX-редакторе и обнаружил, что проблема заключалась в том, что после успешного вывода файла веб-интерфейс добавлял начало своего HTML в конец. файл docx создает «поврежденный» файл. Эта одна строка сразу после unlink()
все исправила:
exit;
Пекка: Если вы хотите ответить на это новой информацией, я приму ваш ответ.