[Acr DC] Извлечение из PDF страниц содержащих фразы из списка, заданного в текстовом файле и сохранение их в новый файл

Врубился, тогда проще, ибо с сортировкой проблема с дубликатами поиска. Теперь понял зачем кривил, но в дальнейшем это не понабиться, надо просто искать текст до первого совпадения, тогда даже если на обороте встречается искомое, он будет включен по параметру выбора "+ стр до найденой" / "+ стр после найденой" , а не поиском дублироваться.
 
есть возможность задавать место поиска медиа/блид/трим/арт боксом?
Вероятно есть... но пока не будет, сначала бы интерфейс сделать и алгоритм поиска отладить...

По идее
выбор "+ стр до найденой" и "+ стр после найденой"
возможно тоже не нужна :) можно обойтись одной +оборот а перед искомым он или после, вроде как не сложно вычислить.
 
Последнее редактирование:
@Drawer, а давай сравним забавы ради? ;)
Мой набросок на текстовом файле работает за чуть менее чем 3 секунды и большую часть времени работает pdfgrep. Кстати, если в тхт файле строки идут в той же последовательности, что и в pdf, то время работы можно заметно уменьшить.
### Инструкция по использованию программы `extract_pages`

#### Описание
`extract_pages` — это утилита для извлечения страниц из PDF документа на основе поиска текста. Программа ищет строки в PDF файле, извлекает страницы с найденным текстом и сохраняет их в новый PDF файл.

#### Требования
- `pdfgrep` — инструмент для поиска текста в PDF файлах.
- `pdftk` — инструмент для работы с PDF файлами (например, для извлечения страниц).

#### Подготовка
1. Убедитесь, что в той же папке, где находится PDF файл, существует текстовый файл с тем же именем, но с расширением `.txt`. Этот текстовый файл должен содержать строки, которые нужно искать в PDF файле.

Например, если ваш PDF файл называется `document.pdf`, то текстовый файл должен называться `document.txt`.

2. В текстовом файле каждая строка должна содержать одну строку текста, которую нужно искать в PDF документе.

#### Использование

1. **Базовое использование:**
Чтобы извлечь страницы, на которых содержатся искомые строки, выполните следующую команду:

```bash
./extract_pages.sh document.pdf
```

В результате будет создан файл `extracted_pages.pdf`, содержащий все страницы, на которых найдены искомые строки.

2. **Использование с опцией `-back`:**
Если вам нужно извлечь не только страницы с найденным текстом, но и следующие за ними страницы, используйте опцию `-back`:

```bash
./extract_pages.sh -back document.pdf
```

Этот вариант извлечет страницы с найденным текстом и следующую за ними страницу и сохранит их в файл `extracted_pages.pdf`.

#### Логирование
Все операции программы, включая найденные страницы и возможные ошибки, записываются в файл `script.log`, который создается или обновляется в текущей директории.

#### Примеры

1. **Извлечение страниц с найденным текстом:**

Например, если `document.txt` содержит строки:
```
Первая строка
Вторая строка
```

И вы запускаете команду:
```bash
./extract_pages.sh document.pdf
```

Программа найдет и извлечет страницы, на которых есть "Первая строка" и "Вторая строка".

2. **Извлечение страниц с найденным текстом и следующей за ними страницей:**

Если вы используете:
```bash
./extract_pages.sh -back document.pdf
```

Программа извлечет не только страницы с "Первой строкой" и "Второй строкой", но и страницы, которые следуют за ними.

#### Устранение неполадок
- Если программа не может найти строки в PDF файле, убедитесь, что текст в `document.txt` совпадает с текстом в PDF файле, включая регистр букв.
- Если программа не находит `document.txt`, убедитесь, что файл существует и находится в той же директории, что и PDF файл.

#### Завершение работы
После завершения работы программы все найденные страницы будут объединены в файл `extracted_pages.pdf`, который будет находиться в той же директории, что и исходный PDF файл.
 

Вложения

Последнее редактирование:
давай сравним забавы ради?
Зачем? Это ж очевидно, что адобовский js работает в стопятьсот раз тормознее, чем нативная консольная прога. Но мы его любим не за это.
 
Кстати, решение на питончике работает медленнее.
Python:
import os
import sys
import subprocess
import logging
from PyPDF2 import PdfReader, PdfWriter

# Настройка логирования
logging.basicConfig(filename="script.log", level=logging.INFO, format="%(asctime)s - %(message)s")

def log(message):
    logging.info(message)
    print(message)

def extract_pages(pdf_file, search_strings, include_next_page):
    reader = PdfReader(pdf_file)
    pages_to_extract = set()

    for search_string in search_strings:
        log(f"Ищем строку: '{search_string}'")
        for i, page in enumerate(reader.pages):
            text = page.extract_text()
            if search_string in text:
                log(f"Найдена строка на странице {i + 1}")
                pages_to_extract.add(i + 1)
                if include_next_page and i + 1 < len(reader.pages):
                    log(f"Добавляем следующую страницу: {i + 2}")
                    pages_to_extract.add(i + 2)
                break
        else:
            log(f"Строка '{search_string}' не найдена в файле {pdf_file}")

    if pages_to_extract:
        writer = PdfWriter()
        for page_number in sorted(pages_to_extract):
            writer.add_page(reader.pages[page_number - 1])

        output_file = "extracted_pages.pdf"
        with open(output_file, "wb") as out_pdf:
            writer.write(out_pdf)

        log(f"Извлеченные страницы сохранены в файл {output_file}")
    else:
        log("Не найдено страниц для извлечения")

def main():
    if len(sys.argv) < 2:
        print("Использование: extract_pages.py [-back] input.pdf")
        sys.exit(1)

    include_next_page = "-back" in sys.argv
    pdf_file = sys.argv[-1]

    if not os.path.exists(pdf_file):
        print(f"Ошибка: Файл '{pdf_file}' не найден.")
        sys.exit(1)

    txt_file = os.path.splitext(pdf_file)[0] + ".txt"
    if not os.path.exists(txt_file):
        print(f"Ошибка: Файл '{txt_file}' не найден.")
        sys.exit(1)

    with open(txt_file, "r", encoding="utf-8") as f:
        search_strings = [line.strip() for line in f]

    extract_pages(pdf_file, search_strings, include_next_page)

if __name__ == "__main__":
    main()
Да, и туда и туда добавил аргумент -back, который извлекает обороты.
 
В смысле, медленнее акробатовского? Хренасе...
 
Тем нагляднее вопиющая неоптимальность питона.
 
Соберите моё
решение на питончике
при помощи какого-нибудь PyInstaller в один ехе файл, а то ТС его так и не попробует. ;)
Думаю мой
Код:
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=a5c2bc6da5a3f72f748b54f3b108730e029cada8, for GNU/Linux 2.6.32, stripped
вряд ли тут кому-нибудь пригодится. ;)
 
Последнее редактирование:
  • Спасибо
Реакции: ~RA~

Удаление страниц, где есть определённый текст. Action/Script для Acrobat​


Правильно обозвал тему?
 
Океюшки, ждём автора темы для уточнения.
 
Извлечение из pdf страниц содержащих фразы из списка, заданного в текстовом файле и сохранение их в новый файл.
Хрен знает... так чтоли...
да-да-да
ЗЫ: и дополнительной опцией на выбор "+ стр до найденой" и "+ стр после найденой" (обновил файлы)
 

Вложения

Последнее редактирование: