Чем переконвертировать юникодный текстовый файл в ps или pfd?

Автор yura_n, 16 января 2013, 22:25:00

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

yura_n

Второй день пытаюсь найти разумный способ печати из Emacs. Если использовать стандартные способы, вроде M-x print-buffer, печать работает, но нет никакой возможности ее предпросмотра. При попытках использовать Postscript из Emacs (printing.el) есть предпросмотр, но вместо кириллицы отображаются вопросительные знаки. По этому вопросу очень много гуглил. Результата ноль. Нет не только информации, но даже и намеков на нее. Похоже что с юникодом это просто не работает. Тогда возникла идея найти сторонние утилиты, которые могли бы юникодную кириллицу, в текстовом файле, преобразовать в ps или pdf файл, реализуя таким образом preview. Какие программы можно использовать для такой цели?

Olej

Цитата: yura_n от 16 января 2013, 22:25:00
Тогда возникла идея найти сторонние утилиты, которые могли бы юникодную кириллицу, в текстовом файле, преобразовать в ps или pdf файл, реализуя таким образом preview. Какие программы можно использовать для такой цели?
1. "юникодной кириллицы"(с) в природе не бывает, бывает UTF-8
2. Open Office ?  ;)

yura_n

Цитата: Olej от 17 января 2013, 01:36:461. "юникодной кириллицы"(с) в природе не бывает, бывает UTF-8
Да ладно. UTF-8 - это юникодная кодировка, а кириллица - один из интернациональных наборов символов, который присутствует в том числе и в UTF-8. "Юникодная кириллица" - это всего лишь игра слов, хотя и технически не совсем правильная, но тем не менее понятная и не несет двусмысленности. Не придирайтесь к словам.
Цитировать
2. Open Office ?  ;)
Совместно с Emacs? :) Спасибо, но это несерьезно.

oneingray

Есть мнение, что plain text в PDF преобразовывать не нужно вовсе.

Если требуется получить именно кириллицу в PDF (PostScript), то можно воспользоваться, e.?g., enscript(1), предварительно приведя кодировку к одной из понимаемых оным командой iconv(1).?Ясно, что о разного рода «излишествах», навроде тех же кавычек-«елочек» (или, скажем, тире) придется забыть — заменить sed(1) на похожие, или же положиться на опцию -c команды iconv.

Кроме того, по-слухам, plain text можно «легко и просто» преобразовать в документ *roff.?(Который, в свою очередь, несложно сверстать в PDF.)?К сожалению, *roff (в отличие от, e.?g., XHTML) является языком программирования, а не языком разметки.?Количество возможных спец-последовательностей, требующих экранирования, следовательно, поистине неисчислимо...

yura_n

#4
oneingray спасибо за ответ!
Но я нашел относительно более простое решение. Установил виртуальный принтер cups-pdf, после чего перенаправил ему печать из Emacs-а вот таким вот незамысловатым способом:
(setq printer-name "cups-pdf")
Проблем с кириллицей не заметил. Для preview печати из Emacs-а, на мой взгляд, хватает. Решено.

oneingray

... Что как бы намекает на то, что «внутри» CUPS (или cups-pdf) находится код преобразования Unicode-текста в PDF.?(Возможно, через некоторое промежуточное представление.)

Такой код было бы интересно выделить в standalone-приложение...

corner

#6
Знаете, лет 10 назад это придумал какой-то Vincent Bernat   :)  :)
# aptitude install unoconv

Лучшая настольная книга Дебианщика - http://packages.debian.org/stable/

Сообщение объединено: 22 января 2013, 02:19:37

Еще есть обычная утилита groff, которая обычно входит в базовую систему.
Пример :
$ man ls > ls.txt
$ groff -T ps ls.txt > ls_postscript_file

На выходе  - постскрипт файл.
Но это только одна из возможностей...


yura_n

Цитата: corner от 22 января 2013, 01:16:26На выходе  - постскрипт файл.
Вы бы хоть проверяли, что-ли... Проблема была не с созданием PostScript файла, а с корректным отображением кириллицы в этом файле.

oneingray

Цитата: corner от 22 января 2013, 01:16:26Знаете, лет 10 назад это придумал какой-то Vincent Bernat   :)  :)
# aptitude install unoconv
... После чего обнаруживаем libreoffice-core в числе установленных пакетов, что отнюдь не всегда является desirable outcome.

Цитата: corner от 22 января 2013, 01:16:26Еще есть обычная утилита groff, которая обычно входит в базовую систему.

Пример:
$ man ls > ls.txt
$ groff -T ps ls.txt > ls_postscript_file

На выходе — постскрипт файл.
Можно сразу получить в результате PDF-документ (-T pdf; vs. PostScript-программу.)?Если, кроме того, учесть, что man сам по себе вызывает groff, можно сразу выполнить $ man -T pdf ...

Цитата: yura_nПроблема была не с созданием PostScript файла, а с корректным отображением кириллицы в этом файле.
Проблема с различными *roff (что я, справедливости ради, уже упоминал в обсуждении) — отнюдь не в том, что оные не поддерживают Unicode (напротив, в GNU Troff такая поддержка как раз имеется), а в том, что на входе ему требуется код — программа на его собственном языке.?И то, что в некоторых настройках (и для некоторых plain text) исходный текст переносится в PDF с «минимальными изменениями» — большого значения, на мой взгляд, не имеет.

oneingray

Цитата: oneingray от 22 января 2013, 00:22:41... Что как бы намекает на то, что «внутри» CUPS (или cups-pdf) находится код преобразования Unicode-текста в PDF.
... Искомый код обнаружился в пакете с говорящим названием cups-filters. Пример использования:$ date --help \
      | CHARSET=utf-8 /usr/lib/cups/filter/texttopdf \
            "" "" "" 1 "page-left=40, page-right=40, cpi=11" \
      > help.pdf


Преимущества данной реализации texttopdf: весьма скромные зависимости и (сравнительная) простота вызова из Shell-кода.

Два замечания:

  • в указанных настройках, ширина строки — 78 символов;
  • в качестве кодировки входного потока допускается только UTF-8.