Поиск/извлечение текста

  • Автор темы Автор темы antabu
  • Дата начала Дата начала
Ответ: pdf довести до ума, чтобы работал копипаст и поиск

огромное спасибо, работает! надо мне дружить с форумом, жалею, что пренебрегал.
 
Ответ: pdf довести до ума, чтобы работал копипаст и поиск

Но не без ошибок перекодирует, к сожалению.
ПСИХОЛОГИЧЕСКАЯ ПОМОЩЬ РОДИТЕЛЯМ АУТИЧНОГО РЕБЕНКА копируется как
ПСИХОЛОГИЧЕСьАЯ ПОМОЩЬ РОДИТЕЛЯМ АУТИЧНОГО РЕБЕНьА
пробовал все 5 вариантов программы.
но всё равно спасибо, это совсем другое дело.
 
Ответ: pdf довести до ума, чтобы работал копипаст и поиск

Вот попался файл с которым рекодер не справляется совсем. Господа, есть еще идеи? прикладываю страничку.
 

Вложения

Ответ: pdf довести до ума, чтобы работал копипаст и поиск

т.е., если я правильно понимаю, всё сводится к тому есть ли программы с настраиваемой таблицей перекодирования. Один товарищ сказал, что якобы что-то такое может Foxit pdf editor, но подтверждения не нашёл.
 
Ответ: pdf довести до ума, чтобы работал копипаст и поиск

В Infix и Gemini вроде есть что-то похожее.

В pdf recode в принципе тоже внутри таблицы, думаю их можно исправить при желании.
 
В общем, поскольку автор pdf-recode, как я понимаю, пропал cфорума окончательно, а данная утилита серьезно востребована, попробую сделать краткий тутор по самостоятельной доработке ее под собственные нужды. Сразу признаюсь, что перл я терпеть не могу, более того, это единственная программа, которую мне пришлось ковырять. Но переписывать ее на чем-то более нормальном безумно лениво, к тому же, библиотеки работы с PDFне везде такие удобно-бесплатные, в общем, как говорится, используй то что под рукою, и не ищи себе другое. ;) Как уже писал suntory, исходный код легко получить, распаковав EXEфайл, например, через 7zip. Чтобы собрать исправленную версию, можно даже не заморачиваться с компилятором перла, процесс обратной сборки EXEфайла без компилятора я описал тут.
Теперь по поводу того, что, собственно, менять в самой программе? Для начала определиться, чем, собственно, не устраивает готовая версия pdf-recode, лежащая в форумном обменнике. Вариантов может быть два: 1) программа отказывается перекодировать вообще, выдавая ошибку и 2) перекодирует, но поиск в полученном файле не работает все равно или работает, но некоторые символы кодируются неправильно.
В первом случае, читайте посты выше, как добиться того, чтобы формат PDFфайла стал понятен для pdf-recode. Обычно помогает частичная или полная декомпрессия файла вышеописанными способами. Самые нехорошие случаи – текст в кривых (тут уж ничего не поделаешь, остается расслабиться и получать удовольствие) или шрифт в формате TrueType (этот случай, хотя бы, оставляет возможность конвертирования питстопом)
Если же файл уже благополучно перекодируется, но неправильно, то самое время настраивать программу под себя. Несмотря на упорные попытки 1998 сделать универсальный перекодировщик на все случаи жизни, думаю, это порочный путь, ибо, нельзя объять необъятное и впихнуть невпихуемое. Для начала, нужно определиться, в какой 8битной кодировке, собственно, хранится кириллический текст внутри PDF? Для этого PDFпридется распаковать. Если кодировка текстовых строк cp1251 (маленькая буква “a” имеет код 0xE0, а большая “A” – 0xC0), то для базовой версии перекодировщика годится, стандартный. Однако, возможна и кодировка ASCII (“A”-0x80,”a”-0xA0), как например, в этом случае. Рассмотрим его в качестве примера.
Берем стандартный pdf-recodeиз обменника, открываем его архиватором. В папке libлежит файл cp1251.pl. В нем содержится таблица перекодировки, в которой каждому 8битному коду символа ставится в соответствие юникодный. Ее надо поменять на соответствующую таблицу для кодировки ASCII:
Код:
(
"<00>", "<0000>",
"<01>", "<0001>",
"<02>", "<0002>",
"<03>", "<0003>",
"<04>", "<0004>",
"<05>", "<0005>",
"<06>", "<0006>",
"<07>", "<0007>",
"<08>", "<0008>",
"<09>", "<0009>",
"<0A>", "<000A>",
"<0B>", "<000B>",
"<0C>", "<000C>",
"<0D>", "<000D>",
"<0E>", "<000E>",
"<0F>", "<000F>",
"<10>", "<0010>",
"<11>", "<0011>",
"<12>", "<0012>",
"<13>", "<0013>",
"<14>", "<0014>",
"<15>", "<0015>",
"<16>", "<0016>",
"<17>", "<0017>",
"<18>", "<0018>",
"<19>", "<0019>",
"<1A>", "<001A>",
"<1B>", "<001B>",
"<1C>", "<001C>",
"<1D>", "<001D>",
"<1E>", "<001E>",
"<1F>", "<001F>",
"<20>", "<0020>",
"<21>", "<0021>",
"<22>", "<0022>",
"<23>", "<0023>",
"<24>", "<0024>",
"<25>", "<0025>",
"<26>", "<0026>",
"<27>", "<0027>",
"<28>", "<0028>",
"<29>", "<0029>",
"<2A>", "<002A>",
"<2B>", "<002B>",
"<2C>", "<002C>",
"<2D>", "<002D>",
"<2E>", "<002E>",
"<2F>", "<002F>",
"<30>", "<0030>",
"<31>", "<0031>",
"<32>", "<0032>",
"<33>", "<0033>",
"<34>", "<0034>",
"<35>", "<0035>",
"<36>", "<0036>",
"<37>", "<0037>",
"<38>", "<0038>",
"<39>", "<0039>",
"<3A>", "<003A>",
"<3B>", "<003B>",
"<3C>", "<003C>",
"<3D>", "<003D>",
"<3E>", "<003E>",
"<3F>", "<003F>",
"<40>", "<0040>",
"<41>", "<0041>",
"<42>", "<0042>",
"<43>", "<0043>",
"<44>", "<0044>",
"<45>", "<0045>",
"<46>", "<0046>",
"<47>", "<0047>",
"<48>", "<0048>",
"<49>", "<0049>",
"<4A>", "<004A>",
"<4B>", "<004B>",
"<4C>", "<004C>",
"<4D>", "<004D>",
"<4E>", "<004E>",
"<4F>", "<004F>",
"<50>", "<0050>",
"<51>", "<0051>",
"<52>", "<0052>",
"<53>", "<0053>",
"<54>", "<0054>",
"<55>", "<0055>",
"<56>", "<0056>",
"<57>", "<0057>",
"<58>", "<0058>",
"<59>", "<0059>",
"<5A>", "<005A>",
"<5B>", "<005B>",
"<5C>", "<005C>",
"<5D>", "<005D>",
"<5E>", "<005E>",
"<5F>", "<005F>",
"<60>", "<0060>",
"<61>", "<0061>",
"<62>", "<0062>",
"<63>", "<0063>",
"<64>", "<0064>",
"<65>", "<0065>",
"<66>", "<0066>",
"<67>", "<0067>",
"<68>", "<0068>",
"<69>", "<0069>",
"<6A>", "<006A>",
"<6B>", "<006B>",
"<6C>", "<006C>",
"<6D>", "<006D>",
"<6E>", "<006E>",
"<6F>", "<006F>",
"<70>", "<0070>",
"<71>", "<0071>",
"<72>", "<0072>",
"<73>", "<0073>",
"<74>", "<0074>",
"<75>", "<0075>",
"<76>", "<0076>",
"<77>", "<0077>",
"<78>", "<0078>",
"<79>", "<0079>",
"<7A>", "<007A>",
"<7B>", "<007B>",
"<7C>", "<007C>",
"<7D>", "<007D>",
"<7E>", "<007E>",
"<7F>", "<007F>",
"<80>", "<0410>",
"<81>", "<0411>",
"<82>", "<0412>",
"<83>", "<0413>",
"<84>", "<0414>",
"<85>", "<0415>",
"<86>", "<0416>",
"<87>", "<0417>",
"<88>", "<0418>",
"<89>", "<0419>",
"<8A>", "<041A>",
"<8B>", "<041B>",
"<8C>", "<041C>",
"<8D>", "<041D>",
"<8E>", "<041E>",
"<8F>", "<041F>",
"<90>", "<0420>",
"<91>", "<0421>",
"<92>", "<0422>",
"<93>", "<0423>",
"<94>", "<0424>",
"<95>", "<0425>",
"<96>", "<0426>",
"<97>", "<0427>",
"<98>", "<0428>",
"<99>", "<0429>",
"<9A>", "<042A>",
"<9B>", "<042B>",
"<9C>", "<042C>",
"<9D>", "<042D>",
"<9E>", "<042E>",
"<9F>", "<042F>",
"<A0>", "<0430>",
"<A1>", "<0431>",
"<A2>", "<0432>",
"<A3>", "<0433>",
"<A4>", "<0434>",
"<A5>", "<0435>",
"<A6>", "<0436>",
"<A7>", "<0437>",
"<A8>", "<0438>",
"<A9>", "<0439>",
"<AA>", "<043A>",
"<AB>", "<043B>",
"<AC>", "<043C>",
"<AD>", "<043D>",
"<AE>", "<043E>",
"<AF>", "<043F>",
"<B0>", "<00B0>",
"<B1>", "<00B1>",
"<B2>", "<0406>",
"<B3>", "<0456>",
"<B4>", "<0491>",
"<B5>", "<00B5>",
"<B6>", "<00B6>",
"<B7>", "<00B7>",
"<B8>", "<0451>",
"<B9>", "<2116>",
"<BA>", "<0454>",
"<BB>", "<00BB>",
"<BC>", "<0458>",
"<BD>", "<0405>",
"<BE>", "<0455>",
"<BF>", "<0457>",
"<C0>", "<0410>",
"<C1>", "<0411>",
"<C2>", "<0412>",
"<C3>", "<0413>",
"<C4>", "<0414>",
"<C5>", "<0415>",
"<C6>", "<0416>",
"<C7>", "<0417>",
"<C8>", "<0418>",
"<C9>", "<0419>",
"<CA>", "<041A>",
"<CB>", "<041B>",
"<CC>", "<041C>",
"<CD>", "<041D>",
"<CE>", "<041E>",
"<CF>", "<041F>",
"<D0>", "<0420>",
"<D1>", "<0421>",
"<D2>", "<0422>",
"<D3>", "<0423>",
"<D4>", "<0424>",
"<D5>", "<0425>",
"<D6>", "<0426>",
"<D7>", "<0427>",
"<D8>", "<0428>",
"<D9>", "<0429>",
"<DA>", "<042A>",
"<DB>", "<042B>",
"<DC>", "<042C>",
"<DD>", "<042D>",
"<DE>", "<042E>",
"<DF>", "<042F>",
"<E0>", "<0440>",
"<E1>", "<0441>",
"<E2>", "<0442>",
"<E3>", "<0443>",
"<E4>", "<0444>",
"<E5>", "<0445>",
"<E6>", "<0446>",
"<E7>", "<0447>",
"<E8>", "<0448>",
"<E9>", "<0449>",
"<EA>", "<044A>",
"<EB>", "<044B>",
"<EC>", "<044C>",
"<ED>", "<044D>",
"<EE>", "<044E>",
"<EF>", "<044F>",
"<F0>", "<0401>",
"<F1>", "<0451>",
"<F2>", "<0442>",
"<F3>", "<0443>",
"<F4>", "<0444>",
"<F5>", "<0445>",
"<F6>", "<0446>",
"<F7>", "<0447>",
"<F8>", "<0448>",
"<F9>", "<0449>",
"<FA>", "<044A>",
"<FB>", "<044B>",
"<FC>", "<044C>",
"<FD>", "<044D>",
"<FE>", "<044E>",
"<FF>", "<044F>"
);
После этого неплохо еще закомментировать в основной программы script\pdf-recode.plвсе патчи, сделанные 1998 для обеспечения совместимости со всевозможными национальными кодировками, бо нам они только под ногами путаться будут. В общем, окончательный вариант, уже собранный в EXE Я специально сделал EXEбез компрессии, чтобы; при сильной лени, можно было поправить исходники (в частности таблицу символов) не распаковывая, hex-редактором. Это будет чертовски кстати, когда, к примеру, после перекодировки PDFфайла обнаружится, что некий самостiйный символ перекодировался неправильно: в этом случае достаточно будет (найдя предварительно в PDFвосьмибитный код этого символа) просто влезть в EXEи поставить в соответствие коду этого символа нужный юникод прямо в вышепроцитированной таблице.
 
  • Спасибо
Реакции: Flame
Прошу прощения за некропостинг, по понятным причинам не мог ответить раньше. ;)
На самом деле дело не только в таблицах (хотя и в них тоже). К примеру, в приложенном файле шрифт встроен в формате Type3, а сам текст в расширенной кодировке ASCII, естественно, перекодировщик с такой засадой не работает принципиально, несмотря на все многочисленные доработки. Предложенный мною вариант со скриптом поиска тут тоже не годится, поскольку адобу данный способ представления текста в PDF, пугает до такой степени, что акробат своему АПИ текст не отдает вообще – говорит, мол, в файле две сотни пустых строк и несколько цифирей. В InfixPDFEditor, действительно, можно посимвольно задать юникод кириллице, но это достаточно муторно, вдобавок, результат все равно получается какой-то странный. Поэтому, несмотря на мою нелюбовь к перлу, пришлось все-таки ковырять программу 1998 (надеюсь, ему она уже пофиг до такой степени, что он простит мне ее изнасилование) Короче говоря, подставив туда напрямую таблицу перекодирования из ASCIIв юникод, получаем искомый PDF, в котором все ищется и копируется нормально. Сам процесс я, дабы не засорять тему, описал тут. Вообще, чтобы не растекаться мысью по древу, я предлагаю модераторам-администраторам объединить эти две темы – зачем нужен этот дубляж? Тем более, подозреваю, тема достаточно актуальная в свете этого и к ней придется не раз возвращаться.
 
  • Спасибо
Реакции: barabanozver и dimend

Не по теме:
Тема очень даже актуальна, так что зря извиняетесь. Спасибо, изучаем.
 
Здравствуйте.

Очень прошу, разбаньте, пожалуйста _MBK_. Или подскажите, как с ним можно связаться.

Есть вопросы по теме, на которые только он сможет ответить.
 
Вот пример страницы книги.
При копировании кракозябры. Пример: Ïîýòîìó, ïîëàãàÿ
Пробовал все версии утилиты pdf-recode, не помогают.
Одна отработала, но ничего не изменилось, a остальные сразу говорили "nothing to fix!"

Есть у кого-нибудь какие-то мысли, как с этим справиться?
 

Вложения

  • 85.pdf
    85.pdf
    103.2 КБ · Просм.: 950
Если есть Acrobat, попробуйте Save as PS - Distiller, такой pdf утилита исправляет.
 
Акробат 10.0.2
при сохранении из pdf в doc портятся шрифты (см. вложение)
 

Вложения

  • UnEncrypted.pdf
    UnEncrypted.pdf
    115.8 КБ · Просм.: 1 486
  • скрин.jpg
    скрин.jpg
    161.6 КБ · Просм.: 783
Помогите с кодировкой, тест копируется иероглифами. pdf-recode не
помогло.
Исходный UPLOAD.EE
files/6074751/1805506_vasil_ev_v_p_analiticheskaya_khimiya_kniga_1_titrimetrichesk.pdf.html
А это файл с добавленным белым фоном, под который подсунут
пдф с текстом, рсапознанным ФР (PDF Tools Из Exchange)
UPLOAD.EE - ___01ok.pdf - Закачать
Нужно или вылечить файл №1 или запретить копирование
кракозябр из №2 (но чтоб копировался нормальный текст)
 
При копировании кракозябры. Пример: Ïîýòîìó, ïîëàãàÿ

Не решение проблемы, а просто костыль - но вдруг кому поможет? Макрос для Ворда:

Код:
Sub Uni_to_Asc()

' Преобразование русского текста, представленного в виде Unicode, в ASCII

Dim Asc_Char() As String
Dim AscW_Char() As String

ReDim Asc_Char(255)
ReDim AscW_Char(255)

For i = 128 To 255
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
AscW_Char(i) = ChrW(i)
Asc_Char(i) = Chr(i)
    With Selection.Find
        .Text = AscW_Char(i)
        .Replacement.Text = Asc_Char(i)
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
Selection.Find.Execute Replace:=wdReplaceAll
Next i

End Sub
 
Ув. постояльцы форума, прошу прощение за то, что опять поднимаю эту тему. Внимательно изучив все, что было доступно для моего обыденного понимания; воспользовавшись всеми декодерами, все равно испытываю проблему с одним файлом. В нем всего 3 листика, но я никак не могу понять в чем же проблема. Может кто-то может мне помочь. Буду очень благодарен. Собственно, вот сам файл:

http://irbis-nbuv.gov.ua/cgi-bin/ir...OAD=1&Image_file_name=PDF/Unzap_2012_1_67.pdf

Во всех случаях, когда мне нужно было перекодировать старые верстки .pdf журналов, декодер спасал, в этом случае, после перекодировки в pdf-recode251008 пишет ОК!, но при копировании из новосозданного файла текст выглядит следующим образом:
þþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

Все остальные рекодеры пишут: nothing to fix!
Пожалуйста, подскажите, в каком направлении двигаться. Очень нужно получить этот полноценный файл в оригинальном виде. Большое спасибо.
 

Леонид, спасибо, но распознать текст не проблема, проблема - заменить в нем кодировку.
Распознать я могу любым онлайн ресурсом, или файн-ридером. Но задача не в этом. Необходимо получить такой же .pdf с таким же шрифтом, но возможностью поиска по документу и копирования из него не кизябликов, а текста.
 
Мне кажется, в вашем файле проблема не из этой, а из этой темы
В любом случае, сделать из него нормальный - героический подвиг, проще все таки распознать *(
 
  • Спасибо
Реакции: lopuh
Мне кажется, в вашем файле проблема не из этой, а из этой темы
В любом случае, сделать из него нормальный - героический подвиг, проще все таки распознать *(

Не уверен, но проверю. Я все-таки склоняюсь к тому, что проблема в кодировке ((