การแปลง djvu เป็น pdf และรักษาสารบัญเป็นไปได้อย่างไร?


9

ฉันลองใช้เครื่องมือออนไลน์และออฟไลน์หลายชุด แต่ไม่มีการสงวนข้อมูลสารบัญ (TOC) ในระหว่างการแปลง

ฉันต้องการแปลงพจนานุกรมภาษาฟินแลนด์ 5000 หน้าซึ่งอยู่ในรูปแบบ djvu และมีรายการ TOC ประมาณ 5,000 รายการซึ่งมีโครงสร้างแบบลำดับชั้นเพื่อค้นหาคำอย่างรวดเร็ว

มีความคิดใดที่เป็นไปได้ที่จะเก็บรักษาข้อมูล TOC ในระหว่างการแปลง DJVU เป็น PDF

คำตอบ:


5

UPDATE: user3124688มีรหัสขึ้นกระบวนการนี้ในสคริปต์ dpsprep


ฉันไม่รู้เครื่องมือใด ๆ ที่จะทำให้เกิด Conversion สำหรับคุณ แน่นอนคุณควรจะสามารถทำมันได้ แต่มันอาจใช้เวลาทำงานเล็กน้อย ฉันจะร่างกระบวนการพื้นฐาน คุณจะต้องใช้ยูทิลิตีบรรทัดคำสั่งแบบโอเพ่นซอร์สpdftkและdjvused(ส่วนหนึ่งของ DjVuLibre) สิ่งเหล่านี้มีให้จากผู้จัดการแพ็คเกจของคุณ (GNU / Linux) หรือเว็บไซต์ (Windows, OS X)

  • ขั้นตอนที่ 1: แปลงไฟล์ข้อความ

    ก่อนอื่นให้ใช้เครื่องมือใด ๆ เพื่อแปลงไฟล์ DJVU เป็น PDF (ไม่มีบุ๊กมาร์ก)

    สมมติว่าไฟล์จะถูกเรียกว่าและfilename.djvufilename.pdf

  • ขั้นตอนที่ 2: แยกเค้าร่าง DJVU

    ถัดไปส่งออกโครงร่างข้อมูล DJVU ไปยังไฟล์เช่นนี้

    djvused "filename.djvu" -e 'print-outline' > bmarks.out
    

    นี่เป็นไฟล์ที่แสดงรายการคั่นหน้าเอกสาร DJVU ในรูปแบบแผนผังแบบอนุกรม ในความเป็นจริงมันเป็นเพียงSEXPRและสามารถแยกวิเคราะห์ได้ง่าย รูปแบบดังต่อไปนี้:

    file ::= (bookmarks
               <bookmark>*)
    bookmark ::= (name
                   page
                   <bookmark>*)
    name ::= "<character>*"
    page ::= "#<digit>+"
    

    ตัวอย่างเช่น:

    (bookmarks
      ("bmark1"
        "#1")
      ("bmark2"
        "#5"
        ("bmark2subbmark1"
          "#6")
        ("bmark2subbmark2"
          "#7"))
      ("bmark3"
        "#9"
        ...))
    
  • ขั้นตอนที่ 3: แปลงเค้าร่าง DJVU เป็นรูปแบบข้อมูลเมตา PDF

    ตอนนี้เราต้องแปลงบุ๊กมาร์กเหล่านี้เป็นรูปแบบที่ต้องการโดยเมตาดาต้า PDF ไฟล์นี้มีรูปแบบ:

    file ::= <entry>*
    entry ::= BookmarkBegin
              BookmarkTitle: <title>
              BookmarkLevel: <number>
              BookmarkPageNumber: <number>
    title ::= <character>*
    

    ดังนั้นตัวอย่างของเราจะกลายเป็น:

     BookmarkBegin
     BookmarkTitle: bmark1
     BookmarkLevel: 1
     BookmarkPageNumber: 1
     BookmarkBegin
     BookmarkTitle: bmark2
     BookmarkLevel: 1
     BookmarkPageNumber: 5
     BookmarkBegin
     BookmarkTitle: bmark2subbmark1
     BookmarkLevel: 2
     BookmarkPageNumber: 6
     BookmarkBegin
     BookmarkTitle: bmark2subbmark2
     BookmarkLevel: 2
     BookmarkPageNumber: 7
     BookmarkBegin
     BookmarkTitle: bmark3
     BookmarkLevel: 1
     BookmarkPageNumber: 9
    

    โดยทั่วไปคุณเพียงแค่ต้องเขียนสคริปต์เพื่อเดินทรี SEXPR ติดตามระดับและส่งออกชื่อหมายเลขหน้าและระดับของแต่ละรายการที่มาในรูปแบบที่ถูกต้อง

  • ขั้นตอนที่ 4: แยกข้อมูลเมตาของ PDF และส่วนย่อยในบุ๊คมาร์คที่แปลงแล้ว

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

    pdftk "filename.pdf" dump_data > pdfmetadata.out
    

    ตอนนี้เปิดไฟล์และค้นหาบรรทัดที่เริ่มต้น: NumberOfPages:

    แทรกบุ๊กมาร์กที่แปลงหลังจากบรรทัดนี้ บันทึกไฟล์ใหม่เป็นpdfmetadata.in

  • ขั้นตอนที่ 5: สร้าง PDF ด้วยบุ๊คมาร์ค

    ตอนนี้เราสามารถสร้างไฟล์ PDF ใหม่ที่รวมข้อมูลเมตานี้ได้:

    pdftk "filename.pdf" update_info "pdfmetadata.in" output out.pdf
    

    ไฟล์out.pdfควรเป็นสำเนาของ PDF ของคุณพร้อมด้วยบุ๊คมาร์คที่นำเข้าจากไฟล์ DJVU


3

จากโครงร่างที่ชัดเจนด้านบนที่กำหนดโดยผู้ใช้ @pyrocrasty (ขอขอบคุณ!) ฉันได้ติดตั้ง DJVU เป็นตัวแปลง PDF ซึ่งเก็บข้อความ OCR และโครงสร้างบุ๊กมาร์กไว้ คุณสามารถค้นหาได้ที่นี่:

https://github.com/kcroker/dpsprep

กิตติกรรมประกาศสำหรับข้อมูล OCR ไปที่ @zetah บนฟอรัม Ubuntu!


ฉันมีไฟล์ DJVU ที่มีข้อความที่ไม่ใช่ตัวเลขในฟิลด์หมายเลขหน้าบุ๊กมาร์กดังนั้นตัวแยกวิเคราะห์จึงไม่อ่าน ฉันแทนที่j.split('#')[1]ด้วย(int(re.findall(r'\d+', j.split('#')[1])[0])+1)และมันใช้งานได้ดี Debian Jessie ต้องการ:sudo apt-get install pdftk djvulibre-bin python-pip ruby ruby-dev libmagickwand-dev; sudo pip install sexpdata; sudo gem install iconv pdfbeads
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.