%20%D0%B2%20%D1%8D%D1%82%D0%BE%D0%BC%20%D0%BA%D0%BE%D0%BD%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%BC%20PDF-%D1%84%D0%B0%D0%B9%D0%BB%D0%B5%3F.png)
Я пытаюсь использовать функцию поиска по нескольким связанным между собой PDF-документам, которые у меня есть, но по какой-то причине при поиске чего-то простого, например «the», ничего не появляется.
Вот несколько вещей, которые я усвоил, пытаясь разобраться в этом:
Если я скопирую и вставлю текст непосредственно из PDF-файла в поле поиска, то строка символов будет найдена, но ввод с клавиатуры для поиска не работает.
В качестве примера того, как выглядит текст, который я копирую из PDF-файла в свой браузер или любое приложение для работы с текстом, я скопировал следующий текст: «Как сотрудник отдела расчета заработной платы, вы должны распознавать и понимать различные процессы, происходящие в процессе расчета заработной платы».
Вот как это выглядит, когда я копирую и вставляю:
Не знаю, может, дело в кодировке? Может, есть способ открыть 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.