سؤال

لقد طلب مني شخص ما إنشاء تطبيق في PHP يقوم بإنشاء ملف .DOC مع صورة وبعض الجداول فيه. كان النهج الأول لي:

<?php
function data_uri($file, $mime) 
{  
  $contents = file_get_contents($file);
  $base64   = base64_encode($contents); 
  return ('data:' . $mime . ';base64,' . $base64);
}
$file = 'new.doc';
$fh = fopen($file,'w');
$uri = data_uri('pic.png','image/png');
fwrite($fh,'<table border="1"><tr><td><b>something</b></td><td>something else</td></tr><tr><td></td><td></td></tr></table>
<br/><img src="'.$uri.'" alt="some text" />
<br/>
<table border="1"><tr><td><b>ceva</b></td><td>altceva</td></tr><tr><td></td><td></td></tr></table>');
fclose($fh);
?>

هذا يستخدم تقنية URI للبيانات لتضمين صورة.

سيؤدي ذلك إلى إنشاء ملف HTML الذي سيتم تقديمه جيدًا في متصفحات الويب ولكن الصورة مفقودة في Microsoft Office Word ، على الأقل في الإعداد القياسي. بعد ذلك ، أثناء تحرير الملف بكلمة ، استبدلت الصورة بصورة من ملف و Microsoft Word غيرت محتويات الملف إلى XML مفتوحًا وإضافة مجلد ، New_files حيث وضع الصورة المستوردة (التي كانت .png ) ، نسخة .gif من الصورة وملف XML:

<xml xmlns:o="urn:schemas-microsoft-com:office:office">
  <o:MainFile HRef="../new.doc" /> 
  <o:File HRef="image001.jpg" /> 
  <o:File HRef="filelist.xml" /> 
</xml>

الآن هذا ليس جيدًا بما يكفي أيضًا لأنني أريد أن يتم الاحتفاظ به في ملف واحد. هل هناك طريقة لتضمين صورة في ملف .DOC OpenXML؟

هل كانت مفيدة؟

المحلول

انظر هنا http://www.tkachenko.com/blog/archives/000106.html

<w:pict>
    <v:shapetype id="_x0000_t75" ...>
    ... VML shape template definition ...
    </v:shapetype>
    <w:binData w:name="wordml://02000001.jpg">
    ... Base64 encoded image goes here ...
    </w:binData>
    <v:shape id="_x0000_i1025" type="#_x0000_t75" 
      style="width:212.4pt;height:159pt">
         <v:imagedata src="wordml://02000001.jpg" 
           o:title="Image title"/>
    </v:shape> 
</w:pict>

نصائح أخرى

هنالك phpword مشروع لمعالجة MS Word من داخل PHP.

Phpword هي مكتبة مكتوبة في PHP تنشئ مستندات Word. لا يلزم استخدام نظام تشغيل Windows للاستخدام لأن النتيجة هي ملفات DOCX (Office Open XML) التي يمكن فتحها بواسطة جميع برامج Office الرئيسية.

يمكن أن يكتبها phpword http://phpword.codeplex.com/ (ملاحظة: لا يزال في الإصدار التجريبي. لقد استخدمت phpexcel من قبل نفس الرجل كثيرًا ... لم تجرب إصدار الكلمة أبدًا).

ألقِ نظرة على مكتبة PHPDOCX لإنشاء ملفات .DOCX حقيقية بدلاً من ملفات HTML بامتداد .DOC

ملاحظة يجب أن يكون التمديد. docx بدلاً من .DOC لفتح ملفات XML Word 2007

opentbs يمكن إنشاء مستندات ديناميكية DOCX (وغيرها من ملفات OpenXML) في PHP باستخدام تقنية القوالب.

لا توجد ملفات مؤقتة ، لا توجد خطوط قيادة ، كل ذلك في PHP.

يمكن أن يضيف أو حذف الصور. يمكن إنتاج المستند الذي تم إنشاؤه كتنزيل HTML ، أو ملف تم حفظه على الخادم ، أو كمحتويات ثنائية في PHP.

يمكن أيضًا دمج ملفات OpenDocument (ODT ، ODS ، ODF ، ...)

http://www.tinybutstrong.com/opentbs.php

إذا كان النص الغني على ما يرام ، فحاول PHPRTF.

أود استخدام phpexcel. يمكن أن تعمل مع OpenXML أيضا.

إليك الرابط: http://phpexcel.codeplex.com/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top