怎么把TXT转换成PDF?


45

我想将.txt文件转换为.pdf。我正在使用这个:

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

但这会产生一个“错误”-如果文本文件中有很长的一行,它不会被包裹。

输入文本

输入文件的屏幕截图

输出PDF

输出PDF的屏幕截图

-

同样,如果输出的PDF可以包含文本而不是文本图像,那也很好。

我有很多很多TXT文件。所以不想手工做。我需要一个自动解决方案,就像上面提到的那样。


1
您应该使用for ONELINE in *而不是ls | while read ONELINE。阅读

我没有足够的代表回答,但是我只想补充一下,您可以将KDE kubuntu中的Kate编辑器打印为PDF“打印机”,以便您选择文件名并生成一个.pdf。
mathreadler's

Answers:



34

Pandoc可以做到这一点。它更专注于将标记的文本转换为各种格式,但是使用简单的纯文本应该没有问题。

pandoc input.txt -o output.pdf

3
看起来不错,但是大量的haskell依赖项Pandoc想要吓我一跳:/
lkraav

1
@Ikraav是的,这对于此目的来说是过大了,但是如果您拥有markdown或HTML(或它可以接受作为输入的任何其他标记),那么pandoc就是您的选择。PDF实际上需要更多的依赖关系-在内部,pandoc使用LaTeX转换为PDF,因此您也需要安装这些东西-但质量非常好(我使用它将markdown文本转换为PDF和EPUB,主要是)。
evilsoup

pandoc(1.16.0.2)用制表符替换了换行符。
Sparhawk

17

LibreOffice / OpenOffice以及大多数其他文字处理器(Abiword)可以很容易地做到这一点。

有一个名为的小工具unoconv,它使用LibreOffice代码库在命令行上进行文件格式转换。它可以读取和写入的格式的LibreOffice可以任意组合,并使得它很容易做的事情一样doc,以pdf在命令行上的转换。简单txtpdf容易。


有趣。不知道unoconv,甚至不知道OO有API。
Faheem Mitha

产生高质量的结果,但是,对于我来说(我使用的是0.5-1版(Debian Wheezy)),我必须先运行一个unoconv --listener &命令。
Digger

12

您可以使用Vim将文本打印到PostScript文件,然后将其转换为PDF,只要Vim是使用该+postscript功能编译的。

为此,请使用:hardcopy > {filename}命令。例如,您可以打开example.txt并执行

:hardcopy > example.ps

这将产生一个文件,example.ps其中包含中的所有文本example.txt。PostScript文件中每个页面的标题将包含原始文件名和页面号。

然后,您可以使用以下命令将PostScript文件转换为PDF

ps2pdf example.ps

这将创建example.pdf

您可以使用以下命令直接在终端上执行相同操作(无需与Vim进行交互)

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

这将example.txt在Vim中打开并执行传递给该-c选项的命令,在这种情况下,该hardcopy命令是后跟quit(q)命令的命令。然后执行ps2pdf以生成最终文件。

有关更多选项,请使用帮助文件:help :hardcopy


:hardcopy无论我添加.pdf还是.ps扩展名,都将生成PostScript文件。我这样做了:hardcpy > example.pdfless example.pdf在shell中,我可以看到文件头是%!PS-Adobe-3.0
芋头

@taro,你是对的。在我写这篇文章的时候,我没有注意到。我更新了答案。最终的命令可以改进,但我现在无法编写。可能以后再做。
贡萨洛Ribeiro的

10

只需使用text2pdf,它是免费的开放源代码。在此链接中,您可以下载源代码或Windows,solaris,dos的预编译二进制文件。

我可以毫无问题地将其用于AIX OS。编译非常简单,只需将text2pdf.c和Makefile保存到同一目录并键入make。(在这里,我在AIX上设置了变量CC = gcc,在Linux上这不是问题)

$ ./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

3
是否有支持utf8的分叉?
Wolfgang Fahl 2015年

7

还有一个名为的UTF-8到PostScript转换器paps


3
它可以使用TrueType字体,但是应注意,它会生成带有位图的文档,而不是本地使用字体。(我猜那是因为后记?)
njsg 2013年

无法在我的Windoze上的Cygwin32上编译它…
texnezio

5

使用脚本创建一个.ps文件,然后使用ps2pdf(或ps2pdfwr)转换为.pdf

下面的脚本创建一个左右间距为10 pt的.pdf文件,并使用宽度为7.3 pt和高度为10 pt的信使字体,因此132 col的打印输出适合8 1/2 X 11的页面。使用脚本来设置页面,字体等。

$ enscript -B --margins=10:10: -o outputfile.ps -f Courier@7.3/10 inputfile
$ ps2pdfwr outputfile.ps newfile.pdf
$ rm outputfile.ps

5
注意事项:脚本不支持utf-8。
maxschlepzig 2014年

2

LibreOffice为此工作。用法:

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

输出将称为file.pdf


有没有办法更改生成的PDF中的字体大小?
6

@Evg我不知道使用这种使用LibreOffice的方法的方法。
jbrock
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.