Я работаю над проектом, который создает клиенту систему управления качеством, безопасностью или окружающей средой, основанную на основных процедурах, которые требуются, есть 3 варианта и, следовательно, 7 различных комбинаций. Я собрал код, который смотрит на то, что им нужно, а затем вставляет данные в их таблицу документов клиента, включая копию документа шаблона слова. Сам код прекрасно работает и успешно создает клиенту список документации и вставляет шаблон документа (MS Word).
Мне нужна помощь, и я не уверен, возможно ли это, — это найти способ редактировать текстовые документы после их копирования.
Шаблоны расположены на моем /templates
папку, а затем скопировать в /clientfolder
код, который я использую для запроса, добавления и копирования, показан ниже, я знаю, что он не идеален, и я скоро обновлю его, но он работает.
Мне нужен код для включения в цикл, для редактирования только что размещенного документа и вставки названия компании и логотипа компании, которые хранятся в качестве переменных сеанса в моем проекте. Если вы посмотрите на этот образец таблицы здесь (http://iso-drive.co.uk/public/templates_documents_list.php), есть текстовый документ, который вы можете открыть, и он имеет две текстовые области —> [название компании] [логотип].
Поэтому в основном мне нужно отредактировать каждый текстовый документ и вставить в него два $ _Sessopm [companyname] и $ _Session [companylogo].
//Add Template Documentation
//step 1 identify which documentation set is required
$sql = "SELECT * FROM templates_documents WHERE scope = '".$values["msscope"]."'";
$rs = CustomQuery($sql);
$results = $rs;
while ($row = $results->fetch_assoc())
{
//Step 2 correctly name doc reference
if ($row["scope"] == '9001') $docref = $row["9001ref"];
elseif ($row["scope"] == '14001') $docref = $row["14001ref"];
elseif ($row["scope"] == '18001') $docref = $row["18001ref"];
elseif ($row["scope"] == '9001,14001') $docref = $row["914001ref"];
elseif ($row["scope"] == '9001,18001') $docref = $row["918001ref"];
elseif ($row["scope"] == '14001,18001') $docref = $row["1418001ref"];
elseif ($row["scope"] == '9001,14001,18001') $docref = $row["91418001ref"];
//Step 3 Decode Attachment Field
$fileArray = json_decode($row["attachment"],true);
//values from Attachment Array
$name1 = $fileArray["0"]["name"];
$usrName1 = $fileArray["0"]["usrName"];
$size1 = $fileArray["0"]["size"];
$type1 = $fileArray["0"]["type"];
$searchStr1 = $fileArray["0"]["searchStr"];
$name2 = $folder.'/'.$docref.'.docx';
$usrName2 = $docref.".docx";
$size2=$size1;
$type2=$type1;
$searchStr2 = $usrName2.",!:sStrEnd";
$attachment2 = '[{"name":"'.$folder.'\/'.$usrName2.'","usrName":"'.$usrName2.'","size":'.$size2.',"type":"'.$type2.'","searchStr":"'.$searchStr2.'"}]';
//Step 4 insert template documentation into main docs table
$sql2 = "INSERT INTO documents_doucments (companyfk, docref, doctype, doctitle, revision, issuedate, status, reasonforchange, attachment)
values('".$values["companypk"]."', '$docref', '$row[doctype]','$row[templatename]','0.1', now(),1, 'First Draft', '$attachment2')";CustomQuery($sql2);
//step 4 copy and rename attachment into main docs table
if ($fileArray){
$originalfile = $name1;
$newfile = $name2;
copy($name1, $name2);}
//step 5 insert duplicate records from 3 and 4 above into document history (child) table
//get docpk from master table
$sql3 = "SELECT * FROM documents_doucments where companyfk = '".$values["companypk"]."' and docref = '$docref' ";
$rs3 = CustomQuery($sql3);
$results3 = $rs3;
while ($row = $results3->fetch_assoc())
{
$documentpk = $row["documentpk"];
//insert
$sql4 = "INSERT INTO documents_documenthistory (documentfk, docref, doctype, doctitle, revision, issuedate, status, reasonforchange, attachment) values('$documentpk', '$docref', '$row[doctype]','$row[templatename]','0.1', now(),1, 'First Draft', '$attachment2')";CustomQuery($sql4);} }
Если вы хотите редактировать документ Word с уровня PHP, вам нужна внешняя библиотека для его работы, поскольку файлы Word имеют двоичный формат и обычные функции PHP, такие как substr()
здесь не будет особой пользы
Взгляни на PHPWord, которая существует специально для единственной цели редактирования документов Word из PHP.
С другой стороны, если вы хотите представить документ пользователю-пользователю, запросить редактирование и загрузить документ обратно, это совсем другая история. Для таких целей вам нужны такие функции, как readfile()
а также механизмы загрузки файлов.
В качестве примечания, я рекомендую разделить ваш код на методы и использовать согласованные отступы, так как размещенный вами код едва читаем.
Других решений пока нет …