2012-02-02 13 views
6

Tengo un PDF que se puede buscar y necesito convertirlo en uno que no se puede buscar.Conversión de PDF con capacidad de búsqueda a un PDF que no admite búsquedas

Intenté usar Ghostscript y cambiarlo a JPEG y luego de vuelta a PDF, lo que funciona bien, pero el tamaño del archivo es demasiado grande y no es aceptable.

Intenté usar Ghostscript para convertir primero el PDF a PS y luego a PDF, lo cual también funciona, pero la calidad no es lo suficientemente buena.

gswin32.exe -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pswrite -r1000 -sOutputFile=out.ps in.pdf 
gswin32.exe -q -dNOPAUSE -dBATCH -dSAFER -dDEVICEWIDTHPOINTS=596 -dDEVICEHEIGHTPOINTS=834 -dPDFSETTINGS=/ebook -sDEVICE=pdfwrite -sOutputFile=out.pdf out.ps 

¿Hay alguna manera de dar una buena calidad al PDF?

¿Existe otra manera más fácil de convertir un PDF que se puede buscar a uno que no se puede buscar?

Respuesta

11

Puede usar Ghostscript para lograr eso.Necesita 2 pasos:

  1. Convierta el PDF a un archivo PostScript, que tiene todas las fuentes usadas convertidas en formas de contorno. La clave aquí es la -dNOCACHE paramenter:

     
    gs -o somepdf.ps -dNOCACHE -sDEVICE=pswrite somepdf.pdf

  2. Convertir el PS de nuevo a PDF (y, tal vez eliminar el PS intermedio de nuevo):

     
    gs -o somepdf-with-outlines.pdf -sDEVICE=pdfwrite somepdf.ps 
    rm somepdf.ps

Tenga en cuenta, que el PDF resultante es muy probable que sea mayor que el original. (Y, sin parámetros de línea de comando adicionales, todas las imágenes del PDF original probablemente también se convertirán de acuerdo con los valores predeterminados incorporados de Ghostscript, a menos que agregue más parámetros de línea de comandos para hacer lo contrario. Pero la calidad debería ser mejor que su propio intento de usar Ghostscript ...)


actualización

al parecer, partir de la versión 9.15 (que se publicará en septiembre/octubre de 2014), Ghostscript apoyará un nuevo parámetro línea de comandos:

-dNoOutputFonts 

lo que hará que los dispositivos de salida pdfwrite, ps2writeeps2write y "a glifos 'aplanar' en las operaciones 'básicos' que marca (en lugar de escribir las fuentes a la salida)".

Esto significa que los dos pasos anteriores se pueden evitar, y el resultado deseado lograrse con un único comando:

gs -o somepdf-with-outlines.pdf -dNoOutputFonts -sDEVICE=pdfwrite somepdf.pdf 

Advertencias: He probado esto con unos archivos de entrada utilizando un Ghostscript auto compilado basado en las fuentes actuales de Git. Funcionó impecablemente en cada caso.

+0

en mi humilde opinión Recomiendo convertir primero en postscript: 'gs -dBATCH -dNOPAUSE -dNOCACHE -dSAFER -sDEVICE = pswrite -sOutputFile = output.ps input.pdf' y luego pasar esta posdata resultante a * ps2pdf *. Si su página tiene un tamaño de página personalizado (por ejemplo, 17x24 cm), debe pasar * -g * cambiar a * ps2pdf *, como, por ejemplo, para un tamaño de página de 17x24 cm: 'ps2pdf -g4820x6800 input.ps output.pdf'; en otras palabras, eche un vistazo al tamaño de páginas en puntos (con pdfinfo), y luego multiplique ambas dimensiones por 10 – Dingo

+2

@Dingo: Si utiliza una versión GS reciente, '-o out.ps' es lo mismo que' -DBATCH - dNOPAUSE -sOutputFile = out.ps'. Además, una versión reciente de GS establece que el tamaño de la página del archivo de salida (PostScript) sea automáticamente el mismo que el del archivo de entrada (PDF). Si desea estar seguro, también puede configurarlo con '-gNNNxMMM' sin ningún problema. No me gusta 'ps2pdf' para la mayoría de los casos, porque de todos modos es un envoltorio alrededor de una línea de comandos de Ghostscript ... - Entonces, ¿qué diferencia hay entre tu recomendación más nueva y la mía? –

+0

tienes razón. No he leído cuidadosamente antes. Disculpe y gracias por los buenos consejos! – Dingo

3

una posible manera de producir pdf vector no realizar búsquedas a partir de un pdf del vector de búsqueda es PDF

  1. estallido en sus páginas individuales

    pdftk file.pdf burst

  2. convertir cualquier página individual en svg con

    pdftocairo

contenían en poppler utils

for f in *.pdf; do pdftocairo -svg $f; done 

3. eliminar TODOS pdf en la carpeta

4. entonces, con batikrasterizer

reconvertir TODO SVG a pdf (esta vez los archivos PDF resultantes se mantendrán vectorial, pero sin que pueda ser consultada)

java -jar ./batik-rasterizer.jar -m application/pdf *.svg 

paso final: unirse a todos pd sola página que resulta en un archivo PDF de varias

pdftk *.pdf cat output out.pdf 
+0

una [herramienta alternativa] (http://manpages.ubuntu.com/manpages/xenial/man1/rasterizer.1.html) para el paso 4 se puede utilizar con el siguiente comando: '$ for f in * .svg ; hacer rasterizador -m application/pdf $ f; hecho'. PD: No estoy muy seguro de cómo estas dos herramientas están relacionadas o se superponen, aunque ... –

+0

ampliando el alcance de la pregunta original, esta sería una forma de recortar el archivo resultante: http://tex.stackexchange.com/ a/42259/27721 –

0

Creo que la conversión a una imagen como JPG es el camino a seguir, podría valer la pena convertir a am imagen, optimizando/reducir el tamaño de las imágenes y luego creas un PDF con eso?