Перетворення djvu в pdf І збереження змісту, як це можливо?


9

Я спробував кілька інструментів онлайн та офлайн, але інформація про вміст (TOC) не зберігалася під час конверсії.

Я хотів би перетворити словник фінською мовою на 5000 сторінок, який є у форматі djvu і містить близько 5000 записів TOC, структурованих ієрархічно для швидкого пошуку слів.

Будь-яка ідея, як можливо зберегти інформацію TOC під час перетворення DJVU в PDF?

Відповіді:


5

оновлення: user3124688 зашифрував цей процес у сценарії dpsprep .


Я не знаю жодного інструменту, який здійснить перетворення для вас. Ви, звичайно, повинні вміти це робити, але це може зайняти трохи роботи. Я викладу основний процес. Вам знадобляться утиліти командного рядка з відкритим кодом pdftkта djvused(частина DjVuLibre). Вони доступні у менеджера пакунків (GNU / Linux) або на їх веб-сайтах (Windows, OS X).

  • крок 1: перетворення тексту файлу

    Спочатку скористайтеся будь-яким інструментом для перетворення файлу DJVU у PDF (без закладок).

    Припустимо, файли називаються filename.djvuі filename.pdf.

  • крок 2: витягніть контур DJVU

    Далі виведіть дані контуру DJVU у такий файл:

    djvused "filename.djvu" -e 'print-outline' > bmarks.out
    

    Це файл, у якому перераховані закладки документів DJVU у серіалізованому форматі дерева. Насправді це просто SEXPR , і його можна легко розібрати. Формат такий:

    file ::= (bookmarks
               <bookmark>*)
    bookmark ::= (name
                   page
                   <bookmark>*)
    name ::= "<character>*"
    page ::= "#<digit>+"
    

    Наприклад:

    (bookmarks
      ("bmark1"
        "#1")
      ("bmark2"
        "#5"
        ("bmark2subbmark1"
          "#6")
        ("bmark2subbmark2"
          "#7"))
      ("bmark3"
        "#9"
        ...))
    
  • крок 3: конвертуйте контур DJVU у формат метаданих PDF

    Тепер нам потрібно конвертувати ці закладки у формат, необхідний метаданими PDF. Цей файл має формат:

    file ::= <entry>*
    entry ::= BookmarkBegin
              BookmarkTitle: <title>
              BookmarkLevel: <number>
              BookmarkPageNumber: <number>
    title ::= <character>*
    

    Тож наш приклад став би:

     BookmarkBegin
     BookmarkTitle: bmark1
     BookmarkLevel: 1
     BookmarkPageNumber: 1
     BookmarkBegin
     BookmarkTitle: bmark2
     BookmarkLevel: 1
     BookmarkPageNumber: 5
     BookmarkBegin
     BookmarkTitle: bmark2subbmark1
     BookmarkLevel: 2
     BookmarkPageNumber: 6
     BookmarkBegin
     BookmarkTitle: bmark2subbmark2
     BookmarkLevel: 2
     BookmarkPageNumber: 7
     BookmarkBegin
     BookmarkTitle: bmark3
     BookmarkLevel: 1
     BookmarkPageNumber: 9
    

    В основному, вам просто потрібно написати сценарій, щоб пройти дерево SEXPR, слідкуючи за рівнем, і вивести ім'я, номер сторінки та рівень кожного запису, до якого він потрапляє, у правильному форматі.

  • крок 4: витягніть метадані PDF та зробіть їх у конвертовані закладки

    Після отримання перетвореного списку виведіть метадані PDF з перетвореного PDF-файлу:

    pdftk "filename.pdf" dump_data > pdfmetadata.out
    

    Тепер відкрийте файл і знайдіть рядок, який починається: NumberOfPages:

    вставити перетворені закладки після цього рядка. Збережіть новий файл якpdfmetadata.in

  • крок 5: створити PDF з закладками

    Тепер ми можемо створити новий файл PDF, що містить ці метадані:

    pdftk "filename.pdf" update_info "pdfmetadata.in" output out.pdf
    

    Файл out.pdfповинен бути копією вашого PDF із закладками, імпортованими з файлу DJVU.


3

На основі дуже чіткого контуру, поданого користувачем @pyrocrasty (спасибі!), Я реалізував перетворювач DJVU в PDF, який зберігає як текст OCR'd, так і структуру закладок. Ви можете знайти його тут:

https://github.com/kcroker/dpsprep

Подяка за дані OCR переходить до @zetah на форумах Ubuntu!


У полях номерів сторінки закладок у мене був файл DJVU з нечисловим текстом, тому аналізатор не читав їх. Я замінив j.split('#')[1]з (int(re.findall(r'\d+', j.split('#')[1])[0])+1)і він працював великий. Debian Jessie потрібно:sudo apt-get install pdftk djvulibre-bin python-pip ruby ruby-dev libmagickwand-dev; sudo pip install sexpdata; sudo gem install iconv pdfbeads
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.