Converter docx para PDF

41

Estou tentando converter arquivos docx para pdf no meu servidor Ubuntu usando a linha de comando, mas nenhum dos conversores que tentei até agora parece converter arquivos do Word 2007/2010/2013 corretamente.

Aparentemente, os conversores on-line podem gerenciá-lo sem problemas, mas os serviços da Web não são uma opção porque os arquivos contêm dados confidenciais. Para testes, eu uso esse arquivo do Word 2007 porque contém alguns elementos importantes (fórmulas, gráficos vetoriais, imagens, listas etc.). Testei as seguintes ferramentas (em parte deste post ):

lowriter (LibreOffice Writer) - saída incorreta (o círculo deveria estar na última página, não na primeira)

insira a descrição da imagem aqui

unoconv- o mesmo que o LibreOffice, pois não usa seu próprio conversor. A conversão para odt primeiro e depois para pdf atrapalha completamente o arquivo.

abiword --to=pdf filename.doc - incorreto e incompleto (faltam muitos elementos):

insira a descrição da imagem aqui

OpenOffice Writer - mesmo resultado que o abiword

wvPDF - trava com a seguinte mensagem de erro:

~ $ wvPDF 2007_Office_DocEncryption.docx test.pdf

Diretório atual: / home / webmt / dev / test /

Algum problema ao executar o látex.

Verifique se há erros no test.log

Continuando...

Falha na conversão para dvi

Existe alguma maneira de converter arquivos docx para PDF no Linux corretamente? Também me ajudaria se eu soubesse que funciona para alguém com algum dos programas que eu já mencionei. Vou começar uma recompensa assim que a SE me permitir.

ps Estou usando o servidor Ubuntu 12.04


Conclusão :

Eu tive que concluir que, para mim, por enquanto, não existe uma ferramenta confiável que funcione com os novos formatos do MS Word e todos os tipos de elementos no Ubuntu e crie uma cópia individual dos arquivos docx. Nenhuma das ferramentas que testei conseguiu converter o arquivo de amostra corretamente. Como enfrentarei tipos muito diferentes de versões / conteúdos de documentos e a qualidade da saída tem uma das maiores prioridades, terminarei realizando as conversões por meio de macros VB no Word em um servidor Windows conectado ao meu Linux.

Definirei o post com os melhores resultados como resposta aceita. No entanto, a recompensa destinava-se a uma solução com conversão absolutamente correta. Obrigado a todos, novamente.

Jule cético
fonte
3
deu uma chance ao látex?
Braiam
@ScepticalJule, Sim, existe um problema no final. Eu apenas olhei para a primeira página.
11
@Braiam Você poderia soltar um link para converter com látex?
Céptico Jule
2
@ScepticalJule Acho que Braiam quis dizer que você deveria tentar escrever seu documento em látex imediatamente. Conversões de docx para látex são muito mais dolorosas do que conversões de docx para pdf. Você pode tentar fazer a conversão de docx para doc e depois de doc para pdf. Mas você teria que encontrar uma ferramenta independente de LO para fazer isso. Deixe-me saber se posso ajudar de outra maneira e se minha resposta ajudou você.
don.joey

Respostas:

58

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 oowritere ebook-convert), mas eles passam menos testes que esse método. O ebook-convertmé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).

O fluxograma que não é exibido completamente conforme o esperado.

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 printsoluçõ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 doc2pdfe 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 [email protected] 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.

don.joey
fonte
11
Recebi notícias do zamzar: "No momento, temos uma API que esperamos lançar na versão beta nos próximos meses - poderíamos adicionar você à versão beta, se isso interessasse?" Eles também mencionaram que seu sistema de conversão é algo que eles desenvolveram internamente.
don.joey
@jasonplutext Concordo com os revisores de que sua edição não foi útil. Como autor do plutext (eu acho?), Sugiro que você adicione uma resposta sua com um aviso de isenção informando sua afiliação. Obrigado.
Don.joey 3/17
Alguma atualização nos últimos dois anos?
Becko
@ Becko eu não segui-lo. Talvez definir uma recompensa para outra pessoa?
don.joey
Nota do futuro: o uso adequado nas versões recentes do lowriteré agora lowriter --convert-to pdf input_file.docx. O uso --pt pdffalhará silenciosamente.
ACK_stoverflow 15/03
6

Esta é uma solução de linha de comando que funciona decentemente --- mas usa software proprietário.

Penso que o problema básico é que os formatos do Microsoft Word são totalmente compreensíveis apenas para o Microsoft Word (mesmo que existam diferenças entre as versões - existem arquivos do Word do passado que são abertos incorretamente no formato das versões mais recentes). Todas as outras soluções são aproximações e hacks, para que funcionem ou não, dependendo do arquivo.

Portanto, para ter certeza de que você precisa processar seus arquivos .docx com uma instalação do Microsoft Word (e sim, acho que é a opção deles e justa). Se você não quiser usar o Word, não use - eu vou com LaTeX pelo meu trabalho, mas é difícil convencer o resto do mundo ao redor ...).

Estou usando, desde as idades, o Crossover para executar o Microsoft Office no meu Linux Desktop (1), achando bastante útil. Talvez também funcione com vinho - nunca tentei.

Eu faço a conversão usando esta configuração:

1) Eu tenho o Crossover instalado

2) Tenho minha versão do Microsoft Office instalada no Crossover

3) No Microsoft Word, desative a "impressão em segundo plano"

4) Eu tenho a cups-pdfimpressora instalada e selecionada como impressora padrão.

5) Para fazer a conversão, execute (dicas aqui ):

~/cxoffice/bin/wine --cx-app winword.exe respondus-docx-sample-file.docx /q /n /mFilePrintDefault /mFileExit

6) Seu arquivo convertido aparecerá no ~/PDF/diretório

O documento é publicado quase perfeitamente (há algum desalinhamento na resposta 2, mostrado no meu Office Word 2007 ao executar o Crossover - não sei se está relacionado à minha versão do Windows).

pagew 1-2

páginas 3-4

Agora, o problema é que a interface da palavra gráfica será exibida --- eu não sei como torná-la "decapitada". As opções de linha de comando do Word não ajudaram ...

(1) Não tenho relação alguma com os Codeveawers - apenas um usuário satisfeito.

Rmano
fonte
4

Eu também tive esse problema no passado, não tive que usá-lo recentemente, então não sei se ele ainda está me afetando.

Quanto a responder à pergunta:

Esta pergunta: Como converter em lote .doc ou .docx em .pdf fornece um motivo nos comentários por que sua conversão lowriterpode estar falhando:

Cuidado ao usar o caractere "espaço" na linha de comando ... Quando você chegar ao caractere espaço, basta pressionar "tab";) #: # Pitto Pitto

A resposta desta pergunta também pode ajudar:

Como posso converter um arquivo ODT para um PDF?

Você iria correr libreoffice --headless --convert-to pdf *.odt. Você pode obter mais informações sobre o libreoffice com o comando man libreofficese precisar de ajuda para entender ou ajustar o comando para funcionar.

No entanto, você não pode ter o LibreOffice aberto no momento, conforme este bug: https://bugs.freedesktop.org/show_bug.cgi?id=37531


Esta questão também está relacionada ao Ubuntu, embora esteja no SuperUser: https://superuser.com/questions/156189/how-to-convert-word-doc-to-pdf-in-linux

A primeira resposta tem duas opções, uma usando o CUPS e criando uma impressora PDF, a outra usando o LaTex, embora você tenha dito que o LaTex estava falhando.

Quanto à conversão para PDF via CUPS PDF, você executaria sudo apt-get install cups-pdfseguido por oowriter -pt pdf your_word_file.doc(x). Isso pode ajudar com seu problema de autor.

Provavelmente, esse é um problema com o fato de você estar tentando converter para PDF a partir do DOC / DOCX, quando a maioria das ferramentas usa ODT, pois estão relacionadas ao LibreOffice / OpenOffice / AbiWord. Assim, eles falham ao tentar convertê-lo do formato Microsofts DOCX ou na conversão para ODT.

Existem vários erros com uma conversão de .docx w. Word Art (a versão está incluída):

Isso é do fórum do LibreOffice referente à conversão de .doc e um pouco de .docx: http://en.libreofficeforum.org/node/5096 . É a partir de janeiro de 2013, então deve aplicar um pouco.

Além de tudo isso, eu realmente não sei. Espero que você resolva seu problema!

RPiAwesomeness
fonte
Desculpe, mas nenhuma das ferramentas sugeridas pode fazer uma conversão limpa.
Skeptical Jule
2

Se você possui o Libreoffice instalado, pode tentar converter usando isso. Basta pressionar Ctrl+ Alt+ Tno teclado para abrir o Terminal. Quando abrir, execute o (s) comando (s) abaixo:

libreoffice --headless -convert-to pdf <file_name>.docx -outdir output/path/for/pdf

Outra opção é instalar o Cups PDF .

Para fazer isso, basta pressionar Ctrl+ Alt+ Tno teclado para abrir o Terminal. Quando abrir, execute o (s) comando (s) abaixo:

sudo apt-get install cups-pdf

Em seguida, crie uma nova impressora, defina-a como uma impressora de arquivos PDF e nomeie como desejar, desde que você saiba o nome e execute:

oowriter -pt pdf your_word_file.docx

E seu arquivo PDF será no ~/PDF.

Mitch
fonte
11
Não teve nenhum sucesso com isso.
Skeptical Jule
Isso pode responder por quê.
Skeptical Jule
Agradeço a sua resposta, ele faz muito sentido, mas eu estou surpreso que a impressão não funcionou, uma vez que, como a impressão em papel ... :)
Mitch
O principal problema é que o LibreOffice nem consegue abrir e exibir o documento corretamente. Consequentemente, a saída também está incorreta. Funcionou no seu Linux?
Skeptical Jule
É bom saber disso. Uso o office apenas para documentos básicos, não há necessidade de algo mais complexo, mas, quando isso acontecer, terei certeza e me referirei a isso. Obrigado pela ótima pergunta, e com certeza vou adicioná-la como favorita para referência futura. Manterei essa resposta e os comentários como referência para outros usuários verem.
Mitch
2

Aqui está a verdade amarga: as soluções do Office para Linux são falhas totais! Sou usuário em tempo integral do GNU / Linux há muitos anos e sempre procurei e tentei diferentes soluções de escritório, desde o antigo Open-Office até o Libre-Office, Abi-Word, etc. todos falharam em me ajudar a trabalhar no meu escritório. Ainda piora quando se trata de idiomas não latinos (idiomas da direita para a esquerda, como persa, árabe, etc.). O usuário precisa lutar com esses softwares para realizar seu trabalho! E a compatibilidade do Microsoft Office simplesmente não está lá. Posso falar horas e horas do quanto tentei e todas elas falharam comigo, mas esse não é o objetivo desta pergunta.

Também tentei instalar e executar o Microsoft Office usando o WINE, e de alguma forma bem-sucedido, mas não funcionou bem e travou principalmente quando tentei abrir os arquivos do meu escritório.

O LaTeX está bem, mas não é uma solução de escritório. O LaTeX é para definição de tipo, e é mais como uma ferramenta profissional, e não há planilhas nem apresentações.

Então, qual é a solução?

Esta não é uma solução de linha de comando. A única solução que encontrei em todos esses anos, para me manter dentro do meu sistema operacional GNU / Linux e também fazer meus trabalhos de escritório, é usar uma instalação mínima do Microsoft Windows em uma máquina virtual (como o VirtualBox) e instalar um terno do Microsoft Office.

insira a descrição da imagem aqui

Pode não parecer bonito, mas é a única solução que funciona perfeitamente e me impede de lutar com soluções ruins para o escritório no meu precioso tempo. No começo, eu mesmo pensei que essa não era uma boa solução, mas depois de falhar com todos os outros e fazer essas coisas de VM por mais de 2 anos, estou muito feliz com isso :)

==================================================== ==============================

NOTA-1: Não estou anunciando produtos da Microsoft! Apenas tentando ajudar a resolver o problema e seguir em frente com a vida.

NOTA-2: Como enfatizado acima, essa NÃO é uma solução de linha de comando. Então, por que postar a resposta? Porque é uma opção testada e bem trabalhada! Se nenhuma solução de linha de comando WORKING estiver disponível (o que eu suspeito é o caso), ter uma opção ALTERNATIVA é melhor do que NÃO.

Seyed Mohammad
fonte
11
Por que apenas usar o MS word em winevez da máquina virtual?
totti 01/01
11
Como mencionei, minha experiência com a instalação e o uso do MS-Office usando WINEnão correu bem. O programa não funcionou como no Windows (mostrou um comportamento incorreto) e também travou muito!
Seyed Mohammad
3
Ainda ninguém votou ainda , mas a pergunta pede explicitamente uma solução de linha de comando . Isso não é inútil por causa da EM, é inútil porque ignora completamente a questão.
djeikyb
3
Seyed, observe que o OP está solicitando explicitamente uma solução de linha de comando que funcione em seu servidor Ubuntu (que provavelmente nem sequer possui uma GUI!). Sua resposta não é ruim, mas simplesmente não é relevante neste caso.
precisa saber é o seguinte
2
@ScepticalJule Ridiculous. Você coloca explicitamente uma recompensa em uma solução de linha de comando. Então você seleciona uma resposta que nem sequer é uma resposta para a pergunta. Você já estudou as outras respostas? Incluindo este e o meu?
don.joey
1

Aqui estão alguns aplicativos que você pode experimentar e verificar se eles funcionam com o FF Multi Converter ou o Kingsoft Office .

rstreeter78
fonte
FF Multi Converter instalado, executou o comando ... nada aconteceu. Kingsoft tem uma boa interface gráfica, mas não pôde abrir / mostrar o arquivo corretamente (as fórmulas estavam faltando mesmo depois que eu instalei as fontes necessárias. As letras no círculo também estavam faltando).
Céptico Jule
0

Instale o Calibre no Software Center ou Synaptic e defina a saída padrão para PDF.

Em um prompt de shell, execute

ebook-converter dummyfilename .docx .pdf -h

K7AAY
fonte
Isso corta o texto de alguma forma.
don.joey
Bater com ValueError: No plugin to handle input format: docx. O Google não ajudou em nada, então vou relatar um erro.
Skeptical Jule