Здравствуйте. Есть задача:
На сайте хранятся документы в формате docx, каждый из документов можно редактировать. Можно ли с помощью PHP изменять некоторые документы и запрещать редактирование?
В самом документе это можно сделать отметив документ как окончательный вариант, тем самым запретив редактирование.
P.S.
Варианты с изменением XML структуры файла docx приветствуются.
Заранее благодарен за ответ.
Ответ:
Перелопатив весь docx файл в двух вариантах, обычный и заблокированный, был найден метод блокировки.
Открываем файл как архив и работаем с XML, всё описано внутри каталогов docx.
Файл: [Content_Types].xml
Добавляем запись
<Override PartName="/docProps/custom.xml" ContentType="application/vnd.openxmlformats-officedocument.custom-properties+xml"/>
После записи
<Override PartName="/word/settings.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"/>
Файл: docProps/core.xml
Добавляем запись
<cp:contentStatus>Окончательное</cp:contentStatus>
После
</dcterms:modified>
Файл: _rels/.rels
Заменяем запись
Target="word/document.xml"/></Relationships>
На запись
Target="word/document.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties" Target="docProps/custom.xml"/></Relationships>
Файл: docProps/custom.xml
Создаем файл в каталоге docProps, со следующим содержимым.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><property fmtid="{D5CDD505-2E9C-101B-9397-08002B2CF9AE}" pid="2" name="_MarkAsFinal"><vt:bool>true</vt:bool></property></Properties>