2016-12-06 5 views
15

मैं epub पाठक में जाने के लिए पृष्ठ सुविधा को लागू करने के लिए है में पृष्ठ पर जाएं। मैं Page-Turner के स्रोत कोड में इस सुविधा को लागू करने की कोशिश की है, लेकिन इसके सफलतापूर्वक .epub फ़ाइल में अनेक एक्सएचटीएमएल की वजह से काम नहीं कर रहा, जैसा कि हम जानते हैं कि प्रत्येक अध्याय एक एक्सएचटीएमएल फ़ाइल और इस ऐप्लिकेशन में स्क्रीन आकार के अनुसार अपनी विभाजन की है। इसलिए जब भी स्क्रीन का आकार बड़ा होता है तो स्क्रीन की कुल संख्या कम होती है और स्क्रीन छोटी होने पर पृष्ठों की संख्या कम होती है, इसलिए कोई फिक्स पेज नंबर नहीं है जहां कूदना है। मैंने संपादित किया है और नीचे देने वाले की तरह लागू करने की कोशिश की है।epub रीडर (PageTurner)

ReadingFragment.java

public void performSearch(String query) { 

    int index = Integer.parseInt(query); 

    if (index > bookView.getTotalNumberOfPages()) { 
     Toast.makeText(context, "Please enter number between 0 to " + bookView.getTotalNumberOfPages(), Toast.LENGTH_SHORT).show(); 
    } else { 
     bookView.gotoPageNumber(index); 
    } 
} 

BookView.java

public void gotoPageNumber(int pageNum) { 
    strategy.gotoPage(pageNum); 
    progressUpdate(); 
} 

PageChangeStrategy.java

public void gotoPage(int pageNumber); 

FixedPagesStrategy.java

@Override 
public void gotoPage(int pageNumber) { 

    PageTurnerSpine spinePos = bookView.getSpine(); 

    this.storedPosition = -1; 

    int currentPage = getCurrentPage() + spinePos.getUptoPage(spinePos.getPosition()); 
    Log.e(TAG, "Adding >> Upto Page : " + spinePos.getUptoPage(spinePos.getPosition()) 
      + ", currentPage : " + getCurrentPage()); 
    Log.e(TAG, "pagenum : " + pageNum); 

    if (pageNumber > currentPage) {  //pageNumber is greater then current page 

     int jumpSpine = spinePos.getIndexFromPage(pageNumber); 
     int currentSpine = spinePos.getPosition(); 
     Log.e(TAG, "jumpSpine : " + jumpSpine + ", currentSpine : " + currentSpine); 

     if (jumpSpine == currentSpine) { 

      int diffrence = pageNumber - currentPage; 
      Log.e(TAG, "diffrence < : " + diffrence); 

      Log.e(TAG, "Minimum >> PageOffSets - 1 : " + (spinePos.getPageOffSets(currentSpine) - 1) 
        + ", pageNum + diffrence : " + (pageNum + diffrence)); 

      this.pageNum = Math.min(pageNum + diffrence, spinePos.getPageOffSets(currentSpine) - 1); 
      updatePosition(); 

     } else { 

      PageTurnerSpine spine = bookView.getSpine(); 

      if (spine == null || !spine.navigateFrontSpine(spine.getIndexFromPage(pageNumber))) { 
       return; 
      } 
      this.pageNum = 0; 

      gotoPage(pageNumber); 

     } 

    } else {       //pageNumber is less then current page 

     int jumpSpine = spinePos.getIndexFromPage(pageNumber); 
     int currentSpine = spinePos.getPosition(); 
     Log.e(TAG, "jumpSpine : " + jumpSpine + ", currentSpine : " + currentSpine); 

     if (jumpSpine == currentSpine) { 

      int diffrence = currentPage - pageNumber; 
      Log.e(TAG, "diffrence > : " + diffrence); 

      Log.e(TAG, "pagenum - diffrence : " + (pageNum - diffrence)); 

      this.pageNum = Math.max(pageNum - diffrence, 0); 
      updatePosition(); 

     } else { 

      PageTurnerSpine spine = bookView.getSpine(); 

      if (spine == null || !spine.navigateBackSpine(spine.getIndexFromPage(pageNumber))) { 
       return; 
      } 
      this.pageNum = 0; 

      gotoPage(pageNumber); 
     } 
    } 

    Log.e(TAG, "In last pageNum : " + pageNum); 
} 

PageTurnerSpine.java

public int getIndexFromPage(int pageNumber) { 
    int total = 0; 
    int totalIndex = 0; 

    for (List<Integer> pagesPerSection : pageOffsets) { 
     total += pagesPerSection.size(); 
     totalIndex = totalIndex + 1; 
     if (total - 1 >= pageNumber) { 
      return totalIndex - 1; 
     } 
    } 
    return 0; 
} 

public int getUptoPage(int position) { 
    int total = 0, max = 0; 
    for (List<Integer> pagesPerSection : pageOffsets) { 
     max = max + 1; 

     if (position == max - 1) { 
      return total; 
     } 
     total += pagesPerSection.size(); 
    } 
    return 0; 
} 

public int getPageOffSets(int position) { 
    int max = 0; 
    for (List<Integer> pagesPerSection : pageOffsets) { 
     max = max + 1; 

     if (position == max - 1) { 
      return pagesPerSection.size(); 
     } 
    } 
    return 0; 
} 

public boolean navigateFrontSpine(int indexSpine) { 

    if (this.position == size() - 1) { 
     return false; 
    } 

    this.position = indexSpine; 
    return true; 
} 

public boolean navigateBackSpine(int indexSpine) { 

    if (this.position == 0) { 
     return false; 
    } 

    this.position = indexSpine; 
    return true; 
} 

जब मैं इस कोड को लागू करते हैं और कुछ समय के लिए यह सही ढंग से काम चलाते हैं। लेकिन कुछ समय यह, पर अन्य पृष्ठ क्रमांक कूद की तरह अगर मैं 110 में प्रवेश तो यह 109 पर कूद जाएगा और जब मैं अध्याय प्रारंभिक पृष्ठ पर कूदने के लिए कोशिश कर रहा हूँ तो परिवर्तन नहीं खुराक होते हैं। क्रिप्या मेरि सहायता करे।

https://github.com/NightWhistler/PageTurner इस स्रोत कोड में मैंने ऊपर दी गई कुछ फ़ाइल संपादित की है। वे इस परियोजना में पहले से मौजूद हैं।

ज्यादातर मैं देखता हूँ कि Kindle, FBReader, आदि की तरह epub पाठक के सबसे ... जाओ करने के लिए पृष्ठ सुविधा को लागू नहीं करता है। तो, मैं यह भी जानना चाहता हूं कि क्या यह सुविधा लागू करना संभव है या नहीं?

सहायता के लिए धन्यवाद :)

+0

मैं आप अधिक विशिष्ट कोड है कि समस्या की पहचान करता है पोस्ट सुझाव देते हैं। जैसा कि यह खड़ा है, इस प्रश्न में कोड की मात्रा काफी बड़ी है और इसे चलाने में सक्षम होने के बिना इसे डीबग करना मुश्किल हो जाता है। http://stackoverflow.com/help/mcve – Anthony

+0

https://github.com/NightWhistler/PageTurner इस स्रोत कोड में मैंने ऊपर दी गई कुछ फ़ाइल संपादित की है।वे पहले से ही परियोजना में मौजूद हैं। –

उत्तर

3

आप वास्तव में IDPF.org/epub पर IDPF एपब मानकों से परामर्श करने की जरूरत है।

एक दृष्टिकोण, जो मुझे लगता है कि मानक के भीतर वैकल्पिक है (लेकिन मुझे यकीन नहीं है) सामग्री को काग़ज़ पुस्तक (यदि कोई है) से भौतिक पृष्ठ संख्याओं के साथ चिह्नित करना है, या अपने स्वयं के नंबरिंग सिस्टम पर निर्णय लेना है अपनी सामग्री की तालिका के साथ, और इसकी शुरुआत के रूप में संबंधित वर्चुअल पेज का उपयोग करें।

यह शुरू एक ही पृष्ठ की के लिए जा रहा सक्षम है, लेकिन प्रति भौतिक पेज आभासी पृष्ठों की संख्या फ़ॉन्ट आकार आदि वर्तमान में उपयोग में के आधार पर, अलग अलग होंगे।

यह एक प्रोग्रामिंग एक के रूप में के रूप में ज्यादा एक डेटा मुद्दा है।

संबंधित मुद्दे