2009-01-19 2 views
11

Tôi đã tự hỏi liệu có ai có kinh nghiệm làm việc theo lập trình với tệp .pdf không. Tôi có tệp .pdf và tôi cần cắt mỗi trang xuống một kích thước nhất định.Trang cắt xén của tệp .pdf

Sau khi tìm kiếm nhanh trên Google, tôi đã tìm thấy thư viện pyPdf cho python nhưng các thử nghiệm của tôi không thành công. Khi tôi thay đổi thuộc tính cropBox và trimBox trên một đối tượng trang, các kết quả không phải là những gì tôi đã mong đợi và có vẻ khá ngẫu nhiên.

Có ai có kinh nghiệm với điều này không? Các ví dụ mã sẽ được đánh giá cao, tốt nhất là trong python.

+0

Câu hỏi hay nhưng một chút ngạc nhiên khi chưa được đóng quá rộng. –

Trả lời

19

pypdf làm những gì tôi mong đợi trong khu vực này. Sử dụng tập lệnh sau:

#!/usr/bin/python 
# 

from pyPdf import PdfFileWriter, PdfFileReader 

with open("in.pdf", "rb") as in_f: 
    input1 = PdfFileReader(in_f) 
    output = PdfFileWriter() 

    numPages = input1.getNumPages() 
    print "document has %s pages." % numPages 

    for i in range(numPages): 
     page = input1.getPage(i) 
     print page.mediaBox.getUpperRight_x(), page.mediaBox.getUpperRight_y() 
     page.trimBox.lowerLeft = (25, 25) 
     page.trimBox.upperRight = (225, 225) 
     page.cropBox.lowerLeft = (50, 50) 
     page.cropBox.upperRight = (200, 200) 
     output.addPage(page) 

    with open("out.pdf", "wb") as out_f: 
     output.write(out_f) 

Tài liệu kết quả có hộp cắt 200x200 điểm và bắt đầu ở 25,25 điểm bên trong hộp phương tiện. Hộp cắt là 25 điểm bên trong hộp cắt.

Sau đây là cách tài liệu mẫu tôi hiển thị trong Acrobat chuyên nghiệp sau khi xử lý với đoạn code trên: crop pages screenshot

Tài liệu này sẽ xuất hiện trống khi nạp trong Acrobat Reader.

+0

Mã này có cùng tác dụng như mã tôi đã thử nghiệm; các trang của tài liệu kết quả chắc chắn bị cắt nhưng tất cả đều trống. Bất kỳ ý tưởng tại sao có thể? – johannth

+0

Bạn có thể đã kiểm tra điều này nhưng tất cả những gì tôi có thể nghĩ là bạn đang cắt một vùng nhỏ của tệp PDF trống? Nếu bạn có quyền truy cập vào acrobat pro, bạn có thể sử dụng công cụ cắt trang để hiển thị tất cả các hộp trang. Tôi không biết bất kỳ công cụ miễn phí nào có thể làm được điều này. Có thể evince hoặc okular cho linux? – danio

+0

Tôi cảm thấy thực sự ngu ngốc. Tôi đã hiểu sai api và giả sử rằng cropbox là upperLeft, lowerRight. Vì vậy, tôi đã thực sự chỉ cắt xén thành một phần trống của trang. – johannth

1

Có thể bạn đang tìm kiếm một giải pháp miễn phí, nhưng nếu bạn có tiền để chi tiêu, PDFlib là một thư viện tuyệt vời. Nó chưa bao giờ làm tôi thất vọng.

0

Bạn có thể chuyển đổi PDF thành Postscript (pstopdf hoặc ps2pdf) và sử dụng xử lý văn bản trên tệp Postscript. Sau đó bạn có thể chuyển đổi đầu ra trở lại PDF.

Điều này hoạt động tốt nếu các tệp PDF bạn muốn xử lý được tạo bởi cùng một ứng dụng và có phần tương tự. Nếu chúng đến từ các nguồn khác nhau thì thường khó xử lý các tệp Postscript - cấu trúc có nhiều thay đổi. Nhưng ngay cả khi bạn di chuyển có thể sửa đổi kích thước trang và các loại tương tự với một vài cụm từ thông dụng.

0

Acrobat Javascript API có phương thức setPageBoxes, nhưng Adobe không cung cấp bất kỳ mẫu mã Python nào. Chỉ có C++, C# và VB.