Как преобразовать TXT в PDF?

Вот a ".. шерсть собаки, которая укусила Вас" метод...
diff получил Вас к этой точке; используйте его для взятия Вас далее...

Вот вывод от использования демонстрационных пар строки... указывает на ВКЛАДКУ

Paris in the     spring 
Paris in the the spring 
             vvvv      ^

A ca t on a hot tin roof.
a cant on a hot  in roof 
║   v           ^       ^

the quikc brown box jupps ober the laze dogs 
The☻qui ckbrown fox jumps over the lazy dogs 
║  ║   ^ ║      ║     ║    ║          ║     ^

Вот сценарий.. Просто необходимо выведать пар строки так или иначе.. (Я использовал разность только однажды (дважды?) прежде сегодня, таким образом, я не знаю его многих опций, и разбирание в опциях для этого сценария было достаточно для меня, в течение одного дня :).. Я думаю, что это должно быть достаточно просто, но я подлежу перерыву на кофе....

#
# Name: hair-of-the-diff
# Note: This script hasn't been extensively tested, so beware the alpha bug :) 
#   
# Brief: Uses 'diff' to identify the differences between two lines of text
#        $1 is a filename of a file which contains line pairs to be processed
#
#        If $1 is null "", then the sample pairs are processed (see below: Paris in the spring 
#          
# ║ = changed character
# ^ = exists if first line, but not in second 
# v = exists if second line, but not in first

bname="$(basename "$0")"
workd="/tmp/$USER/$bname"; [[ ! -d "$workd" ]] && mkdir -p "$workd"

# Use $1 as the input file-name, else use this Test-data
# Note: this test loop expands \t \n etc ...(my editor auto converts \t to spaces) 
if [[ "$1" == '' ]] ;then
  ifile="$workd/ifile"
{ while IFS= read -r line ;do echo -e "$line" ;done <<EOF
Paris in the spring 
Paris in the the spring
A cat on a hot tin roof.
a cant on a hot in roof
the quikc brown box jupps ober the laze dogs 
The\tquickbrown fox jumps over the lazy dogs
EOF
} >"$ifile"
else
  ifile="$1"
fi
#
[[ -f "$ifile" ]] || { echo "ERROR: Input file NOT found:" ;echo "$ifile" ;exit 1 ; }
#  
# Check for balanced pairs of lines
ilct=$(<"$ifile" wc -l)
((ilct%2==0)) || { echo "ERROR: Uneven number of lines ($ilct) in the input." ;exit 2 ; }
#
ifs="$IFS" ;IFS=$'\n' ;set -f
ix=0 ;left=0 ;right=1
while IFS= read -r line ;do
  pair[ix]="$line" ;((ix++))
  if ((ix%2==0)) ;then
    # Change \x20 to \x02 to simplify parsing diff's output,
    #+   then change \x02 back to \x20 for the final output. 
    # Change \x09 to \x01 to simplify parsing diff's output, 
    #+   then change \x01 into ☻ U+263B (BLACK SMILING FACE) 
    #+   to the keep the final display columns in line. 
    #+   '☻' is hopefully unique and obvious enough (otherwise change it) 
    diff --text -yt -W 19  \
         <(echo "${pair[0]}" |sed -e "s/\x09/\x01/g" -e "s/\x20/\x02/g" -e "s/\(.\)/\1\n/g") \
         <(echo "${pair[1]}" |sed -e "s/\x09/\x01/g" -e "s/\x20/\x02/g" -e "s/\(.\)/\1\n/g") \
     |sed -e "s/\x01/☻/g" -e "s/\x02/ /g" \
     |sed -e "s/^\(.\) *\x3C$/\1 \x3C  /g" \
     |sed -n "s/\(.\) *\(.\) \(.\)$/\1\2\3/p" \
     >"$workd/out"
     # (gedit "$workd/out" &)
     <"$workd/out" sed -e "s/^\(.\)..$/\1/" |tr -d '\n' ;echo
     <"$workd/out" sed -e "s/^..\(.\)$/\1/" |tr -d '\n' ;echo
     <"$workd/out" sed -e "s/^.\(.\).$/\1/" -e "s/|/║/" -e "s/</^/" -e "s/>/v/" |tr -d '\n' ;echo
    echo
    ((ix=0))
  fi
done <"$ifile"
IFS="$ifs" ;set +f
exit
#
44
07.01.2017, 16:15
9 ответов

Один метод должен использовать CUPS и psuedo-принтер PDF, чтобы "распечатать" текст в файл PDF.

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

22
27.01.2020, 19:34

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

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

18
27.01.2020, 19:34
  • 1
    Интересный. Не знал о unoconv и даже не знал, что OO имело API. –  Faheem Mitha 28.07.2011, 16:45

Существует также UTF-8 к названному преобразователю PostScript paps.

7
27.01.2020, 19:34
  • 1
    Это работает, и со шрифтами TrueType, но нужно отметить, что это представляет документ с битовыми массивами в результате вместо того, чтобы использовать шрифты исходно. (Я предполагаю поэтому Постскриптума?) –  njsg 30.01.2013, 00:08
  • 2
    Не Мог скомпилировать его на Cygwin32 на моем Windoze... –  errekak 19.02.2016, 01:03

pandoc может сделать это. Это более фокусируется на преобразовании отмеченного текста к различным форматам, но это не должно иметь никаких проблем с простым простым текстом.

pandoc input.txt -o output.pdf
37
27.01.2020, 19:34
  • 1
    Выглядит хорошим, но значительная сумма haskell зависимостей pandoc хочет, испугал меня далеко:/ –  lkraav 28.06.2013, 14:46
  • 2
    @Ikraav да, это - путь излишество с этой целью, но если бы у Вас есть скидка с цены или HTML (или любая из других разметок, это может принять как вход), pandoc, был бы способ пойти. PDF на самом деле требует, чтобы еще больше зависимостей - внутренне, pandoc ЛАТЕКС использования преобразовало в PDF, таким образом, необходимо установить тот материал также - но качество очень хорошо (я использую его для преобразования markdown'd текста в PDF и EPUB, прежде всего). –  evilsoup 28.06.2013, 14:52
  • 3
    pandoc (1.16.0.2) замены мои новые строки с вкладками. –  Sparhawk 26.01.2016, 04:34

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

Я могу использовать его в AIX ОС без проблемы. Очень простой скомпилировать, просто сохраните text2pdf.c и Make-файл в тот же каталог и тип 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
9
27.01.2020, 19:34
  • 1
    является там utf8 способным ветвлением этого? –  Wolfgang Fahl 04.06.2015, 05:42

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

Следующий сценарий создает файл pdf с левыми и правыми полями на 10 ПБ и использует шрифт курьера, который является 7,3 pts широкими и 10 pts высоко, таким образом, 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
27.01.2020, 19:34
  • 1
    вещь отметить: enscript не поддерживает utf-8. –  maxschlepzig 16.08.2014, 16:51

Вы можете печатать текст в 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.

14
27.01.2020, 19:34

Так как он включен по умолчанию во многие дистрибутивы, более короткий способ вызова libreofficeиз cli:

soffice --convert-to pdf input.txt

Поддерживаемые расширения по soffice, мы можем конвертировать из/в:

ODF Spreadsheet                  .ods
ODF Spreadsheet Template         .ots
Flat XML ODF Spreadsheet         .fods
Unified Office Format Spreadsheet.uos
Microsoft Excel 2007-2013 XML    .xlsx
Microsoft Excel 2003 XML         .xml
Microsoft Excel 97-2003          .xls
Microsoft Excel 97-2003 Template .xlt
Data Interchange Format          .dif
dBase                            .dbf
HTML Document (Calc)             .html
SYLK                             .slk
Text CSV                         .csv
Office Open XML Spreadsheet      .xlsx
Microsoft Excel 2007-2016 XML    .xlsm
3
27.01.2020, 19:34

Я добавляю это a2psв качестве еще одной альтернативы. a2psсоздает файл postscript, который затем может быть преобразован в pdf с помощью ps2pdf. И a2ps, и ps2pdfдолжны быть в основном репозитории дистрибутивов Linux.

a2ps input.txt -o output.ps
ps2pdf output.ps output.pdf
1
19.12.2020, 12:55

Теги

Похожие вопросы