Essa resposta é aprovada em todos os testes, mas no fluxograma do 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 que esse método. O ebook-convert
método retira as margens e uma parte dos textos do documento.
Este método ainda produz melhores resultados do que um conversor profissional como rainbowpdf .
Também tentei convertê-lo para html, mas o desenho com o quadrado no círculo e o fluxograma está incorreto.
Por que o teste do fluxograma falha?
Parece que o libreoffice e o unoconv têm alguns problemas ao renderizar corretamente o fluxograma que está no arquivo .docx. Provavelmente porque foi feito usando arte inteligente no Microsoft Office. Esse é o problema. Esse é um bug também discutido neste tópico . As informações textuais e visuais estão presentes no pdf resultante do método acima, como você pode ver (eu tive que selecionar o texto).
A cor da fonte, por exemplo, não é lida corretamente e algumas linhas são muito longas. Não conheço nenhuma solução linux capaz de exibir arte inteligente corretamente. :(
Essa também é a razão pela qual todas as print
soluções publicadas nesta página não o satisfarão.
Em resumo
Em resumo, o que você está fazendo é realmente difícil e, no momento, não há soluções que o satisfaçam totalmente. O calcanhar de Aquiles das conversões de docx2pdf é a arte inteligente. Se você puder viver sem isso ou se encontrar uma maneira de identificar arte inteligente e convertê-la de alguma forma em uma imagem, poderá alcançar seu objetivo.
Opção 1. Forçar seus usuários a lidar com o problema
Esta é uma solução muito deselegante. Os criadores de conteúdo podem salvar a arte inteligente como jpg, conforme descrito nas páginas de ajuda do escritório e, portanto, a conversão seria possível no seu servidor.
Opção 2. Desvie 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ê precisaria 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 solução mínima, você extrai pelo menos o texto ( <a:t>
?) Do arquivo e o salva de maneira mais fácil. Ou, se os fluxogramas dos seus PDFs forem iguais, você pode escrever um script para alterar a cor do texto e o comprimento da linha no próprio xml. Então você pode executar doc2pdf
e ter um arquivo que tenha essencialmente todas as informações corretas, mas talvez não a formatação. No caso de fluxogramas, você provavelmente também desejaria incluir parte da formatação, porque a formatação faz parte das informações.
Opção 3. Use um serviço de terceiros
Eu fiz mais algumas pesquisas nos últimos dias e encontrei um serviço que faz a conversão perfeitamente: zamzar . O Zamzar permite que você envie um arquivo docx e, em seguida, envie um link para você. Eles também têm um serviço (pagando?) Onde você pode enviar qualquer arquivo para pdf@zamzar.com e depois recuperar o arquivo convertido em sua caixa de entrada. Você pode criar facilmente um sistema em torno disso, para enviar o arquivo automaticamente e analisá-lo a partir do email. 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.
- Enviei um e-mail ao suporte do zamzar para perguntar se eles têm uma API. Isso seria ainda mais fácil.
- Talvez apose para .NET e Java também poderia ajudar? Ou docx4java como neste post SO muito relacionado .
- Outra opção é examinar o conversor odf, que parece datado e depende do openoffice em vez do libreoffice.
- Agora posso confirmar que o jodconverter java também sofre falha na conversão do fluxograma.
Na verdade, dediquei um tempo para testar os diferentes métodos propostos nesta página. Faça os comentários com os testes reais.