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
- Sitio de PDFBeads en Rubyforge
- Hilo sodre PDFBeads en el foro de DIYBookScanner.
- @@Referencia parametros PDFBeads en DIYBookScanner@@
- Manual oficial en ruso
- Repositorio en Github
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