Текст в PDF превращается в бред по копированию, но отображается нормально

1762
coldbreeze16

Мы - небольшая группа, которая способствует распространению Unicode в Индии (здесь унаследованные кодировки глубоко укоренились). Но у меня есть проблема, когда я конвертирую документ в тексте в юникоде на любом индийском языке в формат PDF. Текст отображается так, как задумано, но при вставке копий содержимое частично становится бессмысленным.

Я использую inDesign CC для набора текста на Win 7. Я могу экспортировать в формат epub очень хорошо. Но у экспортированного PDF есть эта проблема. Я также пробовал печатать на принтере Adobe PDF и PrimoPDF, но стало только хуже. При проверке PDF-файлов в Интернете выясняется, что эта проблема существует во всех таких Unicode-кодированных Indic PDF (и, вероятно, во всех сложных сценариях Восточной Азии). Это проблема в спецификации PDF?

Проверьте PDF здесь http://www.rajbhasha.nic.in/pdf/dolebook-4.pdf

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

Теперь мы продвигаем Unicode на том основании, что это облегчит вставку копий и поиск / индексацию. Эта проблема полностью разрушает это. Есть идеи?

4
Я могу подтвердить, что копирование / вставка вашего документа на Mac также изменяет символы. Я не могу прочитать это, но есть несколько заметных различий. Это может указывать на то, что преобразование источника ошибочно. Может быть, посмотрите на [Caliber] (http://calibre-ebook.com) (бесплатное программное обеспечение), чтобы сделать преобразование вместо этого. Это может по крайней мере сказать вам, где проблема начинается. Tetsujin 7 лет назад 0
Может подтвердить проблему копирования / вставки в Linux с помощью `xpdf`. Я посмотрел на PDF с `mutool`, он использует специальные шрифты, которые не используют кодировку Unicode. Вам нужна другая программа для набора текста (вместо inDesign CC) и программа, которая создает PDF-файлы с кодировкой Unicode (нет, я не знаю какой-либо опции для Windows 7). [Этот вопрос] (http://stackoverflow.com/questions/128162/unicode-in-pdf) содержит технические подробности о юникоде в PDF, кажется возможным, но сделать его нелегко. dirkt 7 лет назад 0
Исправление: в примере PDF фактически используются сопоставления `/ ToUnicode`, но, похоже, по какой-то причине они не работают. Пока не знаю, что пойдет не так. dirkt 7 лет назад 0
Смотрите также: http://stackoverflow.com/questions/12703387/pdf-font-encoding-why-cant-i-copy-text-from-a-pdf grawity 7 лет назад 0
@Tetsujin: я пытался конвертировать полученный epub в pdf, используя различные инструменты, в том числе калибр. Проблема на самом деле обострилась. coldbreeze16 7 лет назад 0

1 ответ на вопрос

4
dirkt

Я распаковал PDF с mutool cleanи посмотрел на. Кажется, проблема в том, что, как описано в этом вопросе о стековом потоке, трудно использовать кодировку Unicode для шрифтов. По этой причине шрифты, содержащиеся в PDF, используют другую кодировку. Тем не менее, он также содержит /ToUnicodeобъекты для каждого шрифта со сложным отображением символов шрифта на символы Юникода.

Теперь многие программы просмотра PDF (например, xpdfв Linux), похоже, не обращают внимания на это сложное отображение (или, по крайней мере, на отображение с такой сложностью, хотя они могут работать на более простых отображениях), поэтому вы получаете мусор при попытке скопировать и вставить. Тем не менее, с другими программами просмотра PDF (как mupdf) это работает, как я подтвердил.

Таким образом, проблема находится в средстве просмотра PDF, а не в документе. Кроме того, PDF-файлы и Unicode не очень хорошо сочетаются друг с другом, как вы можете видеть из сложных средств, необходимых для перевода.

Возможные решения: (1) оказать давление на разработчиков средств просмотра PDF для полной поддержки \ToUnicodeотображений. Может быть, исправить их самостоятельно для открытых источников. (2) Способствовать использованию определенного средства просмотра PDF, которое работает с сопоставлениями. (3) Попробуйте использовать шрифты внутри PDF, где кодировка глифа соответствует кодировке Unicode. Это представляется возможным с 16-разрядными кодовыми точками Unicode (и насколько я могу судить, индийские символы кажутся 16-разрядными), но я не знаю, насколько хорошо это будет работать, или какое приложение вы должны использовать для создания таких PDF-файлов ,

This seems to be correct, because with different PDF readers I get different outputs on copying which is only possible if each one implemented the ToUnicode table interpretation differently. As for your proposed solutions, 1 and 2 are not feasible because people wont shift their OS and pdf reader just for this. And all pdf readers i've tested have problems (Adobe Acrobat, PDF X, Foxit, Google pdf viewer). As for 3, I didn't get it. This document uses standard Unicode Hindi font Mangal supplied with Win Vista and above. coldbreeze16 7 лет назад 0
[Mupdf] (http://mupdf.com/) также работает в Windows, так что вы можете попробовать это тоже. qpdfview на Linux также работает. Я попытаюсь создать файл примера для (3), чтобы увидеть, работает ли он даже без таблиц ToUnicode, но это может занять некоторое время. dirkt 7 лет назад 0
Похоже, что `xpdf` просто игнорирует любые« сложные »символы, кроме ASCII для вырезания и вставки, в то время как` mupdf` производит вставку в кодировке UTF8. Это означает, что я не могу правильно протестировать здесь на Linux. Я создал распакованный [PDF-файл] (https://www.dropbox.com/s/h28u9yrth85xta2/indian.pdf?dl=0) с xetex, который не так сложен, как ваш пример. Вы можете проверить это с помощью текстового редактора. Глифы находятся в диапазоне 0200-0400, соответствующий юникод - 09xx. Протестируйте свои средства просмотра с ним, если вы можете вставить символы Юникода в диапазоне 0200-0400, создание специального шрифта должно работать с этим средством просмотра. dirkt 7 лет назад 0
Я был вдали от дома, только что вернулся и протестировал mupdf на Win 7 и Ubuntu 14.04. Та же проблема сохраняется при копировании. Я не уверен, что я делаю неправильно. Я попробовал ваш PDF на всех своих зрителях. Неудачно. coldbreeze16 7 лет назад 0
Да. Я нахожусь на Debian, который очень близок к Ubuntu, и mupdf работает нормально (кнопка shift-right для выбора). Где ты это вставил? Можете ли вы сделать `xclip -o | hexdump -C` из командной строки на выбор и опубликовать результаты? (Пакеты `xclip`,` bsdmainutils`, если не установлены). Кроме того, можете ли вы опубликовать, какие именно результаты для моего PDF с различными зрителями? Помогает такой инструмент, как [внутри буфера обмена] (http://www.nirsoft.net/utils/inside_clipboard.html), IIRC также показывает hex. dirkt 7 лет назад 0
Для сравнения: я получаю, например, `e0 a4 b8 e0 a4 82 e0 a4 83 e0 a4 95`, так выглядит кодированный в UTF-8 символ" संःक ". dirkt 7 лет назад 0
Here is the output for the first line 00000000 e0 a4 b8 e0 a4 82 e0 a4 83 e0 a4 95 e0 a5 83 e0 |................| 00000010 a4 a4 e0 a4 ae e0 a5 8d 0a |.........| 00000019 coldbreeze16 7 лет назад 0
Да, это вещь! Посмотри в своем PDF. Он показывает संस्कृतम्, но при копировании становится संःकृतम्. третья буква स् была заменена на ः coldbreeze16 7 лет назад 0
Я также заметил еще один странный эффект. В Win 7, когда я использую какое-либо программное обеспечение для создания PDF (Acrobat, PDF-принтер, Primo PDF, inDesign, MS Word, Libre Office), не имеет значения, какой шрифт я использую, скопированный текст - бред. Но когда я использую Lyx и использую XeTex для изменения шрифтов, происходят странные вещи. При использовании большинства любой шрифт "выглядит хорошо, но копирует дерьмо". Но когда я использую шрифт NirmalaUI (поставляется с MS Word 2013) и использую XeTex для вывода PDF, теперь PDF «выглядит дерьмово, но хорошо копирует» (почти ... скопированный текст имеет некоторые пробелы, но весь текст не поврежден). TBH, Nirmala - неполный шрифт coldbreeze16 7 лет назад 0
Я думал, что под «тарабарщиной» ты имел в виду «что-то совершенно непонятное»? Если вы просто имеете в виду «не точный», и это происходит для всех зрителей, проблема по существу решена: копирование и вставка работали правильно, учитывая информацию в PDF, просто лигатура SA + VIRAMA была отрисована так, чтобы t сохранить информацию, которая изначально была SA + VIRAMA. (Извините, я понятия не имел, как работает Деванагари, я должен выяснить все это в пути). Так что, если это единственная проблема, вам «просто» нужен способ создания PDF-файлов, которые хранят эту информацию в таблице / ToUnicode. dirkt 7 лет назад 0
Очень похоже, что вам нужно собрать свой собственный шрифт вместе с правильными таблицами, которые также содержат лигатуры, чтобы предотвратить эффект «संः». А затем найдите или напишите какую-нибудь программу, которая работает с этим шрифтом. Xetex / Xelatex может быть хорошим кандидатом. dirkt 7 лет назад 0
Взгляните на [this] (https://www.dropbox.com/s/8p0j3yrlsr8a0kn/indian2a.pdf?dl=0) модифицированный вручную PDF, чтобы увидеть, как должен выглядеть cmap. dirkt 7 лет назад 0

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