Nitin_Rajurkar Ответов: 1

Изображение добавлено в документ MS word с помощью file_put_contents, но выдает ошибку повреждения файла


Our customer wants a web-page that allows to enter image (photograph) stored in MySQL database table in MS Word document by just clicking a button. Following is the code in CodeIgniter:

Model

<pre lang="PHP"><?php

Class user_model extends CI_Model {

    function getImage($EmpId) {
       $this -> db -> select('Employee_Id', 'Employee_Photo');
       $this -> db -> from('Employees');
       $this -> db -> where('Employee_Id', $EmpId);
       $this -> db -> limit(1);

       $query = $this -> db -> get();

       if($query -> num_rows() == 1)  {
           return $query->result();
       }   else   {
                  return false;
                  }
       }
  }
?>




Контроллер

$FullPath_with_File = $data['full_path'];    // MS Word file with path

$result = $this->user_model->getImage($session_data['Emp_Id']);

foreach($result as $row)
{
    $data['Emp_Photo'] = $row->Employee_Photo;
}
file_put_contents($FullPath_with_File, $data['Emp_Photo'], FILE_APPEND);



Все работает нормально. Никакая ошибка. Однако, когда я открываю файл MS Word, он предупреждает, что файл поврежден, вы хотите восстановить его? Если asnwered "да", он спрашивает выберите " Да " только если Вы доверяете. После ответа " Да " ничего не показывается.

Я хочу, чтобы изображение отображалось в документе word. Я провел целую неделю в поисках интернета, статей и даже внутренних частей MS Word. Нет ни единого намека на то, как изображение распознается MS Word.

Пожалуйста, помогите мне.

Что я уже пробовал:

I spent entire week in searching internet, articles and even internals of MS Word. There is not even a single hint how image is recognized by MS Word.

1 Ответов

Рейтинг:
1

Patrice T

У меня для тебя плохие новости. Файлы MS-Word не являются плоскими файлами, и простое добавление картинки в конце никогда не будет работать.

file_put_contents($FullPath_with_File, $data['Emp_Photo'], FILE_APPEND);

Это немного сложнее.
Первое, что нужно сделать, это запустить ms-word, открыть документ и посмотреть, как вставить картинку внутрь. Вы увидите, что word хочет знать, где находится картинка в документе, ее размер и несколько других настроек.

Если вы находитесь на сервере, вам нужно найти библиотеку, которая позволяет напрямую манипулировать документом.
Если вы находитесь на стороне клиента, вы также можете использовать библиотеку, которая запускает word и отправляет команды.

Сам я такой библиотекой не пользуюсь, но думаю, что одна из них называется INTEROP.
Google " php ms-word"


Richard Deeming

Руководство не поддерживается из "автоматического" применения:
Соображения по автоматизации работы офиса на стороне сервера[^]

Я подозреваю SDK OpenXML[^] является единственным жизнеспособным вариантом.

Patrice T

"Руководство не поддерживается из "автоматического" применения:"
Я этого не говорил.
Во всяком случае, более подробная информация для операции всегда приветствуется.

Nitin_Rajurkar

Спасибо. На самом деле, я подозревал то же самое, что это никогда не будет просто. Мне нужны точные шаги, чтобы завершить это.