Convertendo djvu para pdf E preservando o índice, como é possível?

9

Tentei várias ferramentas online e offline, mas as informações da tabela de conteúdo (TOC) não foram preservadas durante a conversão.

Gostaria de converter um dicionário finlandês de 5000 páginas, que está no formato djvu e possui cerca de 5000 entradas de sumário estruturadas hierarquicamente para encontrar palavras rapidamente.

Alguma idéia de como é possível preservar as informações do TOC durante a conversão de DJVU para PDF?

user1198559
fonte

Respostas:

5

update: user3124688 codificou esse processo no script dpsprep .


Não conheço nenhuma ferramenta que faça a conversão para você. Você certamente deve ser capaz de fazê-lo, mas pode demorar um pouco de trabalho. Vou descrever o processo básico. Você precisará dos utilitários de linha de comando de código aberto pdftke djvused(parte do DjVuLibre). Estes estão disponíveis no gerenciador de pacotes (GNU / Linux) ou em seus sites (Windows, OS X).

  • etapa 1: converter o texto do arquivo

    Primeiro, use qualquer ferramenta para converter o arquivo DJVU em PDF (sem marcadores).

    Suponha que os arquivos sejam chamados filename.djvue filename.pdf.

  • Etapa 2: extrair o esboço do DJVU

    Em seguida, envie os dados do esboço do DJVU para um arquivo, como este:

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

    Este é um arquivo que lista os indicadores de documentos do DJVU em formato de árvore serializada. Na verdade, é apenas um SEXPR e pode ser facilmente analisado. O formato é o seguinte:

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

    Por exemplo:

    (bookmarks
      ("bmark1"
        "#1")
      ("bmark2"
        "#5"
        ("bmark2subbmark1"
          "#6")
        ("bmark2subbmark2"
          "#7"))
      ("bmark3"
        "#9"
        ...))
    
  • Etapa 3: converter o esboço do DJVU para o formato de metadados PDF

    Agora, precisamos converter esses indicadores no formato exigido pelos metadados do PDF. Este arquivo tem formato:

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

    Portanto, nosso exemplo se tornaria:

     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
    

    Basicamente, você só precisa escrever um script para percorrer a árvore do SEXPR, mantendo o controle do nível e emitir o nome, número da página e nível de cada entrada, no formato correto.

  • etapa 4: extrair metadados do PDF e emendar nos marcadores convertidos

    Depois de obter a lista convertida, produza os metadados PDF do seu arquivo PDF convertido:

    pdftk "filename.pdf" dump_data > pdfmetadata.out
    

    Agora, abra o arquivo e encontre a linha que começa: NumberOfPages:

    insira os marcadores convertidos após esta linha. Salve o novo arquivo comopdfmetadata.in

  • Etapa 5: criar PDF com marcadores

    Agora podemos criar um novo arquivo PDF incorporando esses metadados:

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

    O arquivo out.pdfdeve ser uma cópia do seu PDF com os favoritos importados do arquivo DJVU.

pirocrasty
fonte
3

Com base no esquema muito claro acima, fornecido pelo usuário @pyrocrasty (obrigado!), Implementei um conversor de DJVU para PDF que preserva o texto do OCR e a estrutura de favoritos. Você pode encontrá-lo aqui:

https://github.com/kcroker/dpsprep

Os agradecimentos pelos dados do OCR vão para @zetah nos fóruns do Ubuntu!

user3124688
fonte
Eu tinha um arquivo DJVU com texto não numérico nos campos de número da página do marcador, para que o analisador não os lesse. Troquei j.split('#')[1]com (int(re.findall(r'\d+', j.split('#')[1])[0])+1)e funcionou muito bem. Debian Jessie necessário:sudo apt-get install pdftk djvulibre-bin python-pip ruby ruby-dev libmagickwand-dev; sudo pip install sexpdata; sudo gem install iconv pdfbeads