2010-08-10 14 views
7

Abbiamo un mucchio di pagine scansionate (circa 600) per le quali ogni visualizzatore PDF visualizza l'immagine con margine zero sul margine destro, ma circa 2 pollici margine a sinistra. (Presumibilmente durante la scansione, c'era un'impostazione errata usata ...)Come posso spostare le immagini delle pagine nei file PDF più a sinistra oa destra?

Vogliamo stampare queste pagine, preferibilmente come un opuscolo. C'è un modo per spostare in modo permanente tutte le immagini della pagina verso il centro e avere il PDF visualizzare queste pagine anche in un modo più gradevole? Ghostscript può farlo? Si può fare questo con qualche altro metodo, come programmaticamente con l'aiuto di alcune librerie di elaborazione PDF?

+0

Questa non è una domanda di programmazione e trarrebbe vantaggio dal trasferimento a SuperUser. – Robino

risposta

8

Se non si desidera scrivere il proprio codice del programma (come Nikolaus suggerito), ma usa invece una riga di comando Ghostscript, devi sapere 3 cose:

  1. PostScript ha un operatore setpagedevice che accetta un parametro PageOffset;
  2. Ghostscript elaborerà snippet di codice PostScript se li si passa con -c ... sulla riga di comando;
  3. Ghostscript in grado di valutare e applicare (alcuni) codice PostScript anche per diretta PDF => PDF conversioni.

Ora provate questo comando per spostare tutte le immagini delle pagine da 1 pollice (== 72pt) a sinistra:

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 

(Il -dPDFSETTINGS=/prepress ho messo in al fine di non perdere alcuna qualità delle immagini di le scansioni ...)

+0

Bello! Funziona come un fascino! –

+0

Ho un nuovo problema ora. Si tratta dell'estrazione dei caratteri. Chiederò una domanda a parte su questo. –

+0

@Community: ** NO ** - Ghostscript fa ** non ** richiede i backslash invece delle barre in avanti. Puoi tenerli così come sono e funzionerà allo stesso modo. (Non fa male cambiare in backslashes però ... tuttavia, potrebbe essere necessario passare a ** double ** backslash anche per alcune versioni ...) E ** NO **, non è necessario modificare i trattini ('-') per inoltrare la barra ('/') - che si può anche ferire! Sostituirò la tua modifica, mi dispiace! –

1

è possibile utilizzare iText per spostare, scalare o colture pdf-pagine

è necessario definire un PdfReader per il file sorgente e di un documento per il file di destinazione quindi di eseguire iterazioni sulle pagine se il lettore, creare una nuova pagina nel documento e aggiungere la sourcePage come modello per la nuova pagina (spostamento, ridimensionamento ecc dove vuoi)

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(); 
Problemi correlati