Bagaimana saya bisa membagi file PDF menjadi satu halaman dengan cepat (yaitu dari baris perintah Terminal)?

23

Saya memiliki file PDF sepanjang 6 halaman yang ingin saya bagi menjadi 1.pdf, 2.pdf, 3.pdf, dll ...

Pratinjau tidak berfungsi untuk ini secara mengejutkan (kecuali jika saya melewatkan sesuatu).

Saya ingin sekali dapat melakukan tugas sederhana ini dari baris perintah, tetapi pada titik ini saya akan mengambil apa pun yang menyelesaikan pekerjaan (tanpa mengunduh perangkat lunak yang tidak jelas)

FYI http://users.skynet.be/tools/ tidak berfungsi seperti yang diiklankan.

pengguna391339
sumber
2
Solusi baris perintah yang baik adalah dari jawaban SE ini . Anda dapat menginstal ghostscript menggunakan Homebrew .
fideli

Jawaban:

21

Buka pdf di pratinjau dan kemudian pada menu tampilan pilih thumbnail. Ctrl untuk memilih halaman yang Anda inginkan sekarang seret dan jatuhkan ke desktop.

eleethesontai
sumber
1
Ini bekerja dengan baik. Butuh waktu sekitar 30 detik untuk melakukan ini setelah terbang sekitar 30 menit. Beberapa orang menggunakan teknik ini bersama w / Automator tapi saya belum mencobanya.
user391339
35

Ini bisa dicapai dengan menggunakan pdfseparate. Anda dapat menginstal poppler dengan homebrew, dengan brew install poppler. Ini juga akan menginstal pdfseparate. Untuk membagi PDF document.pdfke dalam halaman tunggal 1.pdf, 2.pdfdll penggunaan:

pdfseparate document.pdf %d.pdf
ttq
sumber
1
Baru diinstal popplersehari yang lalu karena dapat mengkonversi dokumen PDF ke SVG pdf2svg. Tidak memperhatikan yang popplerdatang dengan pdfseparateperintah. Karena jawaban yang diterima di atas (menyeret dan menjatuhkan semua halaman PDF dengan pratinjau ke desktop) mengharuskan saya untuk "mengklik" dan karena saya suka solusi pada terminal yang bekerja secara otomatis hanya dengan satu baris perintah, pdfseparateadalah persis apa yang saya butuhkan. Terima kasih banyak untuk petunjuk itu!
Arvid
Menariknya, pdfseparate menghasilkan pdf yang ukuran totalnya jauh lebih besar daripada ukuran pdf asli. Saya memiliki dokumen 400 halaman dengan 1,9 MB. Setelah membelah, saya mendapat sekitar 60 MB.
Konstantin
5

Jika Anda tertarik untuk melakukan ini dari baris perintah, Anda dapat melihat skrip python splitPDF Benjamin Han untuk melakukan pekerjaan itu. Contohnya:

splitPDF.py in.pdf 3 5

akan membagi file in.pdfmenjadi 3 file, membelah pada halaman 3 dan 5.

Jean-Philippe Pellet
sumber
Ini bagus, dan sedikit lebih fleksibel dalam apa yang Anda dapat hasilkan daripada pdfseparate di atas. Meskipun ini terutama untuk membagi pdf menjadi chuck halaman, jika Anda memang ingin membagi setiap halaman, Anda dapat dengan mudah menggunakan sequntuk menghasilkan serangkaian angka dalam perintah Anda. Terima kasih!
dgig
1
sesuatu seperti python splitPDF.py MyPDF.pdf $(seq -s ' ' 1 10 411)bekerja untuk saya
dgig
1
Kata-kata bagus. Saya mengkonfirmasi ini bekerja langsung di MacOS 10.13.3
MichaelCodes
1

Untuk alternatif lain, lihat jawaban ini . Ini menggunakan alat baris perintah ImageMagick .

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

Namun, Anda harus berhati-hati dengan kualitasnya.

pheon
sumber
1

Jika Anda ingin mengekstrak berbagai halaman, Anda dapat menggunakan skrip berikut yang Anda sebut seperti ini (diasumsikan bahwa Anda menyimpannya ke file pdfextract.py di suatu tempat di PATH sistem Anda, mis. / Usr / local / bin, dan tetapkan eksekusi izin dengan chmod 744 pdfextract.py):

pdfextract.py --file-in / path / ke / besar / pdf --file-out / path / ke / baru / 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()
Konstantin
sumber