Поврежденный файл PHPWord?


Моя базовая настройка 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>&nbsp;</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
?>

Это хорошо работает для этого файла Word .

Однако, когда я что-то изменяю в своем файле word, PHPWord выдает свернутый файл. Это как-то связано с ошибками XML. Мой вопрос в том, как я могу отредактировать свой файл word и получить идеально работающий файл без ошибок? Есть ли инструмент для исправления XML?

Author: Deduplicator, 2015-02-22

2 answers

Я нашел ответ, редактируя файл word, word вставляет разные xml-элементы между словами. Мне пришлось отредактировать файл вручную в редакторе, убедившись, что значения замены не разделены тегами.

 1
Author: Alexander Fuchs, 2015-03-04 20:34:35

У меня такая же проблема, и это первый ответ через поиск в Google.

Я обнаружил, что использование функции "Удалить блок()" для удаления ненужного раздела приведет к тому, что шаблон не сможет быть открыт с помощью MS Word/Google Docs. Я могу нормально открывать страницы на Mac, но по какой-то причине функция deleteBlock() делает что-то странное с экспортом.

Мое редактирование было вместо того, чтобы использовать deleteBlock(), я сделал:

$templateProcessor->cloneBlock('HOBBYBLOCK', 0);

("Хобби" было просто названием раздела, которого я избегал при экспорте в каждом конкретном случае)

  1. Эффективное удаление оболочек блоков {} и
  2. Установка внутренней переменной /точки ввода в ноль.

Это, казалось, решило мою проблему. Просто предупреждаю всех, кто в будущем найдет это и нуждается в помощи в устранении неполадок. :^}

 0
Author: Spookytheboy, 2018-03-16 21:08:15