gpt4 book ai didi

java - 使用 java.util.zip 构建有效的 epub

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:21:15 29 4
gpt4 key购买 nike

我构建了一个方法,它以递归方式将文件夹的内容添加到文件扩展名为“epub”的 zip 文档中,这基本上就是 epub,除了一件事:

存档中的第一个文档必须命名为“mimetype”,类型必须指定为 application/epub+zip,并且必须以字节偏移量 38 开头。有没有办法将 mimetype 添加到具有偏移量的存档中38?

我构建的方法几乎有效。它构建了一个可以被大多数电子阅读器阅读的 epub,但它没有验证。 EpubCheck 给出了这个错误:

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

这个问题在原始测试 epub 中不存在,但在重构的 epub 中出现。我仔细检查了解压缩/重新压缩的 mimetype 文件的内容是否正确。

方法太多就不贴在这里了。但这就是我用来将 mimetype 文件添加到存档中的方法:

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();

最佳答案

根据维基百科对 Open Container Format 的描述,mimetype 文件应该是 ZIP 文件中的第一个条目,并且应该是未压缩的。

仅根据您的示例代码,不清楚您是否指定 mimetype 文件应为 STORED(未压缩)。

以下似乎让我克服了“mimetype 包含错误类型”错误:

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 中产生“mimetype 包含错误的类型”错误。

关于java - 使用 java.util.zip 构建有效的 epub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7062789/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com