2015-01-02 1 views
0

Привет, я пытаюсь преобразовать pdf-книгу о программировании в формат mobi с помощью Caliber.Как подстроить все « t» (символы табуляции) с пробелом в PDF

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

Мне удалось с регулярным выражением правильно отступать от строк, где с отступом используются пробелы. Я сделал это, преобразуя каждые два пробела в два неразрывных пространства.

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

Я понял, что во время преобразования из pdf в mobi есть промежуточный шаг, на котором pdf преобразуется в hmtl, а также когда информация о табуляции теряется, потому что не генерируется специальный тег для переноса этой информации.

Поэтому я считаю, что лучшим решением является отредактирование самого самого PDF и замена всех символов табуляции (\ t) на два пробела (\ s \ s). Таким образом, регулярное выражение, упомянутое выше, будет работать для всех ссылок кода кода, и код будет правильно отступ.

, но я не знаю, какое программное обеспечение использовать, которое имеет эту функцию для замены элементов pdf.

ответ

2

Я сомневаюсь, что «вкладки» содержатся в PDF в виде вкладок. Символ «tab» (0x04 в ASCII) не имеет особого значения в PDF, и, в частности, он не перемещает текущую точку, он просто рисует глиф. В результате, если вы это сделаете (A \ tB), то, что вы увидите при рендеринге PDF, это «AB». Или 'A * B', где * - какой-то другой персонаж, которого вы не ожидали (часто квадрат)

Таким образом, вам, вероятно, на самом деле нужно будет преобразовать текущие операторы перемещения точки в рисунок пробела. Нет реалистичного способа, который может быть автоматизирован, так как ни один инструмент не может определить, где движение было «вкладкой» и где оно было изменено.

Поэтому вам нужно будет сделать это вручную.

Проблема заключается в том, что поток содержимого страницы, вероятно, будет сжат, поэтому первое, что вам нужно сделать, это распаковать PDF. Есть ряд инструментов, которые сделают это для вас, MuPDF - один, я думаю, что pdftk - это другое.

Затем вам нужно будет найти позицию, в которую вы хотите вставить пробел, это может быть сложной задачей, поскольку шрифт может быть перекодирован в нечто иное, чем ASCII, поэтому может быть трудно определить правильную позицию. Как только вы это сделаете, вы можете вставить пространство (и), которое вы хотите, в текстовые строки, снова имея в виду, что используемый шрифт может быть перекодирован и подмножество. Это означает, что пробел может не быть 0x20, и действительно, шрифт может даже не содержать пробел. И, конечно, вам нужно удалить операции, чтобы переместить текущую точку.

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

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

+0

Я думаю, что это более простой способ: .. .. У меня плохое знание о pdf в целом.Звучит ужасно модифицирующийся двоичный файл. Я думал, что существует программа для такого рода модификации автоматизации. Думаю, мне пришлось бы вручную отредактировать hmtl. Грустно, что он не может быть автоматизирован. Спасибо за просветление;) – cursez

Смежные вопросы