Djvu को पीडीएफ में बदलना और सामग्री की तालिका को संरक्षित करना, यह कैसे संभव है?


9

मैंने कई ऑनलाइन और ऑफ़लाइन टूल आज़माए लेकिन रूपांतरण के दौरान सामग्री की तालिका (TOC) जानकारी संरक्षित नहीं थी।

मैं एक 5000 पृष्ठ फिनिश शब्दकोश को बदलना चाहता हूं जो कि djvu प्रारूप में है और इसमें शब्दों को जल्दी से खोजने के लिए लगभग 5000 TOC प्रविष्टियाँ संरचित हैं।

किसी भी विचार कैसे डीजेवीयू के दौरान टीओसी जानकारी को पीडीएफ रूपांतरण में संरक्षित करना संभव है?

जवाबों:


5

अद्यतन: user3124688 ने स्क्रिप्ट dpsprep में इस प्रक्रिया को कोडित किया है


मैं आपके लिए रूपांतरण करने वाले किसी भी उपकरण के बारे में नहीं जानता। आप निश्चित रूप से इसे करने में सक्षम होना चाहिए, लेकिन यह थोड़ा काम कर सकता है। मैं मूल प्रक्रिया को रेखांकित करूँगा। आपको ओपन सोर्स कमांड लाइन उपयोगिताओं pdftkऔर djvused(DjVuLibre का हिस्सा) की आवश्यकता होगी। ये आपके पैकेज मैनेजर (GNU / Linux) या उनकी वेबसाइटों (Windows, OS X) से उपलब्ध हैं।

  • चरण 1: फ़ाइल पाठ में कनवर्ट करें

    सबसे पहले, डीजेवीयू फाइल को पीडीएफ में बदलने के लिए (बुकमार्क के बिना) किसी भी टूल का उपयोग करें।

    मान लीजिए कि फ़ाइलों को बुलाया जाता है filename.djvuऔर filename.pdf

  • चरण 2: डीजेवीयू की रूपरेखा निकालें

    अगला, इस तरह से एक फ़ाइल के लिए डीजेवीयू रूपरेखा डेटा का उत्पादन:

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

    यह एक फ़ाइल है जो क्रमबद्ध पेड़ प्रारूप में डीजेवीयू दस्तावेजों के बुकमार्क को सूचीबद्ध करता है। वास्तव में यह सिर्फ एक SEXPR है , और आसानी से पार्स किया जा सकता है। प्रारूप इस प्रकार है:

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

    उदाहरण के लिए:

    (bookmarks
      ("bmark1"
        "#1")
      ("bmark2"
        "#5"
        ("bmark2subbmark1"
          "#6")
        ("bmark2subbmark2"
          "#7"))
      ("bmark3"
        "#9"
        ...))
    
  • चरण 3: डीजेवीयू की रूपरेखा को पीडीएफ मेटाडेटा प्रारूप में रूपांतरित करें

    अब, हमें इन बुकमार्क को पीडीएफ मेटाडेटा द्वारा आवश्यक प्रारूप में बदलने की आवश्यकता है। इस फ़ाइल में प्रारूप है:

    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: पीडीएफ मेटाडेटा निकालें और परिवर्तित बुकमार्क्स में बंटवारा करें

    एक बार जब आप परिवर्तित सूची प्राप्त कर लेते हैं, तो आपकी परिवर्तित पीडीएफ फाइल से पीडीएफ मेटाडेटा आउटपुट करें:

    pdftk "filename.pdf" dump_data > pdfmetadata.out
    

    अब, फ़ाइल खोलें और शुरू होने वाली लाइन ढूंढें: NumberOfPages:

    इस लाइन के बाद परिवर्तित बुकमार्क डालें। नई फ़ाइल को इस रूप में सहेजेंpdfmetadata.in

  • चरण 5: बुकमार्क के साथ पीडीएफ बनाएं

    अब हम इस मेटाडेटा को शामिल करते हुए एक नई पीडीएफ फाइल बना सकते हैं:

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

    फ़ाइल out.pdfआपके पीडीएफ की एक कॉपी होनी चाहिए, जो डीजेवीयू फ़ाइल से आयातित बुकमार्क के साथ हो।


3

उपयोगकर्ता @pyrocrasty (धन्यवाद!) द्वारा दिए गए ऊपर स्पष्ट रूपरेखा के आधार पर, मैंने पीडीएफ कनवर्टर के लिए एक डीजेवीयू लागू किया है जो ओसीआरआईडी पाठ और बुकमार्क संरचना दोनों को संरक्षित करता है। आप इसे यहाँ पा सकते हैं:

https://github.com/kcroker/dpsprep

OCR डेटा के लिए आभार उबंटू मंचों पर @zetah पर जाएँ!


मेरे पास बुकमार्क पृष्ठ संख्या फ़ील्ड में गैर-संख्यात्मक पाठ के साथ एक डीजेवीयू फ़ाइल थी, इसलिए पार्सर ने उन्हें नहीं पढ़ा। मैंने j.split('#')[1]साथ दिया (int(re.findall(r'\d+', j.split('#')[1])[0])+1)और इसने बहुत अच्छा काम किया। डेबियन जेसी की जरूरत:sudo apt-get install pdftk djvulibre-bin python-pip ruby ruby-dev libmagickwand-dev; sudo pip install sexpdata; sudo gem install iconv pdfbeads
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.