Como dividir cada página de um arquivo djvu?

4

Em um arquivo djvu, ele tem duas páginas de livro em uma página djvu. Eu gostaria de dividi-lo para que uma página do livro por página djvu. Por exemplo,

Euqueriasaberseissopodeserfeitoporalgumsoftware,depreferênciautilitáriosdelinhadecomando?Obrigadoecumprimentos!

PS:Issoé um arquivo que pode ser usado para teste.

    
por Tim 06.12.2011 / 18:22

5 respostas

3

O seguinte não foi testado, mas, em princípio, deve funcionar (vou testá-lo se tiver mais tempo).

Você pode converter o arquivo djvu por exemplo para jpg assim:

#!/bin/sh
# djvu -> jpgs converter

i=1

# number of pages (392)
while [ $i -ne 392 ]
do
ddjvu -page=$i -format=pnm 1.djvu $i.pnm
pnmtojpeg $i.pnm > $i.jpg
rm -f $i.pnm
echo "page $i done"
i='expr $i + 1'
done

(de link )

Então você poderia usar o scantailor para dividir as páginas e produzir uma nova saída (consistindo de arquivos tif).

Aplique em uma terceira etapa djvubind a essa pasta e obtenha o arquivo djvu desejado.

    
por 06.12.2011 / 22:28
2

Aqui está o meu roteiro completo de trabalho. Ele precisa de djvulibre-bin library para ddjvu (decodificar para o formato tiff), cjb2 (porque eu não sei como converter diretamente o tiff para djvu), djvm (para inserções / exclusões de páginas no arquivo djvu) ferramentas e imagemagick library para a ferramenta convert (para dividir a página e converter para o formato mystical pbm file format). Todas as bibliotecas disponíveis através de apt-get .

Esquema:

file.djvu --./ddjvu--gt; bifold tiff --./convert--gt; página única tiff --./convert--gt; pbm --./djvm--gt; out.djvu

Exemplo: djvusplit 3 10 file.djvu , que significa split pages from 3 to 10 .

código completo:

#!/bin/bash
echo Usage: djvusplit PAGEFROM PAGETO FILE.DJVU

#make temp folder
mkdir ./tmp
cp "$3" ./tmp/
cd tmp

for i in $(seq -w $2 -1 $1) # Descending
do
    ddjvu -format=tiff -page=$i "$3" t$i.tiff
    convert -crop 2x1@ t$i.tiff t$i-%d.tiff
    convert t$i-0.tiff t$i-0.pbm
    convert t$i-1.tiff t$i-1.pbm
    cjb2 t$i-0.pbm t$i-0.djvu
    cjb2 t$i-1.pbm t$i-1.djvu
    djvm -i t$i-0.djvu t$i-1.djvu 2
    djvm -d $3 $i
    djvm -i $3 t$i-0.djvu $i
    rm ./t*
done

# total clean
mv $3 ../out.djvu
cd ..
rm -r ./tmp

Infelizmente ...

  1. Funciona devagar porque gera muitos arquivos tiff / pbm / djvu.
  2. A página dividida perde todo o texto do OCR.

Eu uso este script com outros para manter minha biblioteca eletrônica. Eles localizaram aqui no GitHub.

    
por 04.02.2014 / 03:05
1

Não há muitas ferramentas que podem operar diretamente em arquivos DjVu, em comparação com outros formatos mais comuns, como PDF ou JPEG. Com programas de manipulação de imagens, há o obstáculo adicional que a maioria deles opera em uma única imagem por vez, mas o arquivo DjVu contém várias páginas.

Uma possibilidade é ir via pdf. Com ddjvu de DjVuLibre , um filtro PDF un2up e pdf2djvu :

ddjvu -format=pdf 2up.djvu 2up.pdf
un2up <2up.pdf | pdf2djvu /dev/stdin >1up.djvu

Você pode conseguir fazer um un2up para o djvu inspirado em meu pdf versão usando python-djvulibre . Não verifiquei o grau de dificuldade da API para entrar.

    
por 07.12.2011 / 01:49
0

Tomando o script do bot2417 como base, aqui o meu próprio

#!/bin/bash
echo "################################################"
echo Usage: djvusplit2 LASTPAGE FILE.DJVU
echo "################################################"

if [ ! -f $2 ];
then
    echo "file $2 not exists!\n"
    exit
fi

start=1    
mkdir ./tmp

for i in $(seq $start +1 $1)
do
    j=$(($i*2-1))
    k=$(($i*2))

    # extract pages to tiff format
ddjvu -format=pbm -page=$i $2 ./tmp/$i.tiff

# split pages
convert -crop 2x1@ ./tmp/$i.tiff ./tmp/$i-%d.tiff

#delete extracted tiff
#rm ./tmp/$i.tiff

# convert tiff to djvu pages
cjb2 ./tmp/$i-0.tiff ./tmp/$j.djvu
cjb2 ./tmp/$i-1.tiff ./tmp/$k.djvu

#delete splitted tiffs
#rm ./tmp/$i-0.tiff
#rm ./tmp/$i-1.tiff

# create djvu file and add pages
if [ $i -eq 1 ];
    then
        djvm -c "(new) $2" ./tmp/$i.djvu
        echo "create new $2 OK"
        djvm -i "(new) $2" ./tmp/$(($i+1)).djvu
        echo "insert page $(($i+1)) OK"
    else
        djvm -i "(new) $2" ./tmp/$j.djvu
        echo "insert page $j OK"
        djvm -i "(new) $2" ./tmp/$k.djvu
        echo "insert page $k OK"
fi

#delete djvu pages
#rm ./tmp/$j.djvu
#rm ./tmp/$k.djvu

done

echo "\nfile (new) $2 created!!!"
echo "\n"

# cleanup temp dir
rm -r ./tmp
    
por 03.05.2014 / 07:16
-1

link

Espero que você encontre sua resposta aqui.

    
por 06.12.2011 / 20:27