PHP bir MS Word dosyası yazma / okuma

13 Cevap php

Is it possible to read and write Word (2003 and 2007) files in PHP without using a COM object? I know that I can:

$file = fopen('c:\file.doc', 'w+');
fwrite($file, $text);
fclose();

ancak Word bir HTML dosyası değil, bir yerli. doc dosyası olarak okuyacaktır.

13 Cevap

Ikili Word belgelerini okuma DOC formatı için yayınlanan dosya biçimi özelliklerine göre bir ayrıştırıcı oluşturarak içerecektir. Ben bu gerçek uygulanabilir bir çözüm olduğunu düşünüyorum.

Word dosyalarını okuma ve yazma için Microsoft Office XML formats kullanabilirsiniz - Bu Word 2003 ve 2007 sürümü ile uyumludur. Okumak için Word belgeleri doğru biçimde (bu Word 2007, Word 2003 XML-Belge denir) kaydedilir sağlamak zorunda. Yazma için sadece açıkça mevcut XML şemasını takip etmek zorunda. Ben PHP Office belgeleri yazmak için bu biçimi hiç kullanmadım, ama ben (doğal XML elektronik tablosu 2003 olarak kaydedilmiş) bir Excel çalışma sayfasında okuma ve bir web sayfasında verileri görüntülemek için kullanıyorum. Dosyaları açıkça XML veri olduğu gibi gezinmek ve ihtiyacınız veri ayıklamak için nasıl anlamaya sorun yok.

Diğer seçenek - (açık XML dosya biçimleri Word 2003 yüklü değilse) bir Word 2007 tek seçenek - OpenXML için RESSORT olacaktır. databyss here DOCX dosya biçimi XML dosyaları dahil olan sadece bir ZIP arşivi işaret ettiği gibi. Orada bir sürü kaynak MSDN açık XML dosya biçimi ile ilgili üzerinde, böylece istediğiniz verileri okumak için nasıl anlamaya gerekir. Yazı çok daha karmaşık bence olacak - bu sadece yatırım olacak ne kadar zaman bağlıdır.

Perhaps you can have a look at PHPExcel hangi Excel 2007 dosyalarını yazmak ve açık XML standardını kullanarak Excel 2007 dosyalarını okuyabilecek bir kütüphanedir. Sen Açık XML Word belgelerini okuma ve yazmaya çalışırken çalışmanızın bir fikir alabilir.

Bu çalışır vs < office 2007 ve saf PHP, hiçbir COM bok, yine 2007 anlamaya çalışıyor

<?php



/*****************************************************************
This approach uses detection of NUL (chr(00)) and end line (chr(13))
to decide where the text is:
- divide the file contents up by chr(13)
- reject any slices containing a NUL
- stitch the rest together again
- clean up with a regular expression
*****************************************************************/

function parseWord($userDoc) 
{
    $fileHandle = fopen($userDoc, "r");
    $line = @fread($fileHandle, filesize($userDoc));   
    $lines = explode(chr(0x0D),$line);
    $outtext = "";
    foreach($lines as $thisline)
      {
        $pos = strpos($thisline, chr(0x00));
        if (($pos !== FALSE)||(strlen($thisline)==0))
          {
          } else {
            $outtext .= $thisline." ";
          }
      }
     $outtext = preg_replace("/[^a-zA-Z0-9\s\,\.\-\n\r\t@\/\_\(\)]/","",$outtext);
    return $outtext;
} 

$userDoc = "cv.doc";

$text = parseWord($userDoc);
echo $text;


?>

PHP yerli Word belgeleri okuma bilmem, ama PHP bir Word belgesini yazmak istiyorsanız, WordprocessingML (aka WordML) iyi bir çözüm olabilir. Yapmanız gereken tek şey doğru biçimde bir XML belge oluşturmak. Ben Word 2003 ve 2007 destekler WordML hem de inanıyorum.

Sen Antiword kullanabilirsiniz, Linux ve en popüler işletim sistemi için ücretsiz bir MS Word okuyucu.

$document_file = 'c:\file.doc';
$text_from_doc = shell_exec('/usr/local/bin/antiword '.$document_file);

Sadece kod güncelleme

<?php

/*****************************************************************
This approach uses detection of NUL (chr(00)) and end line (chr(13))
to decide where the text is:
- divide the file contents up by chr(13)
- reject any slices containing a NUL
- stitch the rest together again
- clean up with a regular expression
*****************************************************************/

function parseWord($userDoc) 
{
    $fileHandle = fopen($userDoc, "r");
    $word_text = @fread($fileHandle, filesize($userDoc));
    $line = "";
    $tam = filesize($userDoc);
    $nulos = 0;
    $caracteres = 0;
    for($i=1536; $i<$tam; $i++)
    {
        $line .= $word_text[$i];

        if( $word_text[$i] == 0)
        {
            $nulos++;
        }
        else
        {
            $nulos=0;
            $caracteres++;
        }

        if( $nulos>1996)
        {   
            break;  
        }
    }

    //echo $caracteres;

    $lines = explode(chr(0x0D),$line);
    //$outtext = "<pre>";

    $outtext = "";
    foreach($lines as $thisline)
    {
        $tam = strlen($thisline);
        if( !$tam )
        {
            continue;
        }

        $new_line = ""; 
        for($i=0; $i<$tam; $i++)
        {
            $onechar = $thisline[$i];
            if( $onechar > chr(240) )
            {
                continue;
            }

            if( $onechar >= chr(0x20) )
            {
                $caracteres++;
                $new_line .= $onechar;
            }

            if( $onechar == chr(0x14) )
            {
                $new_line .= "</a>";
            }

            if( $onechar == chr(0x07) )
            {
                $new_line .= "\t";
                if( isset($thisline[$i+1]) )
                {
                    if( $thisline[$i+1] == chr(0x07) )
                    {
                        $new_line .= "\n";
                    }
                }
            }
        }
        //troca por hiperlink
        $new_line = str_replace("HYPERLINK" ,"<a href=",$new_line); 
        $new_line = str_replace("\o" ,">",$new_line); 
        $new_line .= "\n";

        //link de imagens
        $new_line = str_replace("INCLUDEPICTURE" ,"<br><img src=",$new_line); 
        $new_line = str_replace("\*" ,"><br>",$new_line); 
        $new_line = str_replace("MERGEFORMATINET" ,"",$new_line); 


        $outtext .= nl2br($new_line);
    }

 return $outtext;
} 

$userDoc = "custo.doc";
$userDoc = "Cultura.doc";
$text = parseWord($userDoc);

echo $text;


?>

Çoğu muhtemelen COM olmadan Word belgelerini okumak mümkün olmayacaktır.

Yazı bu topic kaplıydı

www.phplivedocx.org ki her zaman Dosyalar aynı zamanda kullanımı için yeterli örnekler yok test için çevrimiçi olmanız gerekir anlamına gelen bir SOAP tabanlı bir hizmettir. Garip Ben onun bir SOAP tabanlı bir program (beni lanetledi!) ... Ben bir Linux sunucu üzerinde COM olmadan sadece mümkün değil, düşünmek ve sadece bir fikir olduğunu (ve ek olarak çok zend çerçeve gerektirir) sadece indirme 2 gün sonra bulundu PHP ayrıştırmak başka bir kullanışlı dosya doc dosyasını değiştirmek ...

2007 gibi de biraz karmaşık olabilir.

. Docx formatında biçimlendirme ve diğer şeyler için onları diğer dosyalar ile birkaç klasörler içeren bir zip dosyası.

. Zip bir. Docx dosyasını yeniden adlandırın ve ne demek istediğimi görürsünüz.

PHP zip dosyaları içinde çalışabilir Yani, doğru yolda olmalıdır.

phpLiveDocx Zend Framework bileşeni olan ve Linux, Windows ve Mac üzerinde PHP DOC ve DOCX dosyalarını okuyabilir ve yazabilir.

De proje web sitesine bakın:

http://www.phplivedocx.org

Bir XML standart beri Office 2007. Docx mümkün olmalıdır. Word 2003, büyük olasılıkla bu standartların çok büyük olduğundan, hatta artık MS tarafından yayınlanan standartlar ile, okumak için COM gerektirir. Ben henüz onları maç için yazılmış birçok kütüphaneler görmedim.

Ben sizin için kullanmak için gidiyoruz ne bilmiyorum, ama ben arama indeksleme için doktor desteği gereklidir.; Ne yaptım "catdoc" adlı küçük bir komut aracı kullanmak oldu; Dizine böylece bu düz metin Word belgesinin içeriğini aktarır. Biçimlendirmeyi tutmak ve malzeme gerekiyorsa bu aracı değildir.

. Rtf formatında amaçlar için çalışmak istiyorsunuz? . Rtf kolayca. Doc formatına ve çevrilebilir, ancak (gömülü kontrol komutları ile) düz metin olarak yazılır. Bu benim Word belgeleri ile benim uygulama entegre planı nasıl.

even i'm working on same kind of project [An Onlinw Word Processor]! But i've choosen c#.net and ASP.net. But through the survey i did; i got to know that

[Office için Visual Studio Araçları] Açık XML SDK ve VSTO kullanarak

biz kolayca bir word dosyası bunları işlemek ile çalışmak ve hatta böyle. pdf,. docx vb odt. gibi çeşitli biçimlerde içine farklı dahili dönüştürebilir.

So, goto msdn.microsoft.com and be thorough about the office development tab. Its the easiest way to do this as all functions we need to implement are already available in .net!!

U PHP ur proje yapmak istiyorum Ama, u Visual Studio bunu edebilirsiniz. Net PHP de. Net Uyumlu Dili biri olarak!