¿Cómo convertir TXT a PDF?

45

Quiero convertir .txtarchivos a .pdf. Estoy usando esto:

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

Pero esto produce un "error": si hay una línea muy larga en el archivo de texto, no se ajusta.

Texto de entrada

Captura de pantalla del archivo de entrada

PDF de salida

Captura de pantalla del PDF de salida

-

Además, también sería genial si el PDF de salida pudiera contener texto, en lugar de imágenes de texto.

Tengo muchos, muchos, muchos archivos TXT. Así que no quiero hacerlo a mano. Necesito una solución automática, como la que mencioné anteriormente.

LanceBaynes
fuente
1
Deberías usar en for ONELINE in *lugar de ls | while read ONELINE. Leer este .
No tengo suficiente representante para responder, pero solo quiero agregar que el editor de Kate en KDE Kubuntu puede imprimirlo en una "impresora" PDF que le permite seleccionar el nombre de archivo y produce un .pdf.
mathreadler

Respuestas:

21

Un método es usar CUPS y la psuedo-impresora PDF para "imprimir" el texto en un archivo PDF.

Otra es usar enscript para codificar a postscript y luego convertir de postscript a PDF usando el archivo ps2pdf del paquete ghostscript.

Keith
fuente
2
gracias .: pastebin.com/raw.php?i=XQnRjtnR
LanceBaynes
3
¿Alguien tiene soporte UTF-8 para enscript?
LanceBaynes
2
@LanceBaynes Cedilla , o gnome-u2ps , o u2ps .
Gilles 'SO- deja de ser malvado'
34

Pandoc puede hacer esto. Está más enfocado en convertir texto marcado a varios formatos, pero no debería tener problemas con texto simple.

pandoc input.txt -o output.pdf
maldad
fuente
3
Se ve bien, pero la gran cantidad de dependencias haskell que Pandoc quiere me asustó: /
lkraav
1
@Ikraav sí, es demasiado exagerado para este propósito, pero si tiene una rebaja o HTML (o cualquiera de las otras marcas que puede aceptar como entrada), pandoc sería el camino a seguir. PDF realmente requiere aún más dependencias: internamente, Pandoc usa LaTeX para convertir a PDF, por lo que también necesita instalar esas cosas, pero la calidad es muy buena (lo uso para convertir texto marcado a PDF y EPUB, principalmente )
evilsoup
pandoc (1.16.0.2) reemplaza mis líneas nuevas con pestañas.
Sparhawk
17

LibreOffice / OpenOffice, así como la mayoría de los otros procesadores de texto (Abiword) pueden hacer esto con bastante facilidad.

Hay una pequeña utilidad llamada unoconvque usa la base de código de LibreOffice para hacer conversiones de formato de archivo en la línea de comando. Puede leer y escribir cualquier combinación de formatos que LibreOffice puede y hace que sea muy fácil de hacer las cosas como doca pdflas conversiones en la línea de comandos. Simple txta pdfsería fácil para él.

Caleb
fuente
Interesante. No sabía unoconvy ni siquiera sabía que OO tenía API.
Faheem Mitha
Produce resultados de alta calidad, pero, para mí (estoy usando la versión 0.5-1 (Debian Wheezy)), primero tengo que ejecutar un unoconv --listener &comando.
Excavador
12

Puede imprimir texto en un archivo PostScript con Vim y luego convertirlo a PDF, siempre que Vim se haya compilado con la +postscriptfunción.

Para esto usa el :hardcopy > {filename}comando. Por ejemplo, puedes abrir example.txty ejecutar

:hardcopy > example.ps

que producirá un archivo que example.pscontiene todo el texto example.txt. El encabezado de cada página en el archivo PostScript contendrá el nombre de archivo original y el número de página.

Luego puede convertir el archivo PostScript en un PDF utilizando el siguiente comando

ps2pdf example.ps

que va a crear example.pdf.

Puede hacer lo mismo directamente desde un terminal (sin interactuar con Vim) utilizando el siguiente comando

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

Esto se abre example.txten Vim y ejecuta el comando pasado a la -copción, que en este caso es un hardcopycomando seguido de un comando quit ( q). Luego se ejecuta ps2pdfpara producir el archivo final.

Para obtener más opciones, consulte los archivos de ayuda con :help :hardcopy.

Gonçalo Ribeiro
fuente
:hardcopyproduce un archivo PostScript sin importar que agregue extensiones .pdf o .ps. Lo hice :hardcpy > example.pdfy con less example.pdfShell pude ver que el encabezado del archivo era %!PS-Adobe-3.0.
taro
@taro, tienes razón. Cuando escribí esto no me di cuenta de eso. Actualicé mi respuesta. El comando final podría mejorarse, pero no puedo escribir eso ahora. Podría hacerlo más tarde.
Gonçalo Ribeiro
10

Simplemente use el text2pdf , que es gratuito y de código abierto. En el enlace puede descargar la fuente o el binario precompilado para Windows, Solaris, DOS.

Puedo usarlo en AIX OS sin problema. Muy simple de compilar, simplemente guarde el text2pdf.c y Makefile en el mismo directorio y tipo make. (Aquí configuro la variable CC = gcc en AIX, en Linux esto no será un 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
fuente
3
¿Hay una bifurcación capaz de utf8 de esto?
Wolfgang Fahl
7

También hay un convertidor UTF-8 a PostScript llamado paps.

tunit
fuente
3
Funciona, y con las fuentes TrueType, pero debe tenerse en cuenta que produce un documento con mapas de bits como resultado, en lugar de usar las fuentes de forma nativa. (¿Supongo que es por PostScript?)
njsg
No se pudo compilar en Cygwin32 en mi Windoze ...
texnezio
5

Use enscript para crear un archivo .ps, y luego ps2pdf (o ps2pdfwr) para convertir a .pdf

El siguiente script crea un archivo .pdf con márgenes izquierdo y derecho de 10 puntos, y utiliza una fuente de mensajería que tiene 7.3 puntos de ancho y 10 puntos de alto, por lo que una impresión de 132 columnas cabe en una página de 8 1/2 X 11. Use enscript para configurar su página, fuentes, etc.

$ enscript -B --margins=10:10: -o outputfile.ps -f [email protected]/10 inputfile
$ ps2pdfwr outputfile.ps newfile.pdf
$ rm outputfile.ps
Dan Walker
fuente
55
Una cosa a tener en cuenta: enscript no es compatible con utf-8.
maxschlepzig
3

LibreOffice funciona para esto. Uso:

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

Se llamará a la salida file.pdf.

jbrock
fuente
¿Hay alguna forma de cambiar el tamaño de fuente en el PDF resultante?
Evg
@Evg No sé cómo hacerlo con este método de uso de LibreOffice.
jbrock