Uszkodzone pobieranie .docx przy użyciu phpdocx
Mam projekt, w którym używamy phpdocx pro do wygenerowania pliku .docx w szablonach from. Mogę łatwo wprowadzić dane do szablonu, jednak gdy plik zostanie pobrany i otwarty w MS Word 2010, program zgłasza, że nie można otworzyć pliku, ponieważ występują problemy z zawartością, a szczegóły są „Plik jest uszkodzony i nie można go otworzyć ”. Program Word może naprawić dokument, jednak problem nadal pozostaje niezauważalny.
W ten sposób generuję dokument:
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');
}
}
Pierwotnie próbowałem użyć ichcreateDocxAndDownload()
funkcja do pobrania pliku, ale pozostawiłaby kopię pliku .docx na serwerze, co nie było idealne. Czy czegoś mi brakuje? Czy jest ktoś, kto ma więcej doświadczenia z phpdocxem, aby pożyczyć rękę?
Edytować: Cóż, czuję się jak idiota. Po zawężeniu problemu do części kodu, który wyprowadza plik, w końcu otworzyłem plik w edytorze HEX i odkryłem, że problem polega na tym, że po pomyślnym wyprowadzeniu pliku nakładka sieciowa dołącza początek jego HTML do końca plik docx tworzący „uszkodzony” plik. Ta jedna linia zaraz pounlink()
naprawiłem całą sprawę:
exit;
Pekka: Jeśli chcesz odpowiedzieć na to nowymi informacjami, zaakceptuję twoją odpowiedź.