Đầu tiên, cảm ơn mọi người đã đăng ở đây.
Tôi có tập lệnh nhỏ này được gọi là pdfScale đã hấp thụ các phần của câu trả lời được đăng ở đây. Vì vậy, tôi quyết định gửi lại 2 xu của tôi. Tôi đang sử dụng một chút pha trộn các câu trả lời của Kurt và Tim. Tương tự như của Tim.Tôi đã chơi với này trong một vài ngày và đây là kết luận của một phần của tôi về các phương pháp được đăng ở đây:
Set Khổ giấy theo Tên với -sPAPERSIZE
- Dễ dàng chỉ cần vượt qua tên giấy (Ví dụ. a4)
- không thể sản xuất 100% chính xác kích thước điểm
- May Lật Cảnh <> Chân dung
Đặt kích thước giấy trong PS-điểm -dDEVICEWIDTHPOINTS
, -dDEVICEHEIGHTPOINTS
- Tạo sự chắc chắn bạn sẽ có được kích thước mà bạn muốn trong điểm
- Bạn có thể lật WIDTH <> HEIGHT mình
- You need to know the sizes in Points
- Không dễ dàng như vậy để viết kịch bản xung quanh nó, vì bạn sẽ cần kích thước trang mới theo điểm và cũng sẽ cần kích thước trang của nguồn nếu bạn muốn phát hiện phong cảnh/dọc.
- Bạn cũng có thể đặt các giấy tờ tùy chỉnh được xác định (bất kỳ kích thước nào bạn muốn thực sự).
- Tôi đã sử dụng
-dDEVICEWIDTH
, -dDEVICEHEIGHT
thay vì phiên bản điểm dài hơn, nhưng cả hai dường như làm điều tương tự (cả hai đều nhận điểm).
Vì tập lệnh bash của tôi đã có khả năng nhận kích thước trang nguồn và tôi thích ý tưởng để có thể đặt kích thước trang tùy chỉnh, tôi quyết định tập trung vào việc đặt kích thước trang theo điểm. Tôi cũng đã bao gồm GS Paper Sizes trong tập lệnh của mình (có tên và kích cỡ). Vì vậy, nhận được thông tin đó cũng dễ dàng.
Sử dụng -dFIXEDMEDIA
có vẻ là phải có trên cả hai trường hợp, như được chỉ ra trước đây.
Vì vậy, đây là cách tiếp cận của tôi đã đi (theo một cách kịch bản) kích thước
- Nhận trang Nguồn PDF (Đối với Detection Flip)
- Nhận kích thước trang của mục tiêu trong điểm (Ví dụ. A4> 595x842)
- Kiểm tra họ có cùng một định hướng hay flip Target nếu cần thiết
- Run GS với điểm hoặc lật điểm
Khi tôi đang cố khắc phục sự cố tự động xoay, I found this other Kurt response. Đây là về việc sử dụng -dAutoRotatePages
. Chỉ cần sao chép một phần câu trả lời của mình tại đây:
-dAutoRotatePages=/None
- giữ lại hướng của mỗi trang;
-dAutoRotatePages=/All
- xoay tất cả các trang (hoặc không có) tùy thuộc vào loại "quyết định đa số";
-dAutoRotatePages=/PageByPage
- tự động xoay trang riêng lẻ.
Tập lệnh mặc định là PageByPage
nhưng điều chỉnh được. Nó hoạt động tốt trong các bài kiểm tra của tôi. Sử dụng -dAutoRotatePages
cũng có vẻ làm giảm nhu cầu kích thước trang trước khi lật, mặc dù nó không giống nhau. Tôi giữ cả hai lựa chọn.
Ứng dụng nhỏ của tôi ban đầu được tạo để mở rộng các tệp PDF (mà không thay đổi kích thước trang). Sau đó, tôi thêm vào bây giờ các chức năng để làm một, khác hoặc cả hai. Tôi vẫn không thể làm tất cả trong một cuộc gọi GS duy nhất mặc dù.
Đây là những gì tôi đang gọi để thay đổi kích thước, thay đổi các biến thành giá trị thực. Đây là kích thước Portrait A4 với PageByPage
tự động xoay:
gs \
-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \
-dCompatibilityLevel="1.5" -dPDFSETTINGS="/printer" \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dSubsetFonts=true -dEmbedAllFonts=true \
-dDEVICEWIDTHPOINTS=595 -dDEVICEHEIGHTPOINTS=842 \
-dAutoRotatePages='/PageByPage' \
-dFIXEDMEDIA -dPDFFitPage \
-sOutputFile='../myOutputFile.pdf' \
-f '../input.pdf'
Xin lưu ý rằng tôi cũng đang sử dụng -dFIXEDMEDIA
VÀ -dPDFFitPage
. Bởi vì điều này phù hợp với trang, phần khác của kịch bản của tôi có thể hữu ích để mở rộng nội dung bên trong PDF sau khi thay đổi kích thước (đặc biệt nếu tỷ lệ PDF thay đổi rất nhiều). Và đó là một trong những lý do tôi luôn chạy quy mô sau khi thay đổi kích thước trong kịch bản của tôi (trong chế độ hỗn hợp).
Về vấn đề phân số khi sử dụng Tên giấy, tôi đã xảy ra với tôi trước khi tôi làm tròn các chuyển đổi từ mm/inch thành điểm. Sau khi tôi bắt đầu làm tròn chúng, chúng dường như luôn là thứ cần thiết. Có vẻ kỳ lạ rằng GS sẽ sàn những giá trị đó mặc dù.
Vì vậy, kết luận của tôi là phần khó khăn là tìm một giải pháp hoạt động trên bảng trên các tài liệu khác nhau với các kích thước và định hướng khác nhau. Tôi vẫn không chắc tôi đang sử dụng giải pháp thích hợp. Nhưng bằng cách cho phép người dùng thay đổi Flip Detection và GS Auto-Rotation tôi hy vọng sẽ có một giải pháp cho ít nhất là hầu hết các trường hợp.
Tôi cũng đã xây dựng lại hầu hết mã trong quy trình và rất dễ đọc ngay bây giờ. Có thể hữu ích khi kiểm tra nếu bạn muốn tự động hóa tác vụ như vậy. Cũng hữu ích để chỉ quy mô/thay đổi kích thước tập tin PDF cũng tất nhiên:
https://github.com/tavinus/pdfScale
PS: pdfScale có nguồn gốc từ on this StackOverflow thread.
Cảm ơn bạn đã trả lời, tôi đã sử dụng đối số -dPDFFITPAGE và điều này không làm cho nó hoạt động. – Matt
Có nhiều cách (những thứ xấu xí) để mở rộng đầu vào PDF, nhưng thường không bắt buộc. Bạn có thể chia sẻ một tệp ví dụ để xem không? – KenS
@Matt: Tôi nghĩ nó sẽ hoạt động nếu bạn thêm công tắc '-dFIXEDMEDIA' ... –