Como converter TXT para PDF?

45

Eu quero converter .txtarquivos para .pdf. Estou usando isso:

ls | while read ONELINE; do convert -density 400 "$ONELINE" "$(echo "$ONELINE" | sed 's/.txt/.pdf/g')"; done

Mas isso produz um "erro" - se houver uma linha muito longa no arquivo de texto, ela não será quebrada.

Entrada de texto

Captura de tela do arquivo de entrada

PDF de saída

Captura de tela do PDF de saída

-

Além disso, também seria ótimo se o PDF de saída pudesse conter texto, em vez de imagens de texto.

Eu tenho muitos arquivos TXT. Portanto, não queira fazer isso manualmente. Preciso de uma solução automática, como a que mencionei acima.

LanceBaynes
fonte
1
Você deve usar em for ONELINE in *vez de ls | while read ONELINE. Leia isto .
Não tenho representante suficiente para responder, mas só quero acrescentar que o editor do Kate no KDE kubuntu pode ser impresso em "impressora" em PDF, que permite selecionar o nome do arquivo e produzir um arquivo .pdf.
mathreadler

Respostas:

21

Um método é usar o CUPS e a impressora psuedo-PDF para "imprimir" o texto em um arquivo PDF.

Outra é usar o enscript para codificar para postscript e depois converter de postscript para PDF usando o arquivo ps2pdf do pacote ghostscript.

Keith
fonte
2
graças .: pastebin.com/raw.php?i=XQnRjtnR
LanceBaynes
3
alguém tem suporte a UTF-8 para enscript?
LanceBaynes
2
@LanceBaynes Cedilla , ou gnome-u2ps ou u2ps .
Gilles 'SO- stop be evil'
34

O pandoc pode fazer isso. É mais focado na conversão de texto marcado para vários formatos, mas não deve ter problemas com texto simples.

pandoc input.txt -o output.pdf
evilsoup
fonte
3
Parece bom, mas a enorme quantidade de dependências Haskell desejos pandoc me assustou: /
lkraav
1
@Ikraav sim, é um exagero para esse propósito, mas se você tiver remarcações ou HTML (ou qualquer outra marcação que possa aceitar como entrada), o pandoc seria o caminho a seguir. Na verdade, o PDF requer ainda mais dependências - internamente, o pandoc usa o LaTeX para converter em PDF, então você também precisa instalar esse material - mas a qualidade é muito boa (eu o uso para converter texto de marcação para PDF e EPUB, principalmente )
evilsoup
O pandoc (1.16.0.2) substitui minhas novas linhas por guias.
Sparhawk 26/01
17

O LibreOffice / OpenOffice e a maioria dos outros processadores de texto (Abiword) podem fazer isso facilmente.

Existe um pequeno utilitário chamado unoconvque usa a base de código do LibreOffice para fazer conversões de formato de arquivo na linha de comando. Pode ler e escrever qualquer combinação de formatos que LibreOffice pode e faz com que seja muito fácil de fazer coisas como doca pdfconversões na linha de comando. Simples txtpara pdfseria fácil para ele.

Caleb
fonte
Interessante. Não sabia unoconve nem sabia que o OO tinha APIs.
Faheem Mitha
Produz resultados de alta qualidade, mas, para mim (estou usando a versão 0.5-1 (Debian Wheezy)), preciso primeiro executar um unoconv --listener &comando.
Digger
12

Você pode imprimir texto em um arquivo PostScript usando o Vim e depois convertê-lo em PDF, desde que o Vim tenha sido compilado com o +postscriptrecurso.

Para isso, você usa o :hardcopy > {filename}comando Por exemplo, você pode abrir example.txte executar

:hardcopy > example.ps

que produzirá um arquivo example.pscontendo todo o texto example.txt. O cabeçalho de cada página no arquivo PostScript conterá o nome do arquivo original e o número da página.

Em seguida, você pode converter o arquivo PostScript em PDF usando o seguinte comando

ps2pdf example.ps

o que criará example.pdf.

Você pode fazer o mesmo diretamente de um terminal (sem interagir com o Vim) usando o seguinte comando

vim example.txt -c "hardcopy > example.ps | q"; ps2pdf example.ps

Isso é aberto example.txtno Vim e executa o comando passado para a -copção, que neste caso é um hardcopycomando seguido por um qcomando quit ( ). Em seguida, ele é executado ps2pdfpara produzir o arquivo final.

Para mais opções, consulte os arquivos de ajuda com :help :hardcopy.

Gonçalo Ribeiro
fonte
:hardcopyproduz um arquivo PostScript, independentemente de eu adicionar extensões .pdf ou .ps. Eu fiz :hardcpy > example.pdfe com less example.pdfshell eu pude ver que o cabeçalho do arquivo era %!PS-Adobe-3.0.
Tar #
@taro, você está correto. Na época em que escrevi isso, não percebi isso. Eu atualizei minha resposta. O comando final pode ser aprimorado, mas não posso escrever isso agora. Pode fazer isso depois.
Gonçalo Ribeiro
10

Basta usar o text2pdf , que é gratuito e de código aberto. No link, você pode baixar o código-fonte ou o binário pré-compilado para windows, solaris, dos.

Consigo usá-lo no sistema operacional AIX sem problemas. Muito simples de compilar, basta salvar o text2pdf.c e o Makefile no mesmo diretório e tipo make. (aqui defino a variável CC = gcc no AIX, no Linux, isso não será um problema)

$ ./text2pdf  -h

text2pdf [options] [filename]

  text2pdf makes a 7-bit clean PDF file (version 1.1) from any input file.
  It reads from standard input or a named file, and writes the PDF file
  to standard output.

  There are various options as follows:

  -h            show this message
  -f<font>      use PostScript <font> (must be in standard 14, default: Courier)
  -I            use ISOLatin1Encoding
  -s<size>      use font at given pointsize (default 10)
  -v<dist>      use given line spacing (default 12 points)
  -l<lines>     lines per page (default 60, determined automatically
                if unspecified)
  -c<chars>     maximum characters per line (default 80)
  -t<spaces>    spaces per tab character (default 8)
  -F            ignore formfeed characters (^L)
  -A4           use A4 paper (default Letter)
  -A3           use A3 paper (default Letter)
  -x<width>     independent paper width in points
  -y<height>    independent paper height in points
  -2            format in 2 columns
  -L            landscape mode

  Note that where one variable is implied by two options, the second option
  takes precedence for that variable. (e.g. -A4 -y500)
  In landscape mode, page width and height are simply swapped over before
  formatting, no matter how or when they were defined.

text2pdf v1.1 (c) Phil Smith, 1996
$ ./text2pdf  -f"Courier" -s6 -c216 -v6 -L -A4 ./rep3.txt >rep3.pdf
ceinmart
fonte
3
existe um garfo utf8 capaz disso?
Wolfgang Fahl 4/15
7

Há também um conversor UTF-8 para PostScript chamado paps.

tunit
fonte
3
Funciona e com fontes TrueType, mas deve-se observar que, como resultado, produz um documento com bitmaps, em vez de usar as fontes nativamente. (Eu acho que é por causa de Postscript?)
njsg
Não foi possível compilá-lo em Cygwin32 no meu Windoze ...
texnezio
5

Use enscript para criar um arquivo .ps e depois ps2pdf (ou ps2pdfwr) para converter em .pdf

O script a seguir cria um arquivo .pdf com margens esquerda e direita de 10 pt e usa uma fonte de correio com 7,3 pts de largura e 10 pts de altura, para que uma impressão de 132 cores caiba em uma página de 8 1/2 X 11. Use enscript para configurar sua página, fontes, etc.

$ enscript -B --margins=10:10: -o outputfile.ps -f [email protected]/10 inputfile
$ ps2pdfwr outputfile.ps newfile.pdf
$ rm outputfile.ps
Dan Walker
fonte
5
Uma coisa a observar: enscript não suporta utf-8.
maxschlepzig
3

O LibreOffice trabalha para isso. Uso:

libreoffice --convert-to "pdf" file.txt

A saída será chamada file.pdf.

jbrock
fonte
Existe uma maneira de alterar o tamanho da fonte no PDF resultante?
Evg 20/06
@ Evg Eu não sei como fazer isso com esse método de usar o LibreOffice.
jbrock 20/06