Làm cách nào để tôi có thể tách tệp PDF thành các trang đơn một cách nhanh chóng (tức là từ dòng lệnh Terminal)?


23

Tôi có một tệp PDF dài 6 trang mà tôi muốn chia thành 1.pdf, 2.pdf, 3.pdf, v.v ...

Xem trước không hoạt động cho điều này đáng ngạc nhiên (trừ khi tôi đang thiếu một cái gì đó).

Tôi rất thích có thể thực hiện nhiệm vụ đơn giản này từ dòng lệnh, nhưng tại thời điểm này tôi sẽ nhận bất cứ điều gì hoàn thành công việc (mà không cần tải xuống phần mềm sơ sài)

FYI http://users.skynet.be/tools/ không hoạt động như quảng cáo.


2
Một giải pháp dòng lệnh tốt là từ câu trả lời SE này . Bạn có thể cài đặt ghostscript bằng Homebrew .
fideli

Câu trả lời:


21

Mở pdf trong bản xem trước và sau đó trên menu xem chọn hình thu nhỏ. Ctrl chọn các trang mà bạn muốn bây giờ kéo và thả chúng vào màn hình nền.


1
Điều này làm việc tốt. Mất khoảng 30 giây để làm điều này sau khi bay khoảng 30 phút. Một số người đang sử dụng kỹ thuật này kết hợp với w / Automator nhưng tôi chưa thử.
dùng391339

35

Điều này có thể đạt được bằng cách sử dụng pdfseparate. Bạn có thể cài đặt poppler với homebrew, bởi brew install poppler. Điều này cũng sẽ cài đặt pdfseparate. Để chia PDF document.pdfvào vào các trang đơn 1.pdf, 2.pdfvv sử dụng:

pdfseparate document.pdf %d.pdf

1
Chỉ cần cài đặt popplermột ngày trước để có thể chuyển đổi tài liệu PDF sang SVG pdf2svg. Không nhận thấy rằng popplerđi kèm với pdfseparatelệnh. Vì câu trả lời được chấp nhận ở trên (kéo và thả tất cả các trang PDF có xem trước vào máy tính để bàn) yêu cầu tôi "nhấp xung quanh" và vì tôi thích các giải pháp trên thiết bị đầu cuối hoạt động tự động chỉ bằng một dòng lệnh, pdfseparatechính xác là những gì tôi cần. Cảm ơn rất nhiều cho gợi ý đó!
Arvid

Thật thú vị, pdfseparate tạo ra các tệp pdf có tổng kích thước lớn hơn nhiều so với kích thước của pdf gốc. Tôi đã có một tài liệu 400 trang với 1,9 MB. Sau khi chia tách, tôi nhận được khoảng 60 MB.
Konstantin

5

Nếu bạn quan tâm đến việc này từ dòng lệnh, bạn có thể xem tập lệnh python splitPDF của Benjamin Han để thực hiện công việc. Ví dụ:

splitPDF.py in.pdf 3 5

sẽ chia tệp in.pdfthành 3 tệp, tách ở trang 3 và 5.


Điều này là tốt, và linh hoạt hơn một chút trong những gì bạn có thể xuất ra so với pdfseparate ở trên. Mặc dù chủ yếu là để chia pdf thành nhiều trang, nhưng nếu bạn muốn tách từng trang, bạn có thể dễ dàng sử dụng seqđể tạo ra một dãy số trong lệnh của mình. Cảm ơn!
dgig

1
một cái gì đó giống như python splitPDF.py MyPDF.pdf $(seq -s ' ' 1 10 411)đã làm việc cho tôi
dgig

1
Những từ tuyệt vời. Tôi xác nhận điều này hoạt động trực tiếp trên MacOS 10.13.3
MichaelCodes

1

Đối với một thay thế khác, xem câu trả lời này . Điều này sử dụng các công cụ dòng lệnh ImageMagick .

convert x.pdf -quality 100 -density 300x300 x-%04d.pdf

Tuy nhiên, bạn phải cẩn thận với chất lượng.


1

Nếu bạn muốn trích xuất một loạt các trang, bạn có thể sử dụng tập lệnh sau mà bạn gọi như thế này (giả sử rằng bạn lưu nó vào tệp pdfextract.py ở đâu đó trên PATH của hệ thống, ví dụ / usr / local / bin và gán cho nó thực thi quyền với chmod 744 pdfextract.py):

pdfextract.py --file-in / path / to / Large / pdf --file-out / path / to / new / pdf --start --stop

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import argparse
import os
import subprocess as sp


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--file-in', required=True, type=str, dest='file_in')
    parser.add_argument('--file-out', required=True, type=str, dest='file_out')
    parser.add_argument('--start', required=True, type=int, dest='start', default=-1)
    parser.add_argument('--stop', required=True, type=int, dest='stop', default=-1)

    args = parser.parse_args()
    assert os.path.isfile(args.file_in)
    assert not os.path.isfile(args.file_out)

    # remove temporary files
    for el in os.listdir('/tmp'):
        if os.path.isfile(os.path.join('/tmp', el)) and el[:12] == 'pdfseparate-':
            os.remove(os.path.join('/tmp', el))

    sp.check_call('pdfseparate -f {:d} -l {:d} {:s} /tmp/pdfseparate-%d.pdf'.format(args.start, args.stop, args.file_in), shell=True)

    cmd_unite = 'pdfunite '
    for i in range(args.start, args.stop + 1):
        cmd_unite += '/tmp/pdfseparate-{:d}.pdf '.format(i)
    cmd_unite += args.file_out
    sp.check_call(cmd_unite, shell=True)

    # remove temporary files
    for el in os.listdir('/tmp'):
        if os.path.isfile(os.path.join('/tmp', el)) and el[:12] == 'pdfseparate-':
            os.remove(os.path.join('/tmp', el))


if __name__ == "__main__":
    main()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.