Esta resposta passa em todos os testes, mas no fluxograma no seu documento de teste.
sudo apt-get install unoconv
doc2pdf respondus-docx-sample-file.docx
Por que isso é melhor do que outros métodos sugerem até agora?
Eu testei os outros métodos sugeridos até agora (especialmente oowriter
e ebook-convert
), mas eles passam menos testes do que esse método. O método ebook-convert
retira as margens e uma parte dos textos do documento.
Este método produz até melhores resultados do que um conversor profissional como rainbowpdf .
Eu também tentei convertê-lo para html, mas o desenho com o quadrado no círculo e o fluxograma estão incorretos.
Por que o teste do fluxograma falha?
Parece que o libreoffice e o unoconv têm alguns problemas com a renderização correta do fluxograma que está no arquivo .docx. Isto é provavelmente porque foi feito usando smart art no Microsoft Office. Esse é o problema. Isso é um bug também discutido em esta discussão . A informação textual e visual está presente no pdf resultante do método acima, como você pode ver (eu tive que selecionar o texto, no entanto).
A cor da fonte, por exemplo, não é lida corretamente e algumas linhas são muito longas. Não tenho conhecimento de nenhuma solução do Linux que seja capaz de exibir a arte inteligente corretamente. :(
Esta é também a razão pela qual todas as soluções de print
postadas nesta página não irão satisfazê-lo.
Em suma
Em suma, o que você está fazendo é realmente difícil e não há soluções que satisfaçam você. O calcanhar de Aquiles das conversões docx2pdf é a arte inteligente. Se você pode viver sem isso ou se puder encontrar uma maneira de identificar a arte inteligente e convertê-la de alguma forma em uma imagem, poderá alcançar sua meta.
Opção 1. Forçar seus usuários a lidar com o problema
Esta é uma solução muito deselegante. Seus criadores de conteúdo poderiam salvar suas artes inteligentes como jpg, conforme descrito no páginas de ajuda do escritório e, portanto, a conversão seria possível no seu servidor.
Opção 2. Abra seu caminho em torno do problema
Se os fluxogramas costumam ser muito semelhantes e dependendo de quão bom você é um desenvolvedor, você pode tentar converter a arte inteligente separadamente. Você pode extrair o arquivo drawing1.xml do cluster de documentos .docx e, em seguida, usar o processamento de linguagem natural e alguns hacks malucos para reconstruir uma arte inteligente. Por exemplo, você teria que mexer com esse tipo de xml:
<dsp:txBody>
<a:bodyPr spcFirstLastPara="0" vert="horz" wrap="square" lIns="8255" tIns="8255" rIns="8255" bIns="8255" numCol="1" spcCol="1270" anchor="ctr" anchorCtr="0">
<a:noAutofit/>
</a:bodyPr>
<a:lstStyle/>
<a:p>
<a:pPr lvl="0" algn="ctr" defTabSz="577850">
<a:lnSpc><a:spcPct val="90000"/>
</a:lnSpc>
<a:spcBef>
<a:spcPct val="0"/>
</a:spcBef>
<a:spcAft>
<a:spcPct val="35000"/>
</a:spcAft>
</a:pPr>
<a:r>
<a:rPr lang="en-US" sz="1300" b="1" kern="1200"/>
<a:t>All three sides are different lengths
</a:t>
</a:r>
</a:p>
</dsp:txBody>
Ou como uma solução mínima, pelo menos extraia o texto ( <a:t>
?) do arquivo e salve-o de uma maneira mais fácil. Ou se os fluxogramas dos seus pdfs forem todos iguais, você pode escrever um script para alterar a cor do texto e o comprimento da linha no próprio xml. Então você poderia executar doc2pdf
e você teria um arquivo que essencialmente tem todas as informações corretas, mas talvez não a formatação. No caso dos fluxogramas, você provavelmente também incluiria parte da formatação, porque a formatação é parte da informação.
Opção 3. Use um serviço de terceiros
Eu fiz mais pesquisas nos últimos dias e encontrei um serviço que faz a conversão perfeitamente: zamzar . O Zamzar permite que você faça upload de um arquivo docx e, em seguida, envia um link para você por e-mail. Eles também têm um serviço (pago?) Onde você pode enviar qualquer arquivo para [email protected] e, em seguida, obter o arquivo convertido de volta em sua caixa de entrada. Você poderia facilmente construir um sistema em torno disso, onde você envia automaticamente o arquivo e analisa-o a partir do e-mail. Isso não é muito trabalho e o resultado final é o melhor.
Notas
- Se alguém tiver outros serviços que façam o mesmo, sinta-se à vontade para editá-los.
- Eu enviei o suporte do zamzar para perguntar se eles têm uma API. Isso seria ainda mais fácil.
- Talvez o aplicativo para .NET e Java também possa ajudar ? Ou docx4java como em este post SO muito relacionado .
- Outra opção é olhar para o odf-converter que parece datado e depende do openoffice em vez de libreoffice.
- Agora posso confirmar que o java jodconverter também sofre falha no fluxo conversão de gráficos.
Na verdade, aproveitei o tempo para testar os diferentes métodos propostos nesta página. Por favor, envie todos os comentários com testes reais.