Nasıl pdf 'ayırma' için


10

Kitapçık biçiminde yapılmış bir pdf dosyam var. A4 boyutunda kağıda yatay yönde baskı yapılması amaçlanmıştır; pdf'de gerçek kitaptaki dört sayfaya karşılık gelmesi gereken iki sayfa var.

 -------------------------------
|              |                |
|              |                |
|              |                |
|    (1)       |      (3)       |
|              |                |
|              |                |
|              |                |
 ------------------------------- 

 -------------------------------
|              |                |
|              |                |
|              |                |
|    (4)       |      (2)       |
|              |                |
|              |                |
|              |                |
 -------------------------------

Köşeli ayraçlı sayılar, tek tek sayfaların sırasına karşılık gelir.

Linux üzerinde her türlü komut (pdfbook, pdfnup, vb.) Olduğunu biliyorum (muhtemelen bu kitapçığı ilk etapta yapmak için kullanılır). Nasıl 'kitap' nasıl --- yani, nihai ürünün her tek tek sayfa pdf, her zamanki gibi sipariş ayrı bir sayfa olduğu bir pdf belgesi yapmak istiyorum.

Düzenle

Gilles sayesinde aşağıdaki kodu kullanmayı başardım:

import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
second_half = []
for i in range(0,input.getNumPages()):
    p = input.getPage(i)
    q = copy.copy(p)

    print >> sys.stderr, 'splitting page',i
    print >> sys.stderr, '\tlowerLeft:',p.mediaBox.lowerLeft
    print >> sys.stderr, '\tupperRight:',p.mediaBox.upperRight

    p.mediaBox.upperRight = (ur[0], (bl[1]+ur[1])/2)
    p.mediaBox.lowerLeft = bl

    q.mediaBox.upperRight = ur
    q.mediaBox.lowerLeft = (bl[0], (bl[1]+ur[1])/2)

    if i % 2 == 0:
        output.addPage(p)
        qold = q
    else:
        output.addPage(q)
        output.addPage(qold)
        output.addPage(p)
output.write(sys.stdout)


@AdamZalcman Neden? Bir Linux programı arıyor
Michael Mrozek

2
Sen olabilir sorununuza (Gilles tarafından) bu soru cevabını adapte yani bir pyPdf komut dosyası oluşturmak.
sr_

Sayfa 3 ve 4'ü değiştirmediğinizden emin misiniz? Matbaada çalıştım; Bu düzen bir anlam ifade etmiyor ....
Wildcard

Yanıtlar:


4

İşte işi yapan PyPdf kütüphanesini kullanan küçük bir Python betiği . (Türetilmiş un2up.) Adlı bir komut dosyasına kaydedin unbook, yürütülebilir ( chmod +x unbook) yapın ve bir filtre ( unbook <book.pdf >1up.pdf) olarak çalıştırın .

Bu komut dosyasını çıktısında test ettim pdfbook --signature=N. Başka bir yöntem için, diğer tüm giriş sayfalarını ters çevirmeniz gerekmeyebilir ve sayfa sırası farklı olabilir (yatay sayfaların yönüne bağlıdır). Sayfa düzeni, sorunuzla eşleşmiyor; 13,42 bana mantıklı gelmiyor (4 sayfalık bir kitapta 3, 2'nin yanında olmalı, 1'in yanında değil).

#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
second_half = []
for i in range(0,input.getNumPages()):
    p = input.getPage(i)
    q = copy.copy(p)
    (w, h) = p.mediaBox.upperRight
    p.mediaBox.upperRight = (w/2, h)
    q.mediaBox.upperLeft = (w/2, h)
    if i % 2 == 0:
        p.rotateClockwise(180)
        q.rotateClockwise(180)
        output.addPage(p)
        second_half.append(q)
    else:
        output.addPage(p)
        second_half.append(q)
second_half.reverse()
for q in second_half: output.addPage(q)
output.write(sys.stdout)

Kullanımdan kaldırma uyarılarını dikkate almayın; bunlarla yalnızca PyPdf sahipleri ilgilenmelidir.


Bu bir süre önce soruldu, ancak çözümünüzü uygulamakta sorun yaşıyorum. OSX kullanıyorum, MacPorts üzerinden python ve py27-pypdf yükledim. Bir kitap dosyası oluşturdum ve komut dosyasını kopyalayıp yapıştırdım. Komutu talimatlara uygun şekilde çalıştırmak 0 baytlık yeni bir 1up.pdf dosyası oluşturur. Hiçbir hata veya hiçbir şey benim terminal listelenen, ancak komut yürütüldüğünde, hiçbir şey olmuyor (CTRL-C dışarı zorunda); sistem takılmıyor ve hiçbir şey yapmıyor gibi görünüyor. Sorunu nasıl takip edebilirim? @Gilles
TSGM

@TSGM En olası açıklama, <giriş dosyasından önce unutmuş olmanızdır . Komutu doğru yazdığınızdan kesinlikle eminseniz, bu PyPdf kütüphanesinde bir hata olabilir (henüz başarısız olmadı, ancak olabilir).
Gilles 'SO- kötü olmayı bırak

Sorun "python unbook <in.pdf> out.pdf" üzerinden python çağırmak gerekiyordu oldu. Aptal bana. Ayrıca, kod biraz garipti (sonunda ikinci_half sayfaları yapışıyordu. Ben orijinal yazı yazdım biçimi için düzeltilmiş gibi görünüyor). Sonunda kullandığım kodu içerecek şekilde orijinal yanıtımı düzenledim. Ayrıca, sayfa boyutu komutları yanlış gibi görünüyor. Ben de düzelttim. @Gilles
TSGM

@TSGM Kod, her zamanki kitap düzeni olan 1 | 4 ön yüz, 2 | 3 ters düzen kabul eder. Sayfalarınız farklı şekilde düzenlenmişse, ince ayar yapmanız gerekebilir. Bu ortamda sahada test edilmiştir. Açıkça aramak zorunda pythonkaldığın benim hatamdı: Bir shebang hattı koymalıydım, ekledi.
Gilles 'SO- kötü olmayı bırak'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.