2010-08-10 19 views
7

Mamy kilka zeskanowanych stron (około 600), dla których każda przeglądarka PDF wyświetla obraz z zerowym marginesem na prawej krawędzi, ale około 2 calowy margines po lewej stronie. (Prawdopodobnie podczas skanowania użyto niewłaściwego ustawienia)Jak przesunąć obrazy strony w plikach PDF bardziej w lewo lub w prawo?

Chcemy wydrukować te strony, najlepiej jako broszury. Czy istnieje sposób na trwałe przeniesienie wszystkich obrazów stron do centrum i sprawienie, że PDF będzie wyświetlał te strony również w bardziej przyjemny sposób? Czy Ghostscript może to zrobić? Czy można to zrobić za pomocą innej metody, na przykład programowo za pomocą jakiejś biblioteki przetwarzania plików PDF?

+0

To nie jest pytanie programistyczne i skorzystałoby z przeniesienia do SuperUser. – Robino

Odpowiedz

8

Jeśli nie chcesz, aby napisać swój własny kod programu (jak Nikolaus zasugerował), ale zamiast tego użyj linii poleceń Ghostscript, musisz znać 3 rzeczy:

  1. PostScript ma operatora setpagedevice, który pobiera parametr PageOffset;
  2. Ghostscript przetwarza fragmenty kodu PostScript, podając je w wierszu poleceń pod numerem -c ...;
  3. Ghostscript może oceniać i stosować (niektóre) kod PostScript nawet dla bezpośrednich konwersji PDF => PDF.

Teraz spróbuj tego wiersza poleceń do przesunięcia wszystkich obrazów stron na 1 cal (== 72pt) w lewo:

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 

(-dPDFSETTINGS=/prepress kładę się, żeby nie stracić żadnej jakość obrazu skany ...)

+0

Piękne! Działa to jak urok! –

+0

Mam teraz nowy problem. Chodzi o wyodrębnianie czcionek. Zadam osobne pytanie na ten temat. –

+0

@ Społeczność: ** NIE ** - Ghostscript robi ** nie ** wymaga odwrotnych ukośników zamiast przednich ukośników. Możesz zachować je w takim stanie, w jakim się znajdują i będzie działać tak samo. (Nie zaszkodzi zmienić się na ukośniki odwrotne ... może jednak zaistnieć potrzeba zmiany na ** podwójne ** ukośniki odwrotne dla niektórych wersji nawet ...) I ** NIE **, nie musisz zmieniać łączników ('-'), aby przesłać ukośnik ('/') - który można nawet zranić! Przywrócę twoją modyfikację, przepraszam! –

1

można użyć iText przenieść, skala lub crop pdf-pages

trzeba zdefiniować PdfReader do pliku źródłowego, oraz dokument do pliku docelowego następnie iteracyjne ciągu stronach jeśli czytelnik, utworzyć nową stronę w dokumencie i dodać sourcePage jako szablon do nowej strony (przesunięcie, skalowanie itp gdziekolwiek chcesz)

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(); 
Powiązane problemy