Sobre PDFBeads

PDFBeads es un programa generador de PDFs desarrollado en Ruby por Alexey Kryukov. La aplicación fue diseñada especialmente para trabajar con las imágenes procesadas con Scantailor.

Características:
  • Genera un documento PDF a partir de archivos TIFF numerados en orden.
  • No tiene interfaz gráfica, el programa se ejecuta desde la línea de comandos.
  • Reduce el tamaño del PDF comprimiendo los datos con el algoritmo JBIG2.
  • Reconoce el formato estándar hOCR y puede incorporar al PDF la información obtenida por reconocimiento óptico de caracteres (OCR), habilitando búsquedas dentro del documento.
Sitios

Instalar PDFBeads en Debian Wheezy, Jessie y Ubuntu 16.04

Pre-requisitos para la compilación

Asegurarse que el repositorio de código fuente esté habilitado en la lista de fuentes de Debian o Ubuntu en /etc/apt/sources.list. Si no, editar el archivo (como superusuario) y agregar o descomentar esta línea:

deb-src http://ftp.us.debian.org/debian wheezy main

en Ubuntu

deb-src http://ar.archive.ubuntu.com/ubuntu/ xenial main

Actualizar la lista de paquetes:

apt-get update

Compilación de la librería 'jbig2enc'

ToDo: verificar la relacion de jbigenc big2dec libjbig2dec0 libjbig2dec0-dev de Ubuntu 16.04 reemplazan esta compilación

Un requisito previo a la instalación de PDFbeads es la compilación de JBIG2. JBIG2 es un algoritmo estandarizado de compresión que genera imágenes de menor tamaño. jbig2enc es una implementación libre en python.

El proceso de compilación utiliza el set de herramientas de "GNU build system", que deben estar instaladas en el sistema:

 apt-get install autotools-dev automake libtool

jbig2enc utiliza la librería Leptonica, que puede instalarse desde el repositorio de Debian:

 apt-get install libleptonica-dev

Otras dependencias de desarrollo necesarias libjpeg, libtiff, libpng, y zlib1g:

apt-get install libjpeg8-dev libtiff5-dev libpng12-dev zlib1g-dev

en Debian "Jessie" o si el paquete libjpeg8-dev no existe

apt-get install libjpeg62-turbo-dev libtiff5-dev libpng12-dev zlib1g-dev

Obtener el código fuente de jbig2enc desde el GitHub descargando el ZIP y descomprimiendo el archivo en la carpeta elegida para realizar la compilación (recomendado), o clonando el repositorio con el comando git clone https://github.com/agl/jbig2enc.git.

Luego, ingresar al directorio que contiene el código fuente:

cd jbig2enc

Seguir el proceso tradicional de compilación:

./autogen.sh
./configure
make

Y para instalar en el sistema utilizar (como root en Debian o usando sudo en Ubuntu):

make install

O chekinstall (recomendado, genera un paquete .deb que luego se puede instalar/desinstalar fácilmente sin tener que compilar de nuevo)

Si make responde que no existen reglas para construir "checkinstall" significa que chekinstall no está instalado, entonces (como root): apt-get install checkinstall

En caso de usar checkinstall asegurarse que exista el directorio /usr/local/share/doc en el sistema. Puede creárselo con el comando (como root) mkdir /usr/local/share/doc. Además debe ingresarse un número de versión correcto (puede obtenerse desde este archivo) en el ítem 3 de la lista devuelta por checkinstall antes de iniciar el proceso de construcción del paquete deb (por defecto checkinstall colocará "master" y provocará un error).

Incompatibilidad con nuevas versiones de Ruby

pdfbeads 1.1.1 no es compatible con versiones de Ruby superiores a 1.9.3. Debian Wheezy tiene disponibles las versiones 1.8.7 y 1.9.3, pero Jessie sólo dispone de la versión 2.1.5 (incompatible) y 1.5.6 (no probada) y Ubuntu 16.04 la version 2.3 (incompatible), por lo tanto se recomienda instalar la versión 1.9.3 utilizando un método por fuera del sistema de paquetes Debian, como RVM (Ruby Version Manager). (nota de 2016/17)

Instalación de Ruby 1.9.1 en Debian 7 "Wheezy"

Instalar RubyGems, el gestor de paquetes para el lenguaje de programación Ruby:

apt-get install ruby-full ruby-dev rubygems

nota: en mayo de 2014 apt-get install ruby1.9.1-full ruby1.9.1-dev rubygems1.9.1

Instalar los siguientes paquetes de Ruby que pueden instalarse desde el gestor de paquetes Debian:

apt-get install ruby-rmagick ruby-hpricot
instalación de Ruby 1.9.3 en Debian 8 "Jessie" o Ubuntu 16.04

En caso de haber instalado una versión de Ruby con el sistema de paquetes de Debian, se recomieda desintalarlo (como root o usando sudo):

 apt-get autoremove ruby ruby-rmagick ruby-hpricot rubygems

Luego, como root instalar RVM (use sudo -i en Ubuntu para obtener el usuario root)

 gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
 curl -sSL https://get.rvm.io | bash -s stable
 usermod -a -G rvm <usuario>

donde <usuario> es el usuario (o los usuarios) sin privilegios que utilizarán pdfbeads.

(Puede seguir el siguiente tutorial para realizar la instalación en Ubuntu 16.04 sin usar el usuario root: How To Install Ruby on Rails with RVM on Ubuntu 16.04)

Como el entorno de RVM se carga desde /etc/profile.d/rvm.sh, hay que loguearse nuevamente para que se cargue desde una login shell (por lo tanto para loguearse como root no basta con su - en una emulador de terminal, se debe utilizar una consola con login desde Ctrl + Alt + Fx (en una máquina virtual esto se consigue con HOST + Fx, donde HOST generalmente la tecla Ctrl derecha. Para volver a la intefase gráfica usar Ctrl + Alt + F7. Generalmente se usa Ctrl + Alt + F1 para abrir una consola)

Si se usa un emulador de terminal ("non-login shell") en vez de una terminal virtual (login shell a las que se accede con Ctrl + Alt + Fx) asegurarse de que la opción "Run command as login shell" o "Ejecutar el comando como un intérprete de conexión" este seleccionada, si no la función rvm no estará disponible. Esta opción se encuentra en la pestaña "Title and Command" en "Profile Preferences" ó "Título y comandos" en el menú Editar -> "Preferencias del perfil" de la consola.

Logueado como root instalar Ruby

 rvm install 1.9.3

y luego

 rvm use 1.9.3

Más info en:

nota: otra opcion para Ubuntu 16.04:

sudo gem install iconv -v 1.0.3

Esto soluciona el problema del error 'require': cannot load such file -- iconv (LoadError) (a partir de la version 2.2 de ruby iconv ya no esta incluido en la libreria estandar, pero no esta agregada en las dependencias de pdfbeads)

instalación de PDFbeads

instalar dependencias (como root):

apt-get install libmagickwand-dev imagemagick

instalar las gemas (como root):

gem install ttfunk -v 1.4.0
gem install nokogiri -v 1.6.8.1
gem install pdfbeads

Luego, pdfbeads no necesitará privilegios para ejecutarse:

Para comprobar el buen funcionamiento de pdfbeads ejecutar

 pdfbeads -h

y debe devolver el manual de ayuda

 Usage: pdfbeads [options] [files to process] > out.pdf

 PDF file properties:
   -C, --toc TOCFILE        Build PDF outline dictionary from a text file
   -L, --labels LSPEC       Specify page labels for user-friendly page numbering
   -M, --meta METAFILE      Take metadata for the PDF file from a text file
   -P, --pagelayout LAYOUT  Specify the default page layout for PDF viewer, where
                            LAYOUT is `SinglePage', `OneColumn', `TwoColumnLeft'
                            `TwoColumnRight', `TwoPageLeft', or `TwoPageRight'

 Image encoding and compression options:
   -f, --force-update       Always write subsidiary image files even if a file
                            with the same name is already found on the disk
   -m FORMAT,               Compression method for foreground text mask in PDF
       --mask-compression   pages (JBIG2 or G4). JBIG2 is used by default, unless
                            the encoder is not available
   -p, --pages-per-dict NUM Generate one shared JBIG2 dictionary per NUM pages.
                            This option is only applied when JBIG2 compression
                            is used. Default value is 15
   -r DPI,                  Set resolution for foreground mask images to the
       --force-resolution   specified value (in pixels per inch). Note that the
                            image is not actually resampled.
   -t, --threshold VAL      Set binarization threshold for mixed images. Valid
                            values are between 1 and 255. 1 is used by default,
                            as the input files are assumed to be preprocessed
                            with ScanTailor (http://scantailor.sourceforge.net)
   -x, --max-colors NUM     If pdfbeads finds an indexed file with NUM or
                            less colors, then it will attempt to split it into
                            several bitonal images and encode them all into the
                            PDF page mask. Otherwise the file is treated just
                            like a normal greyscale or color image. Default
                            value is 4

 The following options are only applied when pdfbeads attempts to split
 a mixed source image into text mask and background layer:
   -b FORMAT,               Compression method for background images. Acceptable
       --bg-compression     values are JP2|JPX|JPEG2000, JPG|JPEG or PNG|LOSSLESS.
                            JP2 is used by default, unless this format is not
                            supported by the available version of ImageMagick
   -B, --bg-resolution DPI  Set resolution for background images (300dpi default)
   -g, --grayscale          When separating text from background, always convert
                            background images to grayscale

 General options:
   -d, --delete             Delete intermediate image files used to create PDF
   -o, --output FILE        Print output to a file instead of STDERR
   -h, --help               Show this message