Estou exportando o conteúdo do MS Word para texto sem formatação para uso com os utilitários de texto e arquivo. Eu tenho uma restrição em que a linha numeração recurso tenha sido habilitado no software MS, e qualquer referência a números de linha no resultado final deve corresponder à numeração. Então digite "linhas numeradas":
( Poe, EA )
Obviamente, para o Word , esse tipo de numeração não quebra linhas na nova linha , quebra "linhas" após a margem direita (ou algo assim). Um script como docx2txt
, não explica isso por padrão, parece e quebra linhas na nova linha. Portanto, se eu usar grep -n
a numeração, as linhas não corresponderão ao recurso de números de linha de origem, conforme ilustrado acima. Não está exatamente claro na documentação como eu precisaria editar o script Perl para converter os arquivos da maneira que preciso neste caso:
our $config_newLine = "\n"; # Alternative is "\r\n".
our $config_lineWidth = 80; # Line width, used for short line justification.
Eu tentei substituir \n
para \r\n
, mas isso não parece trabalhar para mim. Por isso, comecei a exportar os documentos diretamente do Word com as seguintes configurações (salve como texto simples , na v.2013,64pc):
- Unicode (UTF-8)
- Inserir quebras de linha + linhas finais com (CR / LF)
- Permitir substituição de caracteres
E agora, de fato, quando eu uso os .txt
arquivos, há uma combinação perfeita entre os números de linha no recurso de numeração de origem e a grep -n
saída.
- Existe alguma configuração / processo específico que eu deva conhecer
docx2txt
ou um utilitário de linha de comando semelhante que me permita converter meus arquivos .docx em texto sem formatação, preservando as quebras de linha, sem recorrer ao Word como eu fiz? - Quais são as práticas recomendadas , se houver, para exportar documentos do MS Word (que podem conter caracteres acentuados) para texto sem formatação para uso com utilitários de arquivo / texto, com relação a quebras de linha e formatação; e existem implicações negativas nas configurações que escolhi para exportar, ou seja, inserir CR / LF?
Amostra
Como sugerido, forneço uma amostra. Neste arquivo rar , agrupei um arquivo .docx com parágrafos simples e seu arquivo .txt exportado usando o Word com as opções acima mencionadas. O último pode ser comparado com uma execução padrão docx2txt
no arquivo de origem.
fonte
Respostas:
docx2txt
trabalha com as informações nodocx
arquivo que é um conjunto compactado de arquivos XML.Com relação à quebra automática de linha, os
.docx
dados XML incluem apenas informações sobre parágrafos e interrupções, e não sobre interrupções. Quebras suaves são o resultado da renderização do texto em uma fonte, tamanho e largura de página específicos.docx2txt
normalmente, apenas tenta ajustar o texto em 80 colunas (80 colunas são configuráveis), sem considerar a fonte e o tamanho da fonte. Se você.docx
contém informações de fontes de um sistema Windows que não está disponível no Unix / Linux, a exportação para o.txt
Open / LibreOffice também dificilmente resultaria no mesmo layout, embora tente fazer um bom trabalho¹.Então,
docx2txt
ou qualquer outro utilitário de linha de comando, incluindo linha de comando impulsionada processamento Abrir / LibreOffice, vai não garantida converter o texto para o mesmo layout como a exportação de Word does².Se você deseja (ou é forçado pelos requisitos do cliente) a renderizar exatamente como o Word, existe na minha experiência apenas uma maneira: deixe o Word fazer a renderização. Quando me deparei com um problema semelhante ao seu³ e com resultados incompatíveis usando outras ferramentas, incluindo o OpenOffice, voltei a instalar uma VM do Windows no servidor Linux host. Na VM do cliente, um programa observa os arquivos recebidos a serem convertidos no host, o que iniciaria e conduziria o Word para fazer a conversão e, em seguida, copiaria novamente o resultado⁴.
As decisões sobre o uso apenas de CR / LF ou LF, ou UTF-8 ou alguma outra codificação
.txt
dependem amplamente de como os arquivos resultantes são usados. Se os arquivos resultantes forem usados no Windows, eu definitivamente utilizaria CR / LF, UTF-8 e uma UTF-8 BOM . Os programas modernos no Linux podem deduzir que um arquivo é UTF-8, mas não vomitam na BOM e / ou usam essas informações. Você deve testar todos os aplicativos de destino quanto à compatibilidade, se esses forem conhecidos antecipadamente.¹ Este tipo de incompatibilidade é o principal motivo alguns dos meus amigos não pode mudar para o Linux a partir do Windows, embora eles gostariam de. Eles precisam usar o MicroSoft Word, pois o Open / LibreOffice de vez em quando gerencia os textos que eles trocam com os clientes.
² Você pode instalar todas as fontes usadas nos arquivos do Word e pode ter sorte com alguns textos, algumas vezes.
³ Renderizando PDFs de
.doc/.docx
⁴ O programa usa a automação da GUI - como se alguém estivesse clicando em seus menus - e não tenta dirigir o Word por meio de uma API. Tenho certeza de que o último pode ser feito também e teria a vantagem de não quebrar as coisas se o Word fosse atualizado
fonte
vim
e pude ver que é tudo sobre xml - de fato, devo procurar mais. Não tinha pensado em fontes, ou talvez até hifenização. Também durante alguma operação, recebi uma mensagem de um editor de texto reclamando sobre a lista técnica, por isso vou ler o link (pois não sabia o que era). Fiquei surpreso com sua solução de VM! Eu estou um pouco familiarizado com a automação da GUI - vi que ela era usada para criar uma estação de trabalho após a replicação de uma imagem base; não pensar sobre isso ...grep
; se as linhas são longas, isso diminui a "precisão" na saída. Eu acho que as restrições variam de acordo com a natureza do conteúdo e como ele é usado. Por outro lado, essas perguntas não aconteceriam se os documentos não tivessem contado com o recurso de numeração do Word aqui. Construir uma estrutura de documentos para abranger material legado é um negócio sério. Felicidades!