Comment convertir TXT en PDF?

45

Je veux convertir des .txtfichiers en .pdf. J'utilise ceci:

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

Mais cela produit une "erreur" - s'il y a une très longue ligne dans le fichier texte, elle n'est pas encapsulée.

Texte de saisie

Capture d'écran du fichier d'entrée

PDF de sortie

Capture d'écran de la sortie PDF

-

En outre, il serait également intéressant que le fichier PDF de sortie puisse contenir du texte, au lieu d’images de texte.

J'ai beaucoup, beaucoup de fichiers TXT. Donc, ne voulez pas le faire à la main. J'ai besoin d'une solution automatique, comme celle que j'ai mentionnée ci-dessus.

LanceBaynes
la source
1
Vous devriez utiliser for ONELINE in *au lieu de ls | while read ONELINE. Lisez ceci .
Je n'ai pas assez de représentants pour répondre, mais je veux juste ajouter que l'éditeur Kate dans KDE kubuntu vous permet d'imprimer au format PDF "imprimante", ce qui vous permet de sélectionner un nom de fichier et de générer un fichier .pdf.
Mathreadler

Réponses:

21

Une méthode consiste à utiliser CUPS et l’imprimante psuedo PDF pour "imprimer" le texte dans un fichier PDF.

Une autre consiste à utiliser enscript pour encoder en postscript, puis à convertir PDF en postscript en utilisant le fichier ps2pdf du paquet ghostscript.

Keith
la source
2
merci .: pastebin.com/raw.php?i=XQnRjtnR
LanceBaynes
3
Quelqu'un n'a-t-il pas le support UTF-8 pour enscript?
LanceBaynes
2
@LanceBaynes Cedilla ou gnome-u2ps , ou u2ps .
Gilles 'SO- arrête d'être méchant'
34

pandoc peut le faire. Il est plus axé sur la conversion de texte balisé en divers formats, mais le texte en clair ne devrait pas poser de problèmes.

pandoc input.txt -o output.pdf
maux de tête
la source
3
On dirait bien, mais la quantité massive de dépendances haskell que Pandoc veut me faire peur: /
lkraav
1
@Ikraav ouais, c'est exagéré à cet égard, mais si vous avez du balisage ou du HTML (ou n'importe lequel des autres annotations qu'il peut accepter en entrée), pandoc serait la solution. Le format PDF nécessite encore plus de dépendances - en interne, pandoc utilise LaTeX pour la conversion au format PDF, vous devez donc également l'installer - mais la qualité est très bonne (je l'utilise pour convertir le texte de Markdown en PDF et EPUB, principalement ).
Evilsoup
pandoc (1.16.0.2) remplace mes nouvelles lignes par des onglets.
Sparhawk
17

LibreOffice / OpenOffice ainsi que la plupart des autres traitements de texte (Abiword) peuvent le faire assez facilement.

Il existe un petit utilitaire appelé unoconvqui utilise la base de code LibreOffice pour effectuer des conversions de format de fichier sur la ligne de commande. Il peut lire et écrire n'importe quelle combinaison de formats que LibreOffice et rend très facile la réalisation de choses comme docles pdfconversions en ligne de commande. Simple txtà pdfserait facile pour cela.

Caleb
la source
Intéressant. Je ne savais pas et je ne savais unoconvmême pas que OO avait des API.
Faheem Mitha le
Produit des résultats de haute qualité, mais pour moi (j'utilise la version 0.5-1 (Debian Wheezy)), je dois d'abord exécuter une unoconv --listener &commande.
Digger
12

Vous pouvez imprimer du texte dans un fichier PostScript à l'aide de Vim, puis le convertir en PDF, tant que Vim a été compilé avec la +postscriptfonctionnalité.

Pour cela, vous utilisez la :hardcopy > {filename}commande. Par exemple, vous pouvez ouvrir example.txtet exécuter

:hardcopy > example.ps

qui produira un fichier example.pscontenant tout le texte dans example.txt. L'en-tête de chaque page du fichier PostScript contiendra le nom de fichier d'origine et le numéro de la page.

Ensuite, vous pouvez convertir le fichier PostScript en PDF en utilisant la commande suivante

ps2pdf example.ps

qui va créer example.pdf.

Vous pouvez faire la même chose directement depuis un terminal (sans interagir avec Vim) en utilisant la commande suivante

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

Cela s'ouvre example.txtdans Vim et exécute la commande transmise à l' -coption, qui est dans ce cas une hardcopycommande suivie d'une qcommande quit ( ). Ensuite, il s'exécute ps2pdfpour produire le fichier final.

Pour plus d'options, voir les fichiers d'aide avec :help :hardcopy.

Gonçalo Ribeiro
la source
:hardcopyproduit un fichier PostScript, peu importe que j'ajoute des extensions .pdf ou .ps. Je l'ai fait :hardcpy > example.pdfet avec less example.pdfdans shell je pouvais voir que l'en-tête de fichier était %!PS-Adobe-3.0.
taro
@taro, vous avez raison. Au moment où j'ai écrit cela, je ne l'avais pas remarqué. J'ai mis à jour ma réponse. La commande finale pourrait être améliorée, mais je ne peux pas l'écrire pour le moment. Peut-être le faire plus tard.
Gonçalo Ribeiro
10

Utilisez simplement le text2pdf , qui est gratuit et opensource. Sur le lien, vous pouvez télécharger le source ou le binaire précompilé pour windows, solaris, dos.

Je peux l’utiliser dans AIX OS sans problème. Très simple à compiler, il suffit de sauvegarder le fichier text2pdf.c et le fichier Makefile dans le même répertoire et de les saisir make. (ici je mets la variable CC = gcc sous AIX, sous linux cela ne posera pas de problème)

$ ./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
la source
3
y a-t-il un fork capable d'utf8?
Wolfgang Fahl
7

Il existe également un convertisseur UTF-8 en PostScript appelé paps.

tunit
la source
3
Cela fonctionne, et avec les polices TrueType, mais il convient de noter qu’il en résulte un document contenant des bitmaps, au lieu d’utiliser les polices de manière native. (Je suppose que c'est à cause de Postscript?)
mercredi
Impossible de le compiler sur Cygwin32 sur mon Windoze ...
texnezio
5

Utilisez enscript pour créer un fichier .ps, puis ps2pdf (ou ps2pdfwr) pour convertir en .pdf

Le script suivant crée un fichier .pdf avec des marges gauche et droite de 10 points, et utilise une police de messagerie de 7,3 points de large et de 10 points de hauteur; une impression de 132 colonnes convient donc à une page de 8 1/2 X 11. Utilisez enscript pour configurer votre page, vos polices, etc.

$ enscript -B --margins=10:10: -o outputfile.ps -f [email protected]/10 inputfile
$ ps2pdfwr outputfile.ps newfile.pdf
$ rm outputfile.ps
Dan Walker
la source
5
Une chose à noter: enscript ne supporte pas utf-8.
maxschlepzig
3

LibreOffice fonctionne pour cela. Usage:

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

La sortie sera appelée file.pdf.

jbrock
la source
Existe-t-il un moyen de changer la taille de la police dans le PDF résultant?
Evg
@Evg Je ne connais pas de moyen de le faire avec cette méthode d'utilisation de LibreOffice.
Jbrock