Preciso transferir milhares de trechos de texto de PDFs para uma planilha. Eles são curtos, raramente têm mais de 2 a 3 linhas, mas cada quebra de linha cria uma nova célula, e tenho que consertar isso manualmente, o que custa muito tempo.
Como tenho muitos deles, usar a solução alternativa "colar no Word e localizar e substituir" é uma perda de tempo demais para mim. Existe uma maneira de fazer com que a quebra de linha desapareça na cópia? Talvez exista um visualizador que ofereça um modo de cópia especial para isso ou tenha um plugin?
Os documentos são artigos científicos. A disposição do texto é bastante linear. Você pode assumir que o texto que estou copiando não está dentro de uma tabela ou flutuante, nem girado nem nada. (Se isso acontecer, acho que vou lidar com isso manualmente). O texto é frequentemente definido em duas colunas, mas não tenho problemas em marcar apenas o texto necessário em sua coluna. Não preciso preservar nenhuma formatação especial. Estou disposto a tentar uma solução que remova todos os caracteres não imprimíveis, por exemplo. Os textos estão em inglês, não há problema se a solução funcionar apenas em ASCII/retirar todos os ASCII não alfanuméricos do texto copiado.
Tenho uma preferência muito forte por uma solução que funcione no Linux, possivelmente algum tipo de plugin do Okular. Mas se houver uma solução somente para Windows, também quero saber mais sobre ela. Eu tenho uma licença para um Acrobat Pro recente na máquina Windows.
Responder1
Eu tive um problema semelhante enquanto trabalhava em um script de conversão de texto em fala há algum tempo. Meu script tentaria dividir a entrada de texto em partes, procurando por novas linhas. Com arquivos PDF, isso resultaria em uma bagunça devido à forma como cada linha termina com uma nova linha.
Então, o que fiz foi compor alguns comandos sed
e tr
para considerar apenas as novas linhas que terminam com um ponto final como quebras de linha reais. Não foi muito bonito, mas funcionou.
Usando este trecho, escrevi um pequeno script para você que espero que ajude:
#!/bin/bash
# title: copy_without_linebreaks
# author: Glutanimate (github.com/glutanimate)
# license: MIT license
# Parses currently selected text and removes
# newlines that aren't preceded by a full stop
SelectedText="$(xsel)"
ModifiedText="$(echo "$SelectedText" | \
sed 's/\.$/.|/g' | sed 's/^\s*$/|/g' | tr '\n' ' ' | tr '|' '\n')"
# - first sed command: replace end-of-line full stops with '|' delimiter and keep original periods.
# - second sed command: replace empty lines with same delimiter (e.g.
# to separate text headings from text)
# - subsequent tr commands: remove existing newlines; replace delimiter with
# newlines
# This is less than elegant but it works.
echo "$ModifiedText" | xsel -bi
O script usa xsel
para analisar o texto atualmente destacado e, em seguida, modifica-o com a sed
linha tr
de comando que mencionei acima. O texto processado é então passado de volta para a área de transferência via xsel -bi
.
Veja como você pode usar o script em seu cenário:
- Certifique-se de ter
xsel
instalado (sudo apt-get install xsel
no (K) Ubuntu) - salve o script como
copy_without_linebreaks
ou algo semelhante e torne-o executável - atribua o script a uma tecla de atalho de sua escolha nas preferências do WM
- destaque algum texto e pressione a tecla de atalho
- A área de transferência deve ser preenchida automaticamente com o texto modificado
Responder2
Isso tem me incomodado há anos, então descobri uma solução geral (Windows) usandoTecla de atalho automático. Autohotkey é um software de script leve, gratuito e de código aberto para Windows para criar teclas de atalho para quase tudo que se possa imaginar.
Quando Ctrl+ cé pressionado, o código só é acionado se a janela ativa for um leitor de PDF, caso contrário, ele simplesmente copia a seleção fornecida normalmente. No caso de leitor de PDF, ele copia a seleção, remove quebras de linha e espaços duplos e coloca o resultado na área de transferência. Se nada for selecionado, a área de transferência ficará praticamente intacta.
#IfWinActive ahk_class classFoxitReader
^c::
old := ClipboardAll
clipboard := ""
send ^c
clipwait 0.1
if clipboard =
clipboard := old
else {
tmp := RegExReplace(clipboard, "(\S.*?)\R(.*?\S)", "$1 $2")
clipboard := tmp
StringReplace clipboard, clipboard, % " ", % " ", A
clipwait 0.1
}
old := ""
tmp := ""
return
A única tarefa antes de aplicar este código é o nome da classe da janela (ahk_class
) do seu leitor. Eu uso um único leitor de PDF para todos os casos (e presumo que a maioria das pessoas faça isso), o FoxitReader, e é ahk_class
o classFoxitReader
. Você pode descobrir facilmente a classe do seu próprio software peloWinGetClass
comando (por exemplo, AcrobatSDIWindow
para Acrobat Reader).
Se você prefere ler PDFs no seu navegador, esta não é a sua solução. Ou você pode simplesmente remover a #IfWinActive ahk_class classFoxitReader
linha para que o código sempre seja acionado, mas neste caso o resultado sempre será despojado de quebras de linha e espaços duplos.
Responder3
Outra coisa que funcionou para mim foi salvar o arquivo pdf como html. Os parágrafos do HTML permanecem intactos, prontos para serem copiados e colados. Outros formatos de arquivo também funcionam, como txt ou rtf... Isso também deve funcionar em sistemas Linux.
Responder4
Há uma solução do Windows mostradaaqui. É necessário baixar o arquivo "PDF Copy-Paster.exe" e executá-lo antes da ação copiar e colar. Eu experimentei e funciona muito bem, exceto que remove todas as quebras de linha. Portanto, se você copiar vários parágrafos, mais tarde terá apenas um.
Existe umpergunta relacionadano SU com uma pequena explicação, pode ser do interesse de alguém...