ฉันจะแยกไฟล์ PDF เป็นหน้าเดียวได้อย่างรวดเร็ว (เช่นจากบรรทัดคำสั่ง Terminal) ได้อย่างไร


23

ฉันมีไฟล์ PDF ยาว 6 หน้าซึ่งฉันต้องการแบ่งออกเป็น 1.pdf, 2.pdf, 3.pdf ฯลฯ ...

ดูตัวอย่างไม่ได้ผลสำหรับเรื่องนี้อย่างน่าประหลาดใจ (เว้นแต่ฉันจะพลาดบางสิ่ง)

ฉันชอบที่จะสามารถทำงานง่ายๆจากบรรทัดคำสั่งได้ แต่ ณ จุดนี้ฉันจะทำทุกอย่างที่ทำให้งานเสร็จ (โดยไม่ต้องดาวน์โหลดซอฟต์แวร์สเก็ตช์)

FYI http://users.skynet.be/tools/ไม่ทำงานตามที่โฆษณาไว้


2
โซลูชันบรรทัดคำสั่งที่ดีมาจากคำตอบ SEนี้ คุณสามารถติดตั้ง Ghostscript ใช้Homebrew
fideli

คำตอบ:


21

เปิดไฟล์ PDF ในหน้าตัวอย่างแล้วเลือกเมนูภาพขนาดย่อ Ctrl เลือกหน้าที่คุณต้องการลากแล้ววางลงบนเดสก์ท็อป


1
มันใช้งานได้ดี ใช้เวลาประมาณ 30 วินาทีในการทำเช่นนี้หลังจากใช้เวลาประมาณ 30 นาที บางคนใช้เทคนิคนี้ร่วมกับ Automator แต่ฉันยังไม่ได้ลองเลย
user391339

35

pdfseparateนี้สามารถทำได้โดยการใช้ คุณสามารถติดตั้งกับ poppler homebrew brew install popplerโดย pdfseparateนอกจากนี้ยังจะติดตั้ง ในการแยกไฟล์ PDF document.pdfลงในลงในหน้าเดียว1.pdf, 2.pdfฯลฯ ใช้งาน:

pdfseparate document.pdf %d.pdf

1
เพียงแค่ติดตั้งpopplerวันที่ผ่านมาสำหรับความสามารถในการแปลงเอกสาร PDF เพื่อ SVG pdf2svgกับ ไม่ได้สังเกตว่าpopplerมาพร้อมกับpdfseparateคำสั่ง ตั้งแต่คำตอบที่ได้รับการยอมรับด้านบน (ลากและวางหน้า PDF ทั้งหมดที่มีการแสดงตัวอย่างให้เดสก์ทอป) ต้องการให้ฉัน "คลิกรอบ" และตั้งแต่ผมเช่นการแก้ปัญหาในการทำงานที่สถานีโดยอัตโนมัติโดยเพียงบรรทัดคำสั่งเดียวpdfseparateคือสิ่งที่ฉันต้องการ ขอบคุณมากสำหรับคำใบ้นั้น!
Arvid

ที่น่าสนใจ pdfseparate ผลิตไฟล์ PDF ที่มีขนาดโดยรวมใหญ่กว่าขนาดของ pdf ต้นฉบับมาก ฉันมีเอกสาร 400 หน้าขนาด 1.9 MB หลังจากแยกฉันได้บางอย่างประมาณ 60 MB
Konstantin

5

หากคุณสนใจที่จะทำสิ่งนี้จากบรรทัดคำสั่งคุณสามารถดูสคริปต์ python SplitPDF ของ Benjamin Hanเพื่อทำงาน ตัวอย่างเช่น

splitPDF.py in.pdf 3 5

จะแบ่งไฟล์in.pdfออกเป็น 3 ไฟล์โดยแยกที่หน้า 3 และ 5


นี่เป็นสิ่งที่ดีและมีความยืดหยุ่นมากขึ้นในสิ่งที่คุณสามารถส่งออกได้มากกว่า pdf แยกต่างหากข้างต้น แม้ว่าส่วนใหญ่จะเป็นการแยก pdf เป็น chucks ของหน้าเว็บหากคุณไม่ต้องการแยกแต่ละหน้าคุณสามารถใช้seqเพื่อสร้างช่วงของตัวเลขในคำสั่งของคุณได้อย่างง่ายดาย ขอบคุณ!
dgig

1
สิ่งที่ชอบpython splitPDF.py MyPDF.pdf $(seq -s ' ' 1 10 411)สำหรับฉัน
dgig

1
คำพูดที่ดี ฉันยืนยันการทำงานนี้โดยตรงบน MacOS 10.13.3
MichaelCodes

1

สำหรับทางเลือกอื่นดูคำตอบนี้ สิ่งนี้ใช้เครื่องมือบรรทัดคำสั่งของImageMagick

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

อย่างไรก็ตามคุณต้องระวังคุณภาพ


1

หากคุณต้องการแยกช่วงของหน้าเว็บคุณสามารถใช้สคริปต์ต่อไปนี้ซึ่งคุณเรียกเช่นนี้ (สันนิษฐานว่าคุณบันทึกไว้ในไฟล์ pdfextract.py ที่ใดที่หนึ่งบน PATH ของระบบของคุณเช่น / usr / local / bin และกำหนดการดำเนินการ การอนุญาตด้วย chmod 744 pdfextract.py):

pdfextract.py - ไฟล์ใน / เส้นทาง / ถึง / ใหญ่ / pdf - ไฟล์ออก / เส้นทาง / ไป / ใหม่ / pdf - เริ่มต้น - หยุด

#!/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()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.