แปลงทุก pdf ในไดเรกทอรีปัจจุบันเป็น png


16

ฉันต้องการเขียนbashสคริปต์เพื่อแปลง.pdfไฟล์ทุกไฟล์ในไดเรกทอรีปัจจุบันเป็น.pngไฟล์ ตัวอย่างเช่น:

$ls .
a.pdf b.pdf
$./pdf2png.sh
Converting pdfs to pngs
a.pdf -> a.png
b.pdf -> b.png

นี่คือความพยายามที่ดีที่สุดของฉัน:

#!/bin/bash
convert -verbose -density 500 -resize '800' a.pdf a.png
convert -verbose -density 500 -resize '800' b.pdf b.png

คำตอบ:


17

ถ้าคุณมีจริงๆชื่อแปลกคนที่มีการขึ้นบรรทัดใหม่หรือเครื่องหมายและชอบคุณสามารถทำอะไรเช่นนี้

find . -type f -name '*.pdf' -print0 |
  while IFS= read -r -d '' file
    do convert -verbose -density 500 -resize 800 "${file}" "${file%.*}.png"
  done

ที่ควรจะสามารถจัดการกับอะไรก็ได้ที่คุณโยนมัน

เทคนิคที่ใช้:

  • find ... -print0: สาเหตุที่findจะพิมพ์ผลลัพธ์โดยคั่นด้วยอักขระ null ให้เราจัดการกับบรรทัดใหม่
  • IFS= : สิ่งนี้จะปิดการใช้งานการแยกคำที่จำเป็นในการจัดการกับพื้นที่สีขาว
  • read -r: ปิดใช้งานการตีความอักขระหลบหลีกแบ็กสแลชเพื่อจัดการกับไฟล์ที่มีแบ็กสแลช
  • read -d '': ตั้งค่าตัวคั่นเร็กคอร์ดเป็นอักขระ null เพื่อจัดการกับเอาต์พุตของ find และจัดการชื่อไฟล์อย่างถูกต้องด้วยอักขระบรรทัดใหม่
  • ${file%.*}.png: ใช้ความสามารถในการจัดการสตริง inbuilt ของเชลล์เพื่อลบส่วนขยาย

คำตอบทั้งสองเป็นสิ่งที่ดี แต่ฉันยอมรับคำตอบนี้เพราะมันมาพร้อมกับคำอธิบายของเทคนิคที่ใช้
ฉันชอบรหัส

หรือทำแบบพกพา (POSIX) และยังจัดการอักขระพิเศษใด ๆ : find . -type f -name '*.pdf' -exec sh -c 'for f do convert -verbose -density 500 -resize 800 "$f" "${f%.pdf}.png"; done' find-sh {} + ดูunix.stackexchange.com/a/321753/135943สำหรับคำอธิบายและพื้นหลัง
สัญลักษณ์แทน

1
@Wildcard สิ่งเดียวที่ไม่ใช่ posix ที่นี่คือการค้นหา-printfดังนั้นสิ่งที่คุณต้องการสำหรับการพกพาคือการแทนที่ด้วย `-exec printf '% s \ 0' {} + '
terdon

14

คุณสามารถใช้ bash forloop ดังต่อไปนี้:

#!/bin/bash
for pdfile in *.pdf ; do
  convert -verbose -density 500 -resize '800' "${pdfile}" "${pdfile%.*}".png
done

7

คุณสามารถใช้mogrifyในการแปลงชุดและปรับขนาดทั้งหมด.pdfในไดเรกทอรีปัจจุบัน:

mogrify -verbose -density 500 -resize 800 -format png ./*.pdf

เมื่อมีการใช้ที่แตกต่างกันformat(ในกรณีนี้-format png) เดิม.pdfs formatที่เหลือแตะต้องไฟล์ที่ส่งออกที่มีชื่อเดียวกันยกเว้นสำหรับการขยายซึ่งจะมีการเปลี่ยนแปลงไปอย่างใดอย่างหนึ่งตามที่ระบุไว้


1

หากคุณไม่ จำกัด การใช้ bash คุณสามารถใช้สคริปต์ python เพื่อแปลง.pdfไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันเป็น.pngภาพความละเอียดสูง มันอาจจะมีการปรับเปลี่ยนสำหรับอินพุต / เอาต์พุตภาพประเภทอื่น ๆ convertหรือจะใช้การขัดแย้งแตกต่างกันสำหรับ

#! /usr/bin/env python

import os

def main():
    dir_list = os.listdir('.')
    for full_file_name in dir_list:
        base_name, extension = os.path.splitext(full_file_name)
        if extension == '.pdf': # then .pdf file --> convert to image!
            cmd_str = ' '.join(['convert',
                                '-density 400',
                                full_file_name,
                                base_name + '.png'])
            print(cmd_str)  # echo command to terminal
            os.system(cmd_str)  # execute command

if __name__ == '__main__':
    main()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.