Как использовать функцию поиска (Ctrl+F) в этом конкретном PDF-файле?

Как использовать функцию поиска (Ctrl+F) в этом конкретном PDF-файле?

Я пытаюсь использовать функцию поиска по нескольким связанным между собой PDF-документам, которые у меня есть, но по какой-то причине при поиске чего-то простого, например «the», ничего не появляется.

Вот несколько вещей, которые я усвоил, пытаясь разобраться в этом:

  1. Если я скопирую и вставлю текст непосредственно из PDF-файла в поле поиска, то строка символов будет найдена, но ввод с клавиатуры для поиска не работает.

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

  3. Вот как это выглядит, когда я копирую и вставляю:

                     

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

Любая помощь будет высоко оценена!

решение1

Все эти «символы» находятся в «частной области использования» Unicode. В сочетании со шрифтом, содержащим глифы для этих кодовых точек, он выглядит как обычный текст.

Однако запутывание очень слабое. Давайте посмотрим на , который предположительно As. Кодовые точки — \uF041и \uF073. По совпадению, «латинская заглавная буква A» имеет \u0041, а «латинская строчная буква S» — \u0073.

Вам просто нужно пройти по всем кодовым точкам и вычесть/добавить 0xF000для преобразования из/в запутанный текст. Это позволит вам копировать текст из документа или искать текст в документе.

Вот код JavaScript, который расшифрует текст:

{
  let source = "                     ";

  let decoded = source.replace(/./g, c => {
    let cc = c.codePointAt(0);
    return cc > 0xF000 ? String.fromCodePoint(cc - 0xF000) : c;
  });

  console.log(decoded);
}

Если пойти другим путем, только для отдельных слов:

{
  let source = "understand";

  let coded = source.replace(/./g, c => String.fromCodePoint(c.codePointAt(0) + 0xF000));

  console.log(coded);
}

Оба фрагмента основаны строго на приведенном примере. Если присутствуют другие махинации с кодировкой, код требует дальнейшей корректировки.

Вы можете использовать эти фрагменты в консоли разработчика вашего браузера, обычно доступной через F12.

Связанный контент