PHPWord 损坏的文件?
PHPWord corrupted file?
我的基本 PHPWord 设置正在运行。
这是我的代码:
<?php
require_once 'PhpWord/Autoloader.php';
\PhpOffice\PhpWord\Autoloader::register();
function getEndingNotes($writers)
{
$result = '';
// Do not show execution time for index
if (!IS_INDEX) {
$result .= date('H:i:s') . " Done writing file(s)" . EOL;
$result .= date('H:i:s') . " Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB" . EOL;
}
// Return
if (CLI) {
$result .= 'The results are stored in the "results" subdirectory.' . EOL;
} else {
if (!IS_INDEX) {
$types = array_values($writers);
$result .= '<p> </p>';
$result .= '<p>Results: ';
foreach ($types as $type) {
if (!is_null($type)) {
$resultFile = 'results/' . SCRIPT_FILENAME . '.' . $type;
if (file_exists($resultFile)) {
$result .= "<a href='{$resultFile}' class='btn btn-primary'>{$type}</a> ";
}
}
}
$result .= '</p>';
}
}
return $result;
}
// Template processor instance creation
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor('template.docx');
// Variables on different parts of document
//$templateProcessor->setValue('vorname', htmlspecialchars('John')); // On section/content
//$templateProcessor->setValue('nachname', htmlspecialchars('Doe')); // On footer
//$templateProcessor->setValue('funktion', htmlspecialchars('Manager'));
// Simple table
$templateProcessor->cloneRow('rowValue', 10);
//clone our things
// Will clone everything between ${tag} and ${/tag}, the number of times. By default, 1.
$templateProcessor->cloneBlock('CLONEME', 5);
//delete things
// Everything between ${tag} and ${/tag}, will be deleted/erased.
$templateProcessor->deleteBlock('DELETEME');
// Saving the document as OOXML file...
$temp_file = tempnam(sys_get_temp_dir(), 'PHPWord');
ob_clean();
$templateProcessor->saveAs($temp_file);
getEndingNotes(array('Word2007' => 'docx'));
header("Content-Disposition: attachment; filename='cv.docx'");
readfile($temp_file); // or echo file_get_contents($temp_file);
unlink($temp_file); // remove temp file
?>
它适用于这个词file。
但是,当我更改我的 word 文件中的某些内容时,PHPWord 提供了一个损坏的文件。它与 XML 错误有关。我的问题是,我怎样才能编辑我的word文件并获得一个完美无误的工作文件?
有修复XML的工具吗?
我找到了答案,在编辑 word 文件时,word 在单词之间插入了不同的 xml 元素。我不得不在编辑器中手动编辑文件,确保替换值没有被标签分隔。
我遇到了同样的问题,这是通过 Google 搜索得到的第一个回复。
我发现使用 "deleteBlock()" 函数删除不需要的部分会对模板造成影响,使其无法用 MS Word / Google Docs 打开。我可以用 Mac 页面打开,但由于某些原因,deleteBlock() 函数在导出时做了一些奇怪的事情。
我的编辑不是使用 deleteBlock(),而是:
$templateProcessor->cloneBlock('HOBBYBLOCK', 0);
("Hobbies" 只是我在逐个导出时避免的部分的名称)
- 有效删除 {} 块包装器和
- 将内部变量/注入点设置为空。
这似乎解决了我的问题。只是提醒将来发现此问题并需要帮助进行故障排除的任何人。 :^}
我的基本 PHPWord 设置正在运行。
这是我的代码:
<?php
require_once 'PhpWord/Autoloader.php';
\PhpOffice\PhpWord\Autoloader::register();
function getEndingNotes($writers)
{
$result = '';
// Do not show execution time for index
if (!IS_INDEX) {
$result .= date('H:i:s') . " Done writing file(s)" . EOL;
$result .= date('H:i:s') . " Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB" . EOL;
}
// Return
if (CLI) {
$result .= 'The results are stored in the "results" subdirectory.' . EOL;
} else {
if (!IS_INDEX) {
$types = array_values($writers);
$result .= '<p> </p>';
$result .= '<p>Results: ';
foreach ($types as $type) {
if (!is_null($type)) {
$resultFile = 'results/' . SCRIPT_FILENAME . '.' . $type;
if (file_exists($resultFile)) {
$result .= "<a href='{$resultFile}' class='btn btn-primary'>{$type}</a> ";
}
}
}
$result .= '</p>';
}
}
return $result;
}
// Template processor instance creation
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor('template.docx');
// Variables on different parts of document
//$templateProcessor->setValue('vorname', htmlspecialchars('John')); // On section/content
//$templateProcessor->setValue('nachname', htmlspecialchars('Doe')); // On footer
//$templateProcessor->setValue('funktion', htmlspecialchars('Manager'));
// Simple table
$templateProcessor->cloneRow('rowValue', 10);
//clone our things
// Will clone everything between ${tag} and ${/tag}, the number of times. By default, 1.
$templateProcessor->cloneBlock('CLONEME', 5);
//delete things
// Everything between ${tag} and ${/tag}, will be deleted/erased.
$templateProcessor->deleteBlock('DELETEME');
// Saving the document as OOXML file...
$temp_file = tempnam(sys_get_temp_dir(), 'PHPWord');
ob_clean();
$templateProcessor->saveAs($temp_file);
getEndingNotes(array('Word2007' => 'docx'));
header("Content-Disposition: attachment; filename='cv.docx'");
readfile($temp_file); // or echo file_get_contents($temp_file);
unlink($temp_file); // remove temp file
?>
它适用于这个词file。
但是,当我更改我的 word 文件中的某些内容时,PHPWord 提供了一个损坏的文件。它与 XML 错误有关。我的问题是,我怎样才能编辑我的word文件并获得一个完美无误的工作文件? 有修复XML的工具吗?
我找到了答案,在编辑 word 文件时,word 在单词之间插入了不同的 xml 元素。我不得不在编辑器中手动编辑文件,确保替换值没有被标签分隔。
我遇到了同样的问题,这是通过 Google 搜索得到的第一个回复。
我发现使用 "deleteBlock()" 函数删除不需要的部分会对模板造成影响,使其无法用 MS Word / Google Docs 打开。我可以用 Mac 页面打开,但由于某些原因,deleteBlock() 函数在导出时做了一些奇怪的事情。
我的编辑不是使用 deleteBlock(),而是:
$templateProcessor->cloneBlock('HOBBYBLOCK', 0);
("Hobbies" 只是我在逐个导出时避免的部分的名称)
- 有效删除 {} 块包装器和
- 将内部变量/注入点设置为空。
这似乎解决了我的问题。只是提醒将来发现此问题并需要帮助进行故障排除的任何人。 :^}