我有在我们使用phpdocx亲生成模板在一个.docx文件的项目。 我可以给模板很容易得到的数据,但是当文件被下载并在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伸出援手更多的经验?
编辑:嗯,我觉得自己像个白痴。 向下缩小问题的文件输出的代码部分之后,我终于打开文件中的十六进制编辑器,发现问题是该文件后,成功输出的是HTML到年底的web前端将追加启动该DOCX文件制作一个“损坏”的文件。 这一条线后,立即unlink()
固定整个事情:
exit;
佩卡:如果你想使用新的信息来回答这个问题,我会接受你的答案。