Editare sau creare fișier DOC folosind PHP. E posibil?

Salutare!

Am tot bântuit netul, dar nu găsesc nimic care să mă ajute. Există vreo soluție să modific sau să creez un fișier .doc folosind PHP ?

Vorbesc de un fișier .doc, nu docx sau altele.

Vă rog să răspundeți doar dacă ați avut de-a face cu așa ceva.

Mulțumesc!

Nu am folosit, dar ăsta pare ce vrei tu:

edit: observ că nu știe de .doc iar la .docx are lacune. /edit

RDF s-ar putea să fie mai portabil decât doc. Primul are documentație deschisă, al doilea, din câte știu eu, nu are.


Crezi că vei găsi mulți programatori care să fi avut contact cu un format nefolosit deprecated de cel puțin zece ani? :slight_smile:

1 Like

Pentru fisierele .doc nu stiu alta solutie in afara de automation: https://www.gemboxsoftware.com/document/articles/c-sharp-microsoft-office-interop-word-automation

S-ar putea sa iti faci viata mai usoara daca reusesti sa convingi clientul sa instaleze Microsoft Office Compatibility Pack (care permite folosirea formatului .docx in versiunile mai vechi de Word) sau sa foloseasca si LibreOffice (gratuit inclusiv pentru uz comercial).

nu poti sa folosesti un document pe post de template ?

Eu am folosit PHPWord sa modific un template in care am pus variabile. Mai mult de atat nu am avut nevoie. A functionat ok pentru ce am avut nevoie.

Nu pare că se poate folosi template pentru doc. De aici pleacă și problema…

Ca template ma refer orice fisier .doc sau .docx in care pui variabile prin text de genul ${clientName} si apoi din php folosesti ceva de genul

$templateVar = new TemplateProcessor($file);
$templateVar->setValue('clientName', 'Clientul Meu SRL');

Știu despre ce vorbești, dar nu se poate face așa ceva cu fișierele .doc. Cu docx funcționează, dar nu cu .doc (adică cu ce am eu nevoie).

DOC ete un format propietar si pe deasupra este si binar. Ceea ce cam coplica treaba. Totusi poti converti doc la docx si da folosesti biblioteca postata sau alta.

Folosind biblioteca postata de @edu, am reusit sa convrtesc doc in docx. Dar are limitari, una din ele fiind ca documentul sa aiba maxim 20 de paragrafe.

using System;

using GemBox.Document;

namespace doc2docx
{
    class Program
    {
        static void Main(string[] args)
        {
            ComponentInfo.SetLicense("FREE-LIMITED-KEY"); //asta chair este cheia
            DocumentModel document = DocumentModel.Load("Lucrare_disertatie_17.06-duminica.doc");

            document.Save("demo.docx");
        }
    }
}

Daca documentul pe care vrei sa il editezi nu este mare, atunci poate ar merge cu acea biblioteca in versiunea free.

Insa este un un hack urat ca sa ii zic asa. Codul de mai sus poate fi transformat in executabil, iar aplicatia ta ar trebuie sa cheme acel executabil si sa ii dea calea catre fisierul doc. In plus, am scris acele linii sub Windows, deci nu stiu daca merge pe o distributie mai recenta de Linux.

Pe langa acsta biblioteca, se poate folosi si COM prin care te legi la Word. Dar cred ca acet lucru nu este portabil, intrucat com este pe Windows

Este posibil ceea ce ceri tu ?
In anumite limite da.

Cel mai bine convingi clientul sa foloeasc formatul docx si nu te mai complici.
Parerea mea.

Apropo, Word stie docx de la 2007 in sus.

Am incercat eu acum cu PHPWord.
Poti pune un template .docx si poti exporta in .doc
Cred ca poti folosi si template .doc

Suita PhpOffice merge super (noi o folosim pentru xlsx-uri) si e grozava.

Solutia cea mai sigura si care este 100% sigura ca o sa-ti mearga e sa ai o masina Windows cu word instalat pe ea si apoi sa folosesti un script de powershell sau ceva scris in C# sa poti sa folosesti Office.Interop.