2010-08-10 7 views
7

Wir haben eine Reihe von gescannten Seiten (etwa 600), für die jeder PDF-Viewer das Bild mit Null Rand am rechten Rand, aber etwa 2 Zoll Rand auf der linken Seite anzeigt. (Vermutlich wurde beim Scannen eine falsche Einstellung verwendet ...)Wie kann ich Seitenbilder in PDF-Dateien mehr nach links oder rechts verschieben?

Wir möchten diese Seiten vorzugsweise als Broschüre drucken. Gibt es eine Möglichkeit, alle Seitenbilder permanent in die Mitte zu verschieben und die PDFs diese Seiten auch gefälliger darstellen zu lassen? Kann Ghostscript das machen? Kann man das mit einer anderen Methode machen, etwa programmatisch mit Hilfe einer PDF-Verarbeitungsbibliothek?

+0

Dies ist keine Programmierfrage und würde von einer Verschiebung zu SuperUser profitieren. – Robino

Antwort

8

Wenn Sie nicht Ihren eigenen Programmcode schreiben (wie Nikolaus vorgeschlagen), aber stattdessen eine Ghostscript-Befehlszeile verwenden, müssen Sie 3 Dinge wissen:

  1. PostScript hat einen setpagedevice Operator, der einen PageOffset Parameter annimmt;
  2. Ghostscript wird Schnipsel von PostScript Code verarbeiten, wenn Sie sie mit -c ... auf der Kommandozeile übergeben;
  3. Ghostscript kann bewerten und anwenden (einige) PostScript Code auch für direkte PDF => PDF Konvertierungen.

Jetzt dieses Kommandozeile versuchen, alle Seitenbilder von 1 Zoll (== 72pt) nach links zu verschieben:

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 

(Die -dPDFSETTINGS=/prepress ich in Ordnung zu bringen, um nicht zu verlieren jede Bildqualität die Scans ...)

+0

Schön! Das funktioniert wie ein Zauber! –

+0

Ich habe jetzt ein neues Problem. Es geht um das Extrahieren von Schriften. Ich werde eine separate Frage dazu stellen. –

+0

@Community: ** NEIN ** - Ghostscript benötigt ** not ** die umgekehrten Schrägstriche statt der Schrägstriche. Du kannst sie so behalten wie sie sind und es wird genauso funktionieren. (Es tut zwar nicht weh, zu Backslashes zu wechseln ... aber für einige Versionen müssen Sie vielleicht sogar zu ** double ** Backslashes wechseln ...) Und ** NO **, Sie müssen keine Bindestriche ändern ('-') Schrägstrich ('/') - das kann man sogar verletzen! Ich werde Ihre Änderung rückgängig machen, sorry! –

1

Sie können iText verwenden, um zu verschieben, skalieren oder Ernte pdf-Seiten

Sie benötigen einen PdfReader für Ihre Quelldatei zu definieren, und ein Dokument für Ihre Zieldatei dann iterieren Sie über die Seiten, wenn der Leser, erstellen Sie eine neue Seite im Dokument und die sourcePage als Vorlage auf die neue Seite hinzufügen (Verschiebung, Skalierung etc. wo immer Sie wollen)

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(); 
Verwandte Themen