Pull to refresh

Comments 20

А можно ссылки на предыдущие посты серии разместить в конце?
Повесил в начале, ну и для удобства в конце.
Спасибо. Хорошие статьи!
Было бы интересно узнать про то как внедряются шрифты.
Замечательно — вы действительно разобрались, как устроен PDF.

Внесу свои пять копеек: когда мне приходилось решать эту задачу, я залез на nl3.php.net/manual/en/ref.pdf.php (выделение текста тоже только средствами PHP).

Там был код, который иногда работал, иногда нет. Потом выяснилось, что проблема была в том, что в стандарте так и не смогли договориться, как кодировать переносы строк — \n, \r или \r\n. В общем, я эту проблему поправил, и все заработало довольно прилично. Мой код — это последний комментарий на вышеуказанной странице.
Да более того, после stream вообще может и не быть пробелов или переводов строк, поэтому требуется ltrim потока. Обрезать пробельные символы справа нельзя — можно нарушить целостность сжатых данных, gzuncompress просто не сработает, ругнувшись на некорректные данные.
классная статья, но после нее я понял что формат pdf говно
нет ни красоты ни стиля
Зря Вы так о PDF. Этот формат претерпел уже 8 редакций (с 1.0 до 1.8), поддерживает возможность сохранения истории изменений и, вообще, часто является стандартом де-факто офисного документооборота. DOC разбирать сложнее. :)
Есть документы, в которые, к примеру, внедрены русские шрифты, осуществляющие трансформацию из символов английского алфавита в отображение русских букв.

Примеры вы хорошие подбираете :)
А статья супер: просто, четко и красиво изложено.
Спасибо за добрые слова. А про примеры — Тсс! :)
А можно будет в будущем сделать выковыривание не только текста, но и изображений?
Изображения? Что ж можно попробовать и изображения — это те же объекты с соответствующим типом сжатия. Погляжу на досуге.
Заранее большое спасибо! :)
восхитительно, спасибо, очень интересно.
а возможно ли сделать так, чтобы текст вытаскивался с форматированием, т.е. курсив / жирный и т.д.?
Форматирование на страницы/абзацы — это разбор индивидуального позиционирования символов и чтение дополнительных параметров вывода текста (вспомните TJ, Tj). Я оставил решение проблемы на читателя.

Начертание текста (полужирное, курсив или ещё воз и маленькая эффектов, что поддерживает PDF) — это к шрифтам. Выше по комментариям, я обещал поковырять PDF на предмет их чтения.

Ну и от себя — не ищите готовых решений. Тут уже придётся сесть за редактор кода и PDF с описанием формата. :)
да меня просто интересует конвертация из pdf в fb2 с поддержкой форматирования, поэтому я и заинтересовался :)
>for ($i =; $i < count($objects); $i++) {
поправьте
Спасибо. Нашёл это место в html-коде топика, там стоит $i = 0. Удивился (да, собственно, и не могло его там не быть — это же parse error). Будем считать, что НЛО утащило ноль. Ведь кому надо, уже давно скопировал код из исходника ;)
Огромное спасибо за статью. Хочу только внести некторые поправки
1) В функции getCharTransformations неправильно указаны регэкспы. Вместо
if (preg_match("#<([0-9a-f]{4})>\s+<([0-9a-f]{4})>\s+<([0-9a-f]{4})>#is", trim($current[$k]), $map)) { 

и
} elseif (preg_match("#<([0-9a-f]{4})>\s+<([0-9a-f]{4})>\s+\[(.*)\]#ismU", trim($current[$k]), $map)) { 

должно быть
if (preg_match("#<([0-9a-f]{1,4})>\s*<([0-9a-f]{1,4})>\s*<([0-9a-f]{1,4})>#is", trim($current[$k]), $map)) { 

и
} elseif (preg_match("#<([0-9a-f]{1,4})>\s*<([0-9a-f]{1,4})>\s*\[(.*)\]#ismU", trim($current[$k]), $map)) { 


Далее встречается plain-текст который требует трансформации. Поэтому заменил строки в функции getTextUsingTransformations

// либо в "чистую" строку, если была открыта круглая скобка. 
if ($isPlain) 
    $plain .= $c; 

на

// либо в "чистую" строку, если была открыта круглая скобка. 
if ($isPlain) {
    $key = sprintf("%04X", ord($c));
    if (isset($transformations[$key]))
        $c = html_entity_decode("&#x".$transformations[$key].";");
    $plain .= $c; 
}

насколько это правильно это отдельный вопрос.

А теперь вопрос — если в документе несколько таблиц преобразования, то как определить какую когда нужно использовать?
Sign up to leave a comment.

Articles