2010-08-10 33 views
7

Chúng tôi có một loạt các trang được quét (khoảng 600 trang) mà mỗi trình xem PDF hiển thị hình ảnh với lề không ở cạnh phải, nhưng khoảng lề 2 inch ở bên trái. (Có lẽ trong khi quét, đã có cài đặt sai được sử dụng ...)Làm cách nào để thay đổi hình ảnh trang trong các tệp PDF sang trái hoặc sang phải?

Chúng tôi muốn in các trang này, tốt nhất là tập sách nhỏ. Có cách nào để thay đổi vĩnh viễn tất cả các hình ảnh trang về phía trung tâm và có hiển thị PDF các trang này cũng theo cách dễ chịu hơn không? Ghostscript có thể làm điều đó không? Có thể làm điều này với một số phương pháp khác, chẳng hạn như lập trình với sự giúp đỡ của một số thư viện xử lý PDF?

+0

Đây không phải là câu hỏi lập trình và sẽ được hưởng lợi từ việc được chuyển sang SuperUser. – Robino

Trả lời

8

Nếu bạn không muốn viết mã chương trình của riêng bạn (như Nikolaus được đề xuất), nhưng thay vào đó sử dụng dòng lệnh Ghostscript, bạn cần biết 3 điều:

  1. PostScript có một thông số setpagedevice có tham số PageOffset;
  2. Ghostscript sẽ xử lý các đoạn mã PostScript nếu bạn chuyển chúng bằng -c ... trên dòng lệnh;
  3. Ghostscript có thể đánh giá và áp dụng (một số) Mã PostScript ngay cả đối với chuyển đổi trực tiếp PDF => PDF.

Bây giờ hãy thử dòng lệnh này để chuyển tất cả hình ảnh trang bằng 1 inch (== 72pt) sang trái:

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 

(Các -dPDFSETTINGS=/prepress tôi đưa vào để không mất bất kỳ chất lượng hình ảnh của quét ...)

+0

Đẹp! Công việc này như một cái duyên vậy! –

+0

Tôi gặp sự cố mới ngay bây giờ. Đó là về giải nén phông chữ. Tôi sẽ hỏi một câu hỏi riêng về điều này. –

+0

@ Cộng đồng: ** NO ** - Ghostscript không ** không ** yêu cầu dấu gạch chéo ngược thay vì dấu gạch chéo chuyển tiếp. Bạn có thể giữ chúng như chúng và nó sẽ hoạt động tương tự. (Tuy nhiên, bạn không cần phải thay đổi dấu gạch chéo ngược ... tuy nhiên, bạn có thể cần phải thay đổi thành ** gấp đôi ** dấu gạch chéo ngược cho một số phiên bản ngay cả ...) Và ** KHÔNG **, bạn không cần thay đổi dấu gạch ngang ('-') để chuyển tiếp dấu gạch chéo ('/') - cái đó thậm chí có thể làm tổn thương! Tôi sẽ hoàn nguyên sửa đổi của bạn, xin lỗi! –

1

bạn có thể sử dụng iText để di chuyển, quy mô hoặc cây trồng pdf-trang

bạn cần phải xác định một PdfReader cho file nguồn của bạn, và một tài liệu cho tập tin mục tiêu của bạn sau đó bạn duyệt qua các trang nếu Reader, tạo ra một trang mới trong văn kiện và thêm sourcePage như một Template cho trang mới (thay đổi, mở rộng quy mô vv bất cứ nơi nào bạn muốn)

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(); 
Các vấn đề liên quan