2010-08-10 17 views
7

Tenemos un montón de páginas escaneadas (alrededor de 600) para las cuales cada visor de PDF muestra la imagen con margen cero en el borde derecho, pero con un margen de aproximadamente 2 pulgadas a la izquierda. (Presumiblemente, durante el escaneo, se utilizó una configuración incorrecta ...)¿Cómo puedo desplazar las imágenes de página en archivos PDF más hacia la izquierda o hacia la derecha?

Queremos imprimir estas páginas, preferiblemente en forma de folleto. ¿Hay alguna manera de cambiar permanentemente todas las imágenes de página hacia el centro y hacer que el PDF muestre estas páginas también de una manera más agradable? ¿Puede Ghostscript hacer eso? ¿Se puede hacer esto con algún otro método, como programáticamente, con la ayuda de alguna biblioteca de procesamiento de PDF?

+0

Esto no es una pregunta de programación y se beneficiaría de ser trasladado a SuperUser. – Robino

Respuesta

8

Si no desea escribir su propio código de programa (como Nikolaus sugerido), pero use una línea de comando Ghostscript, necesita saber 3 cosas:

  1. PostScript tiene un operador setpagedevice que toma un parámetro PageOffset;
  2. Ghostscript procesará fragmentos de código PostScript si los pasa con -c ... en la línea de comandos;
  3. Ghostscript puede evaluar y aplicar (algunos) PostScript code even for direct PDF => PDF conversiones.

Ahora probar esta línea de comandos para cambiar todas las imágenes de la página por 1 pulgada (== 72pt) a la izquierda:

gswin32c.exe^
    -sDEVICE=pdfwrite^
    -o c:/path/to/output/pdf-shifted-by-1-inch-to-left.pdf^
    -dPDFSETTINGS=/prepress^
    -c "<</PageOffset [-72 0]>> setpagedevice"^
    -f c:/path/to/input/pdf-original.pdf 

(El -dPDFSETTINGS=/prepress puse en el fin de no perder ninguna calidad de imagen de los escaneos ...)

+0

¡Hermoso! Esto funciona como un encanto! –

+0

Tengo un nuevo problema ahora. Se trata de extraer fuentes. Haré una pregunta por separado sobre esto. –

+0

@Community: ** NO ** - Ghostscript no ** requiere ** barras invertidas en lugar de las barras diagonales. Puedes mantenerlos tal como están y funcionará igual. (No duele cambiar a las barras diagonales inversas ... sin embargo, es posible que deba cambiar a ** barras invertidas ** dobles para algunas versiones, incluso ...) Y ** NO **, no necesita cambiar los guiones ('-') para reenviar barra ('/') - ¡eso puede lastimar! Voy a revertir tu modificación, lo siento! –

1

puede utilizar iText para mover, escalar o cultivos pdf páginas

es necesario definir un PdfReader para su archivo de origen, y un documento para su archivo de destino entonces iterar sobre las páginas si el lector, crear una nueva página en el documento y añadir la sourcePage como plantilla para la nueva página (desplazamiento, escalado, etc. dondequiera que usted desee)

PdfReader reader = new PdfReader(input); 
    int n = reader.getNumberOfPages(); 

    Rectangle psize = reader.getPageSize(1); 
    float width = psize.getHeight(); 
    float height = psize.getWidth(); 

    Document document = new Document(new Rectangle(height, width)); 
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(output)); 

    document.open(); 

    PdfContentByte cb = writer.getDirectContent(); 

    int i = 0; 
    while (i < n) { 
     i++; 
     document.newPage(); 
     PdfImportedPage page = writer.getImportedPage(reader, i); 
     cb.addTemplate(page, factor, 0, 0, factor, left, down); 
    } 

    document.close(); 
Cuestiones relacionadas