Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
3 / 0 / 1
Регистрация: 29.11.2016
Сообщений: 4
VBS

Поиск определённого текста в PDF-файле

29.11.2016, 12:52. Показов 7002. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет,
Мне необходимо найти определенный текст в PDF-файле. Если текст найден, то должно выполняться некоторое действие.
Я набросал скрипт который открывает файл и находит текст.
Как в скрипте определить, найден текст в файле или нет?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "AcroRd32 d:\f861.pdf"
 
Do Until Success = True
    Success = objShell.AppActivate("Adobe Acrobat Reader DC")
    Wscript.Sleep 500
Loop
 
objShell.SendKeys "^{f}"
Wscript.Sleep 500
objShell.SendKeys "искомый текст"
objShell.SendKeys "{ENTER}"
Буду благодарен за примеры решения о подобных задачах.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.11.2016, 12:52
Ответы с готовыми решениями:

Поиск определенного текста в файле .txt и вставка в определенную ячейку в Excel
Доброго времени суток. Допустим есть файл info.txt ( состоит из множества строк, например gsd = 797 .... dig = 7666 и т.д.) в корне в с...

Замена текста в PDF-файле
Как заменить текст в PDF файле? например в pdf есть слово "пес" хочу заменить его на "кот". Только пожалуйста не отправляйте...

Поиск слова в PDF файле
Мне необходимо найти определённое слова в PDF - файле. Нашла библиотека iTextSharp - в инете пишется что это большая библиотека для...

8
 Аватар для volodin661
6791 / 2288 / 348
Регистрация: 10.12.2013
Сообщений: 7,897
01.12.2016, 08:50
если задача разбора pdf практическая, то иди куда-нить на java или python - ветки данного форума,
там должны знать про подходящие pdf-библиотеки и есть все примеры кода.
( слова VBS при этом не употребляй, засмеют )
1
3 / 0 / 1
Регистрация: 29.11.2016
Сообщений: 4
01.12.2016, 11:34  [ТС]
Спасибо.

Пока пошёл другим путём. Содержимое PDF-файла копирую в буфер, затем вставляю в Word и уже там разбираю.
0
01.12.2016, 12:41

Не по теме:

Цитата Сообщение от gekus
Содержимое PDF-файла копирую в буфер, затем вставляю в Word...
Возникает вполне закономерный вопрос: что если pdf содержит [Action|Java]Script причем явно с кодом от Лукавого? Полагаете, что приотключении исполнения макросов в Word'е в системе не заведется зверье? Прежде, чем что-либо разбирать, нужно раз десять убедиться в том, что файл чист, - на будущее.

0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
02.12.2016, 15:43
Цитата Сообщение от gekus Посмотреть сообщение
Содержимое PDF-файла копирую в буфер, затем вставляю в Word и уже там разбираю.
Некоторые PDF могут иметь защиту от копирования в буфер.
1
3 / 0 / 1
Регистрация: 29.11.2016
Сообщений: 4
06.12.2016, 07:55  [ТС]
Лучший ответ Сообщение было отмечено Dragokas как решение

Решение

Погуглил тему и собрал нужный скрипт. Ищет текст в PDF-файле и копирует в нужную папку.
Нужен установленный Adobe Acrobat (стоит денег). Защита от копирования в буфер значения не имеет.
После обработки файла пришлось убивать процесс Acrobat.exe, поскольку при использовании стандартного PDFApp.CloseAllDocs() случается ложный поиск текста после успешного поиска в предыдущем файле.
Кто знает почему так происходит и как с этим бороться?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Set objShell = WScript.CreateObject("WScript.Shell")
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
 
objStartFolder = " путь папки с исходными файлами"
 
objDestFolder = "путь папки с результатом"
 
Set objFolder = objFSO.GetFolder(objStartFolder)
 
Set colFiles = objFolder.Files
 
For Each objFile in colFiles
    If InStr(1,objFile.Name,".pdf",1) > 0  Then
         If not (objFSO.FileExists(objDestFolder & objFile.Name)) Then
            FindInFiles objStartFolder & objFile.Name
         End If
    End If
Next
 
 
msgbox "End"
 
 
 
Sub FindInFiles(full_path)
     
     Set PDFApp = CreateObject("AcroExch.App")
     Set PDFDoc = CreateObject("AcroExch.AVDoc")
 
    If PDFDoc.Open(full_path,"") Then
                        
        result1 = PDFDoc.FindText("Text1", 0, 1, 0)
        result2 = PDFDoc.FindText("Text2", 0, 1, 0)
        result3 = PDFDoc.FindText("Text3", 0, 1, 0)
        result4 = PDFDoc.FindText("Text4", 0, 1, 0)
                
        If result1=true OR result2=true OR result3=true OR result4=true Then
                 
                 objFSO.CopyFile full_path, objDestFolder
 
        Else        
                 objFSO.CopyFile full_path, "путь папки для ненужных файлов"
                 
        End If       
    End If
 
    objShell.Run "taskkill /f /im Acrobat.exe", , True
            
End Sub
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
06.12.2016, 17:42
gekus, а не пробовали просто вызвать деструктор класса, может он сам закроется?

Visual Basic
1
2
     Set PDFDoc = nothing
     Set PDFApp = nothing
или может это как-то связано с тем, что не выставляется видимость документа. Попробуйте перед закрытием:
Visual Basic
1
2
PDFApp.Show
PDFDoc.BringToFront
Еще как вариант, вообще не пользоваться поиском в PDF. Забрать весь документ "себе" и парсить текст непосредственно средствами VBS.
Код не мой, так что не проверял:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
'// Save this as xxx.vbs and start with Double Click
'// It gives you the text of an already opened PDF
'// if Acrobat or no Doc is open you get an ErrorMsg
set WshShell = CreateObject ("Wscript.Shell")
WshShell.AppActivate("Adobe Acrobat")
WScript.Sleep 500
'// get the active Document
Set AcroApp = CreateObject("AcroExch.App")
Set AVDoc = AcroApp.GetActiveDoc
Set PDDoc = AVDoc.GetPDDoc
 
Set PdfPage = PDDoc.AcquirePage(1) '<<--SET in FILE! =Pagenumber 
Set PageHL = CreateObject("AcroExch.HiliteList")
PageHLRes = PageHL.Add(0,9000) '<<--SET in FILE! (Start,END[9000=All]) 
Set PageSel = PdfPage.CreatePageHilite(PageHL)
 
for i = 0 to PageSel.Getnumtext - 1
  pdfData =PDFData & PageSel.GetText(i)
Next
 
msgBox PDFDATA
0
3 / 0 / 1
Регистрация: 29.11.2016
Сообщений: 4
07.12.2016, 09:05  [ТС]
Dragokas, спасибо за ответы.
Проблему закрытия текущего файла решил использованием строки PDFDoc.Close(true).
Предложенный код считывая текста не сработал. Надо поразбираться, посмотрю подробнее позже.
0
 Аватар для volodin661
6791 / 2288 / 348
Регистрация: 10.12.2013
Сообщений: 7,897
07.12.2016, 19:31
https://github.com/euske/pdfminer/
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.12.2016, 19:31
Помогаю со студенческими работами здесь

Поиск текста по PDF документу
Суть: Есть куча одинаковых pdf анкет с информацией о студентах в таком виде: Имя: Вася Пупкин Дата рождения: 01.01.98 и т.д. 1)...

Поиск определенного слова в текстовом файле
Здравствуйте. Мне надо решить следующую задачу: Дан текстовый файл с несколькими строками. Найти номер последнего предложения, в...

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

Удаление в XML-файле текста после определённого символа
Помогите скриптом. Есть куча файлов с разными расширениями формата от 121 до 10103 и более. все обычные текстовые файлы. для дальнейшей...

Пронумеровать (с интервалом 1000) куски определенного текста в файле txt
Здраствуйте, помогите решить: нужно пронумеровать (с интервалом 1000) куски определенного текста в файле txt.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru