2011-08-15 9 views
6

बनाने के लिए java.util.zip का उपयोग करके मैंने एक विधि बनाई है जो फ़ाइल एक्सटेंशन "एपब" के साथ एक ज़िप दस्तावेज़ में एक फ़ोल्डर की सामग्रियों को दोबारा जोड़ती है, जो मूल रूप से एक चीज को छोड़कर एक एपब है:वैध epub

संग्रह में पहला दस्तावेज़ "mimetype" नाम दिया जाना चाहिए, प्रकार निर्दिष्ट एप्लिकेशन/epub + ज़िप होना चाहिए, और 38 के बाइट ऑफसेट के साथ शुरू होना चाहिए। क्या ऑफसेट के साथ संग्रह में mimetype जोड़ने का कोई तरीका है 38?

जिस विधि को मैंने लगभग बनाया है वह लगभग काम करता है। यह एक ईपब बनाता है जिसे अधिकांश ई-पाठकों द्वारा पढ़ा जा सकता है, लेकिन यह मान्य नहीं है। EpubCheck इस त्रुटि देता है:

mimetype contains wrong type (application/epub+zip expected) 

यह एक मुद्दा है कि मूल परीक्षण epub में मौजूद नहीं है है, लेकिन पुनर्निर्मित epub में दिखाई देता है। और मैंने दोबारा जांच की है कि अनजिप/रीज़िपेड माइमटाइप फ़ाइल की सामग्री सही है।

विधि यहां पोस्ट करने के लिए बहुत अधिक है।

out = new ZipOutputStream(new FileOutputStream(outFilename)); 

FileInputStream in = new FileInputStream(mimeTypePath); 
out.putNextEntry(new ZipEntry("mimetype")); 

int len; 
while ((len = in.read(buf)) > 0) { 
    out.write(buf, 0, len); 
} 

out.closeEntry(); 
in.close(); 
out.close(); 
+2

कोई विशेष कारण है कि आप मौजूदा पुस्तकालयों जैसे कि http://www.siegmann.nl/epublib का उपयोग करने के बजाय पहिया को फिर से शुरू कर रहे हैं? यहां तक ​​कि यदि आप इसका उपयोग नहीं करते हैं, तो स्रोत पढ़ना आपको बताएगा कि यह ठीक से कैसे किया जाता है। –

+0

क्या आप संक्षेप में एपब ज़िप बनाने की प्रक्रिया प्रदान कर सकते हैं या कुछ ट्यूटोरियल सुझा सकते हैं? – GAMA

+0

@GAMA, आपका प्रश्न स्टैक ओवरफ्लो पर यहां एक नए विषय के लिए बेहतर हो सकता है। यदि आप प्रश्न पोस्ट करते हैं, तो आपको सबसे अधिक संभावना की आवश्यकता होगी। आप जो प्रयास कर रहे हैं उसके आधार पर, मेरे पास आपके पास आवश्यक उत्तर हो सकता है। लेकिन इसे एक नए विषय में होना चाहिए। – objectivesea

उत्तर

7

Open Container Format विकिपीडिया की वर्णन के अनुसार, mimetype फ़ाइल ज़िप फ़ाइल में पहली प्रविष्टि होना चाहिए, और यह असम्पीडित होना चाहिए: लेकिन यह मैं क्या संग्रह करने के लिए माइम प्रकार फ़ाइल जोड़ने के लिए उपयोग कर रहा हूँ है ।

अकेले अपने नमूना कोड के आधार पर, यह स्पष्ट नहीं है कि आप निर्दिष्ट कर रहे हैं कि mimetype फ़ाइल STORED (असम्पीडित) होनी चाहिए।

निम्नलिखित मुझे पाने के लिए पिछले त्रुटि "माइम प्रकार प्रकार गलत है" लगता है:

private void writeMimeType(ZipOutputStream zip) throws IOException { 
    byte[] content = "application/epub+zip".getBytes("UTF-8"); 
    ZipEntry entry = new ZipEntry("mimetype"); 
    entry.setMethod(ZipEntry.STORED); 
    entry.setSize(20); 
    entry.setCompressedSize(20); 
    entry.setCrc(0x2CAB616F); // pre-computed 
    zip.putNextEntry(entry); 
    zip.write(content); 
    zip.closeEntry(); 
} 

पुष्टि: setMethod(), setSize(), setCompressedSize() और setCrc() लाइनों को हटाने epubcheck से "माइम प्रकार प्रकार गलत है" त्रुटि पैदावार ।