Convertir djvu a pdf Y preservar la tabla de contenido, ¿cómo es posible?

9

Probé varias herramientas en línea y fuera de línea, pero la información de la tabla de contenido (TOC) no se conservó durante la conversión.

Me gustaría convertir un diccionario finlandés de 5000 páginas que está en formato djvu y tiene alrededor de 5000 entradas TOC estructuradas jerárquicamente para encontrar palabras rápidamente.

¿Alguna idea de cómo es posible preservar la información de TOC durante la conversión de DJVU a PDF?

usuario1198559
fuente

Respuestas:

5

actualización: user3124688 ha codificado este proceso en el script dpsprep .


No conozco ninguna herramienta que haga la conversión por ti. Ciertamente deberías poder hacerlo, pero puede tomar un poco de trabajo. Voy a describir el proceso básico. Necesitará las utilidades de línea de comandos de código abierto pdftky djvused(parte de DjVuLibre). Estos están disponibles en su administrador de paquetes (GNU / Linux) o en sus sitios web (Windows, OS X).

  • Paso 1: convierte el texto del archivo

    Primero, use cualquier herramienta para convertir el archivo DJVU a PDF (sin marcadores).

    Supongamos que los archivos se llaman filename.djvuy filename.pdf.

  • Paso 2: extraer el contorno de DJVU

    A continuación, envíe los datos del esquema DJVU a un archivo, como este:

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

    Este es un archivo que enumera los marcadores de documentos DJVU en un formato de árbol serializado. De hecho, es solo un SEXPR , y se puede analizar fácilmente. El formato es el siguiente:

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

    Por ejemplo:

    (bookmarks
      ("bmark1"
        "#1")
      ("bmark2"
        "#5"
        ("bmark2subbmark1"
          "#6")
        ("bmark2subbmark2"
          "#7"))
      ("bmark3"
        "#9"
        ...))
    
  • Paso 3: convierte el esquema DJVU al formato de metadatos PDF

    Ahora, necesitamos convertir estos marcadores al formato requerido por los metadatos PDF. Este archivo tiene formato:

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

    Entonces nuestro ejemplo sería:

     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
    

    Básicamente, solo necesita escribir un script para recorrer el árbol SEXPR, realizar un seguimiento del nivel y generar el nombre, el número de página y el nivel de cada entrada a la que llega, en el formato correcto.

  • Paso 4: extraer metadatos PDF y empalmar en marcadores convertidos

    Una vez que tenga la lista convertida, envíe los metadatos PDF de su archivo PDF convertido:

    pdftk "filename.pdf" dump_data > pdfmetadata.out
    

    Ahora, abra el archivo y busque la línea que comienza: NumberOfPages:

    inserte los marcadores convertidos después de esta línea. Guarde el nuevo archivo comopdfmetadata.in

  • Paso 5: crea un PDF con marcadores

    Ahora podemos crear un nuevo archivo PDF que incorpore estos metadatos:

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

    El archivo out.pdfdebe ser una copia de su PDF con los marcadores importados del archivo DJVU.

pirocrastia
fuente
3

Basado en el esquema muy claro anterior dado por el usuario @pyrocrasty (¡gracias!), He implementado un convertidor DJVU a PDF que conserva tanto el texto OCR como la estructura de marcadores. Puedes encontrarlo aquí:

https://github.com/kcroker/dpsprep

¡Los agradecimientos por los datos de OCR van a @zetah en los foros de Ubuntu!

usuario3124688
fuente
Tenía un archivo DJVU con texto no numérico en los campos de número de página de marcador, por lo que el analizador no los leyó. He sustituido j.split('#')[1]con (int(re.findall(r'\d+', j.split('#')[1])[0])+1)y funcionó muy bien. Debian Jessie necesitaba:sudo apt-get install pdftk djvulibre-bin python-pip ruby ruby-dev libmagickwand-dev; sudo pip install sexpdata; sudo gem install iconv pdfbeads