Como converter Doc/Docx em um único arquivo XML automaticamente?

quando abre a palavra, ela permite-lhe gravar como palavra abrir o formato XML. Eu vi posts sobre abrir o arquivo docx como um zip e, em seguida, extrair coisas de lá. Mas o que eu realmente quero é uma maneira de transformar o docx em um único XML exatamente como ao fazer a ação "save as" no MS Office. O que fazer?

e como fazer isto para o .formato doc ?

Nota: eu gostaria de fazer isto programaticamente. De preferência em condições de desenvolvimento Linux com PHP. Mas se isso não está disponível, então outras línguas servem. Por último, se chegar a isso, posso considerar rodar um servidor do Windows para fazer isso.

Author: samxli, 2012-08-13

3 answers

Desculpa ressuscitar um fio morto, mas encontrei uma resposta para os ficheiros DOCX. Um arquivo DOCX é apenas um arquivo ZIP de arquivos XML. Então, para extrair o conteúdo de um dos seus arquivos, v.gr. word / document.xml sob um ambiente Linux, você tem que executar unzip:
unzip -q -c myfile.docx word/document.xml

Para apanhar o resultado deste comando na variável $ xml de um programa de PHP, pode emitir:

$xml = shell_exec ("unzip -q -c myfile.docx word/document.xml");
Espero que esta resposta ajude nos ficheiros DOCX. Mais vale tarde do que nunca.

Para os ficheiros DOC, isto o método não funciona.

 4
Author: Pierre François, 2018-02-20 20:10:42

Eric White explica como fazer isto para o docx em C# at transforming-open-xml-documents-to-flat-opc-format

Você também pode fazê-lo usando o docx4j (no qual eu trabalho), sendo o 'j' Java.

 2
Author: JasonPlutext, 2012-08-15 05:18:46

No Word: file / save as / Word XML Document (*.xml) dá-lhe o formato XML aberto que deseja, como um único ficheiro XML

Em código usando o Interop: use o método SaveAs do Document object, usando o WdSaveFormat.wdFormatXMLDocument como o formato de gravação. Você também deve usar o documento.Convert method to update the compatibility to the MS Office version installed.

Então, não necessariamente uma demonstração completa, mas isto deve dar-lhe a ideia certa:
ActiveDocument.Convert();

WdSaveFormat myNewSaveFormat = WdSaveFormat.wdFormatXMLDocument;
ActiveDocument.SaveAs(newFilePath, myNewSaveFormat); //where newFilePath can be a FileInfo object specifying the new file name and extension (docx)
 1
Author: JohnZaj, 2012-08-13 14:06:51