Güzel soru.
Neden basit touch komutu ile .odt uzantılı dosya oluşturamıyacağımız sorulmuş. (en azından o zaman)
Şuan böyle bir problem yok touch komutu ile .odt dosyası oluşturup içine echo ile yazı yazılabiliyor. Ve dosya sorunsuz açılıyor.
Calc .ods dosyası içinde touch komutu ile boş belge oluşturma mümkün ama içine echo ile içerik girerken kod sorunu yasanması gayet mantıklı.
Zamanında verilen cevap konuyu açıklayıcı burada bulunmasında fayda var. Sabri Ünal’dan alıntıdır.
Herhangi bir uygulama tarafından odt
dosyası oluşturmak istiyorsunuz
anladığım.
Dilerseniz konuya ben de PHP
tarafından bakayım.
ODT dosyası aslında zip formatında bir
içeriğe sahiptir.
test.odt dosyasını test.zip diye
değiştirip iç yapısını görüntülerseniz
Kod:
Configurations2/
META-INF/
Thumbnails/
content.xml
layout-cache
manifest.rdf
meta.xml
mimetype
settings.xml
styles.xml
Klasör ve dosyalarına sahip olduğunu
görürsünüz.
İlk işlem olarak META-INF/ klasörüne
bulunan manifest.xml dosyasına
başvurulmaktadır.
Dosyanın içeriği şöyle
<?xml version="1.0" encoding="UTF-8"?>
> <manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"
manifest:version="1.2">
> <manifest:file-entry manifest:full-path="/"
> manifest:version="1.2"
> manifest:media-type="application/vnd.oasis.opendocument.text"/>
> <manifest:file-entry manifest:full-path="Thumbnails/thumbnail.png"
> manifest:media-type="image/png"/>
> <manifest:file-entry manifest:full-path="layout-cache"
> manifest:media-type="application/binary"/>
> <manifest:file-entry manifest:full-path="content.xml"
> manifest:media-type="text/xml"/>
> <manifest:file-entry manifest:full-path="settings.xml"
> manifest:media-type="text/xml"/>
> <manifest:file-entry manifest:full-path="meta.xml"
> manifest:media-type="text/xml"/>
> <manifest:file-entry manifest:full-path="styles.xml"
> manifest:media-type="text/xml"/>
> <manifest:file-entry manifest:full-path="manifest.rdf"
> manifest:media-type="application/rdf+xml"/>
> <manifest:file-entry manifest:full-path="Configurations2/accelerator/current.xml"
> manifest:media-type=""/>
> <manifest:file-entry manifest:full-path="Configurations2/"
> manifest:media-type="application/vnd.sun.xml.ui.configuration"/>
> </manifest:manifest>
mimetype uzantısız dosyası dosya
tipini tutmaktadır.
Kod:
application/vnd.oasis.opendocument.text
Bu dosyanın opendocument.text /odt
olduğu buradan anlaşılmaktadır.
meta.xml dosyasında inkar
edemeyeceğiniz imzalar bulunmaktadır.
Temel olarak birilerine
gönderdiğinizde dökümanın sizi ele
veren kısmıdır
Content.xml ise asıl içeriğimizi
taşımaktadır.
bu bağlamda touch test.odt şeklinde
oluşturulmuş bir basit dosyanın neden
açılmayacağını anlamıştırsınız umarım.
Tersine bir işlem olarak, bu klasör
yapısına ve gerekli dosya
uyumluluklarına sahip bir dosya
çıktısı zipleyip basabiliyorsanız,
openoffice/libreoffice ile açılmaması
için bir sebep görünmemekte.
php ile odt basmak değil ama, bir ara
php ile EPUB dosyası export itmek için
uğraşmıştım. Öylece kala kaldı.
Şimdi ise [WebODT
projesi](https://github.com/NetAngels/django-webodt)
ile uğraşıyor, kimi özgür yazılım
sevenler.