Bir PDF dosyasını hızlı bir şekilde tek bir sayfaya nasıl bölebilirim (örneğin, Terminal komut satırından)?


23

6 sayfa uzunluğunda 1.pdf, 2.pdf, 3.pdf, vb. Bölmek istediğim bir PDF dosyası var.

Önizleme bunun için şaşırtıcı bir şekilde çalışmıyor (bir şey eksik olmadıkça).

Bu basit görevi komut satırından yapabilmek isterim, ancak bu noktada işi yapan her şeyi alacağım (kabataslak yazılım indirmeden)

FYI http://users.skynet.be/tools/ reklamı yapılan gibi çalışmaz.


2
Bu SE cevabından iyi bir komut satırı çözümü . Homebrew kullanarak ghostscript yükleyebilirsiniz .
fideli

Yanıtlar:


21

PDF'yi önizlemede açın ve ardından görünüm menüsünde küçük resimleri seçin. Ctrl artık istediğiniz sayfaları seçip masaüstüne sürükleyip bırakın.


1
Bu iyi çalıştı. Yaklaşık 30 dakika salladı sonra bunu yapmak için yaklaşık 30 saniye sürdü. Bazı insanlar bu tekniği Automator ile birlikte kullanıyor ama henüz denemedim.
user391339

35

Bunu kullanarak elde edilebilir pdfseparate. Popebler'ı homebrew ile kurabilirsiniz brew install poppler. Bu da yüklenecektir pdfseparate. PDF bölmek için document.pdftek sayfalar halinde içine 1.pdf, 2.pdfvb kullanım:

pdfseparate document.pdf %d.pdf

1
popplerPDF belgelerini SVG'ye dönüştürmek için bir gün önce yükledim pdf2svg. Komuta popplerile gelen fark etmedi pdfseparate. Yukarıdaki kabul edilen cevap (tüm PDF sayfalarını önizleme ile masaüstüne sürükleyip bırakmak) benim "tıklamamı" gerektirdiğinden ve terminalde sadece tek bir komut satırı pdfseparateile otomatik olarak çalışan çözümleri sevdiğimden , tam olarak ihtiyacım olan şey. Bu ipucu için çok teşekkürler!
Arvid

İlginçtir, pdfseparate, toplam boyutu orijinal pdf'in boyutundan çok daha büyük olan pdfs üretir. 1.9 MB boyutunda 400 sayfalık bir dokümanım vardı. Ayrıldıktan sonra 60 MB civarında bir şey aldım.
Konstantin

5

Bunu komut satırından yapmak istiyorsanız, işi yapmak için Benjamin Han'ın splitPDF python komut dosyasına bakabilirsiniz . Örneğin:

splitPDF.py in.pdf 3 5

dosyayı in.pdf3 dosyaya bölerek 3. ve 5. sayfalara böler .


Bu iyi ve ne pdfseparate yukarıdaki çıktı göre biraz daha esnektir. Esas olarak bir pdf'yi sayfa mandrellerine bölmek olsa da, her sayfayı bölmek isterseniz seq, komutunuzda bir dizi sayı üretmek için kolayca kullanabilirsiniz . Teşekkürler!
dgig

1
python splitPDF.py MyPDF.pdf $(seq -s ' ' 1 10 411)benim için bir şey çalıştı
dgig

1
Harika kelimeler. Bunun doğrudan MacOS 10.13.3'te çalıştığını onaylıyorum
MichaelCodes

1

Başka bir alternatif için bu cevaba bakınız . Bu, ImageMagick komut satırı araçlarını kullanır .

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

Ancak, kaliteye dikkat etmelisiniz.


1

Bir dizi sayfayı ayıklamak istiyorsanız, şöyle çağırdığınız aşağıdaki komut dosyasını kullanabilirsiniz (bunu sisteminizin PATH'sinde bir yere pdfextract.py dosyasına kaydettiğinizi ve örneğin / usr / local / bin varsa ve yürütmeyi atadığınızı varsayalım) chmod 744 pdfextract.py ile ilgili izin):

pdfextract.py --file-in / path / to / large / pdf --file-out / path / to / new / pdf - başlangıç ​​- durdur

#!/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()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.