Делаем правильные русские PDF с помощью свободного софта: OO Writer, AbiWord, KOffice KWord, Scribus, PDFLaTeX + cmap

Обновление: попробовал KWord (мощно) и Scribus (так себе).

PDF с русским текстом оказывается можно сделать неправильно. Если русский будет находиться в PDF-файле в неправильной кодировке, то несмотря на то, что документ прекрасно отображается и печатается, с ним возникают следующие проблемы:

  • не работает поиск русских слов при просмотре документа;
  • нельзя скопировать текст через буфер обмена;
  • люди с ослабленным зрением не смогут использовать программы чтения текста;
  • быстро не посмотреть содержимое присланного документа в виде HTML при чтении почты в GMail;
  • русский текст в документе не индексируется поисковыми машинами в Сети.

Последний пункт наиболее важен при публикации документов в Сети: такой PDF сложно будет найти в Google.

Одним из преимуществ OpenOffice Writer перед MS Office Word является встроенная возможность экспорта в PDF. Причем Writer из OpenOffice 2 сохраняет русский правильно. Однако один и тот же шрифт по непонятной причине полностью внедряется в документ 2 раза и PDF-файл получается большой. Нет никаких опций экспорта в PDF.

Легковесный свободный текстовый процессор AbiWord версии 2.4 сохраняет русский в PDF некорректно. Кроме того, PDF-файл получается в 2,5 раза больше, чем при сохранении в OO Writer.

Программа вёрстки документов KWord из пакета KOffice под KDE (только для Linux) также умеет сохранять в PDF, выполняется через печать, отлично сохраняет русский. Имеет множество опций экспорта в PDF. Опция частичного внедрения шрифтов позволяет сохранять в PDF только используемую в документе часть шрифта. PDF-файлы получаются очень компактными — от 2Кб! Даже с полностью внедрённым шрифтом размер файла получается в 3 раза меньше чем у ОО Writer. KWord однозначно лучшая из рассмотренных программа для создания PDF. Уникальной особенностью KWord является возможность импортировать PDF-файлы для редактирования.

Scribus является свободным аналогом профессиональных программ для верстки PageMaker и Quark Express. По количеству опций экспорта в PDF превосходит KWord. Однако попытка вычесть неиспользуемые в документе символы из шрифтов не увенчалась успехом: шрифт не внедрился вообще и буквы сохранились в кривых. При полном внедрении шрифта в PDF их попадает целых 3 штуки, хотя в документе используется 1, размер файла сопоставим с OO Writer. Однако при копировании текста из PDF видим странную штуку: кодировка русского нормальная, но символы разряжены пробелами то там то сям. Видимо, пробелы используются для более точного позиционирования символов. Может это и важно для профессиональной подготовки документа в печать, но совершенно не годится для публикации в Сети или пересылки по email.

Подготовленные по шаблонам TeX документы выглядят очень красиво и профессионально с минимумом усилий на вёрстку за счёт разделения стиля и содержимого. Используется масса шрифтов и PDF-файл получается большим. Вопрос на $100. Единственный способ делать правильные PDF в TeX, который мне удалось освоить, заключается в использовании пакета cmap. А это автоматически означает что для создания PDF можно использовать только PDFLaTeX, но не dvitopdf. Это, в свою очередь, означает невозможность использования векторных рисунков в формате eps напрямую. Я нашел следующее решение...

В Debian cmap находится в пакете tetex-extra. Чтобы подключить cmap надо использовать в документе TeX заголовок следующего вида:

\RequirePackage{cmap}
\RequirePackage[cp1251]{inputenc}
\RequirePackage[TS1,T2A]{fontenc}
\RequirePackage[english,russian]{babel}

Причем именно в таком порядке: cmap первый. Иначе работать не будет!

Все. Теперь, если делать PDF с помощью PDFLaTeX, русский будет в порядке.

Если надо вставить график или схему в векторном формате, то теперь единственный вариант вместо eps использовать скрипты MetaPost или PSTricks, либо конвертировать eps в PDF. Я пошел по первому пути воспользовавшись тем, что мой рабочий редактор диаграмм Dia умеет экспортировать в MetaPost напрямую. Что делать с этим *.mp-файлом мне, избалованному удобством LaTeX-фронтэнда Kile пользователю, было решительно неясно. Не помогла и документация tetex на 50Мб. Повезло что удалось нагуглить страничку одного техасского парня, описывающего свой опыт использования подготовленной в свободных программах векторной графики в TeX.

Оказалось, надо откомпилировать mp-файл командой mpost example.mp, переименовать выходной файл (что-то типа example.1) в example.mps и вставить в документ следующим образом:

\begin{figure}[ht]
\centering
\includegraphics[width=150mm]{example.mps}
\caption{Подпись}
\label{fig:MyLabel}
\end{figure}

Если диаграмма содержала надписи на русском языке, то в PDF их не будет видно и потребуется следующее шаманство: открываем файл example.mp текстовым редактором, заменяем во всем документе {OT1} на {T2A}, вставляем в заголовок перед \begin{document} русифицирующее заклятие:

\RequirePackage[cp1251]{inputenc}
\RequirePackage[TS1,T2A]{fontenc}

Потом сохраняем файл в кодировке cp1251, и далее по схеме выше.

Пол дня жизни ушло на пробы и ошибки, во время эксперементов ни одного пингвина не пострадало. Все было проделано на свежей инсталляции Debian GNU/Linux 4.0 Etch. Причем все упомянутые программы находятся на 1-м DVD из 3-х DVD-дисков дистрибутива, за которые огромное спасибо Михаилу Коннику. Debian 4.0 Etch добавился в список свободного софта, которым я могу поделиться.

Блог: RU Linux

Спасибо за проделанную работу, сравнение и анализ. Полезная и лаконичная статья. Спасибо !

Для векторных рисунков можно использовать формат PDF напрямую :)
\begin{figure}
\includegraphics[width=0.8\textwidth]{fig.pdf}
\parbox[t]{0.9\textwidth}
{ \caption{Очень умная подпись.\label{figLabelForReference}}
}
\end{figure}

Соответствующая утилитка называется epstopdf, хотя программы типа xfig-а умеют напрямую в PDF экспортировать, рисунок на страничку.

а как насчет dvi->ps->pdf

Я не заядлый линуксоид, работаю под win32, MikTeX 2.7 MetaPost 1.005

В "METAPOST руководстве пользователя" (русский перевод) даны такие рекомендации.

Чтобы образовывался выходной файл-картинка с расширением *.mps, а не *.1 *.2 и т.д. нужно в исходном .mp-файле в начале добавить сроку filenametemplate "%j_%3c.mps"; Работает не во всех версиях.

А этой командой компилирую рисунки: mpost -tex=latex pictures.mp

Спасибо огромное! Очень помогли с подготовкой файлов из TeX для научной электронной библиотеки!

Бляха, а для нормальных людей - например девочек- гуманитариев нельзя как-то попроще объяснить че делась с текстом, если он из пдф копируется иероглифами???