Как конвертировать 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-файлов. Так что не хочу делать это вручную. Мне нужно автоматическое решение, подобное тому, которое я упомянул выше.

LanceBaynes
источник
1
Вы должны использовать for ONELINE in *вместо ls | while read ONELINE. Прочитайте это .
У меня недостаточно репутации, чтобы ответить, но я просто хочу добавить, что редактор Kate в KDE kubuntu можно распечатать на PDF-принтере, который позволяет выбрать имя файла и создает файл .pdf.
mathreadler

Ответы:

21

Одним из способов является использование CUPS и psuedo-принтера PDF для «печати» текста в файл PDF.

Другой способ - использовать enscript для кодирования в postscript, а затем конвертировать из postscript в PDF с помощью файла ps2pdf из пакета ghostscript.

Кит
источник
2
спасибо: pastebin.com/raw.php?i=XQnRjtnR
LanceBaynes
3
У кого-нибудь есть поддержка UTF-8 для enscript?
ЛэнсБэйнс
2
@LanceBaynes седиль или гном-u2ps или u2ps .
Жиль "ТАК - перестань быть злым"
34

Пандок может сделать это. Он больше ориентирован на преобразование размеченного текста в различные форматы, но у него не должно быть проблем с простым открытым текстом.

pandoc input.txt -o output.pdf
evilsoup
источник
3
Выглядит хорошо, но огромное количество зависимостей от haskell, которые хочет Пандок, напугало меня: /
lkraav
1
@Ikraav Да, это слишком излишне для этой цели, но если у вас есть уценка или HTML (или любая из других наценок, которые он может принять в качестве входных данных), то пандок был бы подходящим вариантом. Для PDF на самом деле требуется еще больше зависимостей - внутренне, pandoc использует LaTeX для преобразования в PDF, поэтому вам тоже нужно установить этот материал - но качество очень хорошее (я использую его для преобразования текста с уценкой в ​​PDF и EPUB, в первую очередь ).
evilsoup
pandoc (1.16.0.2) заменяет мои новые строки на вкладки.
Sparhawk
17

LibreOffice / OpenOffice, как и большинство других текстовых процессоров (Abiword), могут сделать это довольно легко.

Существует небольшая утилита, unoconvкоторая использует базу кода LibreOffice для преобразования форматов файлов в командной строке. Она может читать и писать любую комбинацию форматов , которые LibreOffice может и делает его очень легко сделать такие вещи , как docдля pdfпреобразования в командной строке. Простой txtв pdfбудет легко для него.

Калеб
источник
Интересно. Не знал unoconvи даже не знал, что у ОО были API.
Фахим Митха
Производит высококачественные результаты, но для меня (я использую версию 0.5-1 (Debian Wheezy)), я должен сначала выполнить unoconv --listener &команду.
Копатель
12

Вы можете распечатать текст в файл PostScript с помощью Vim, а затем преобразовать его в 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создает файл PostScript независимо от того, добавляю ли я расширения .pdf или .ps. Я сделал :hardcpy > example.pdfи с less example.pdfв оболочке я мог видеть, что заголовок файла был %!PS-Adobe-3.0.
Таро
@taro, ты прав. В то время, когда я писал это, я этого не замечал. Я обновил свой ответ. Последняя команда может быть улучшена, но я не могу написать это прямо сейчас. Могу сделать это позже.
Гонсалу Рибейро
10

Просто используйте text2pdf , который бесплатный и с открытым исходным кодом. По ссылке вы можете скачать исходный код или предварительно скомпилированный бинарный файл для windows, solaris, dos.

Я могу использовать его в ОС AIX без проблем. Очень просто скомпилировать, просто сохраните text2pdf.c и Makefile в одном каталоге и введите make. (здесь я установил переменную CC = gcc в AIX, в 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
ceinmart
источник
3
есть ли в этом возможность для utf8?
Вольфганг Фахл
7

Существует также конвертер UTF-8 в PostScript paps.

Тюнит
источник
3
Он работает и со шрифтами TrueType, но следует отметить, что в результате он создает документ с растровыми изображениями, а не использует шрифты изначально. (Я думаю, это из-за Postscript?)
njsg
Не удалось скомпилировать его на Cygwin32 в моем Windoze ...
texnezio
5

Используйте enscript для создания файла .ps, а затем ps2pdf (или ps2pdfwr) для преобразования в формат .pdf.

Следующий скрипт создает файл .pdf с полями по 10 пунктов слева и справа и использует курьерский шрифт шириной 7,3 пункта и высотой 10 пунктов, поэтому распечатка размером в 132 столбца помещается на странице размером 8 1/2 X 11. Используйте enscript для настройки вашей страницы, шрифтов и т. Д.

$ enscript -B --margins=10:10: -o outputfile.ps -f Courier@7.3/10 inputfile
$ ps2pdfwr outputfile.ps newfile.pdf
$ rm outputfile.ps
Дэн Уокер
источник
5
На заметку: enscript не поддерживает utf-8.
maxschlepzig
3

LibreOffice работает для этого. Использование:

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

Вывод будет вызван file.pdf.

jbrock
источник
Есть ли способ изменить размер шрифта в полученном PDF?
Евг
@Evg Я не знаю, как это сделать с помощью этого метода использования LibreOffice.
Джоброк