Mengubah djvu ke pdf DAN menjaga daftar isi, bagaimana mungkin?


9

Saya mencoba beberapa alat online dan offline tetapi informasi daftar isi (TOC) tidak dipertahankan selama konversi.

Saya ingin mengonversi kamus Finlandia 5000 halaman yang dalam format djvu dan memiliki sekitar 5.000 entri TOC terstruktur secara hierarkis untuk menemukan kata dengan cepat.

Adakah yang tahu bagaimana mungkin mempertahankan informasi TOC selama DJVU ke konversi PDF?

Jawaban:


5

pembaruan: user3124688 telah mengodekan proses ini dalam skrip dpsprep .


Saya tidak tahu ada alat yang akan melakukan konversi untuk Anda. Anda tentu harus bisa melakukannya, tetapi mungkin perlu sedikit usaha. Saya akan menguraikan proses dasar. Anda akan memerlukan utilitas baris perintah open source pdftkdan djvused(bagian dari DjVuLibre). Ini tersedia dari manajer paket Anda (GNU / Linux) atau situs web mereka (Windows, OS X).

  • langkah 1: konversi teks file

    Pertama, gunakan alat apa pun untuk mengonversi file DJVU ke PDF (tanpa bookmark).

    Misalkan file dipanggil filename.djvudan filename.pdf.

  • langkah 2: ekstrak garis besar DJVU

    Selanjutnya, hasilkan data outline DJVU ke file, seperti ini:

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

    Ini adalah file yang mencantumkan bookmark dokumen DJVU dalam format pohon serial. Bahkan itu hanya SEXPR , dan dapat dengan mudah diurai. Formatnya adalah sebagai berikut:

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

    Sebagai contoh:

    (bookmarks
      ("bmark1"
        "#1")
      ("bmark2"
        "#5"
        ("bmark2subbmark1"
          "#6")
        ("bmark2subbmark2"
          "#7"))
      ("bmark3"
        "#9"
        ...))
    
  • langkah 3: mengonversi garis DJVU ke format metadata PDF

    Sekarang, kita perlu mengkonversi bookmark ini ke format yang diperlukan oleh metadata PDF. File ini memiliki format:

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

    Jadi contoh kita akan menjadi:

     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
    

    Pada dasarnya, Anda hanya perlu menulis skrip untuk berjalan di pohon SEXPR, melacak level, dan menampilkan nama, nomor halaman, dan level dari setiap entri yang datang, dalam format yang benar.

  • langkah 4: ekstrak metadata PDF dan gabungkan bookmark yang dikonversi

    Setelah Anda mendapatkan daftar yang dikonversi, keluarkan metadata PDF dari file PDF yang dikonversi:

    pdftk "filename.pdf" dump_data > pdfmetadata.out
    

    Sekarang, buka file dan temukan baris yang dimulai: NumberOfPages:

    masukkan bookmark yang dikonversi setelah baris ini. Simpan file baru sebagaipdfmetadata.in

  • langkah 5: buat PDF dengan bookmark

    Sekarang kita dapat membuat file PDF baru yang menggabungkan metadata ini:

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

    File out.pdfharus berupa salinan PDF Anda dengan bookmark yang diimpor dari file DJVU.


3

Berdasarkan garis besar yang sangat jelas di atas yang diberikan oleh pengguna @pyrocrasty (terima kasih!), Saya telah menerapkan konverter DJVU ke PDF yang mempertahankan teks OCR dan struktur bookmark. Anda dapat menemukannya di sini:

https://github.com/kcroker/dpsprep

Ucapan terima kasih untuk data OCR pergi ke @zetah di forum Ubuntu!


Saya memiliki file DJVU dengan teks non-numerik di bidang nomor halaman penunjuk, sehingga pengurai tidak membacanya. Saya diganti j.split('#')[1]dengan (int(re.findall(r'\d+', j.split('#')[1])[0])+1)dan itu bekerja dengan baik. Debian Jessie diperlukan:sudo apt-get install pdftk djvulibre-bin python-pip ruby ruby-dev libmagickwand-dev; sudo pip install sexpdata; sudo gem install iconv pdfbeads
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.