androidの場合はInputStream inputStream = context.getAssets().open(templatePath+fileName); このコードをInputStreamに書き換える
private void writeFile(ZipArchiveOutputStream zos, String fileName) throws IOException
{
zos.putArchiveEntry(new ZipArchiveEntry(fileName));
//customファイル優先
File file = new File(templatePath+fileName);
int idx = fileName.lastIndexOf('/');
if (idx > 0) {
File customFile = new File(templatePath+fileName.substring(0, idx)+"_custom/"+fileName.substring(idx+1));
if (customFile.exists()) file = customFile;
}
FileInputStream fis = new FileInputStream(file);
//IOUtils.copy(fis, zos);
fis.transferTo(zos);
fis.close();
zos.closeArchiveEntry();
}
カスタムファイルの機能を見送った。
zos.putArchiveEntry(new ZipArchiveEntry(fileName)); // customファイルを優先するInputStreamを取得する InputStream is = context.getAssets().open(templatePath+fileName); // データをコピー is.transferTo(zos); // ストリームを閉じる is.close(); zos.closeArchiveEntry();
logタグをnullにしていたらnullにはできないとエラーが出た。 Velocity.evaluate(velocityContext, bw, null, template);
this.templatePath+OPS_PATH+XHTML_PATH+XHTML_HEADER_VMの部分
java.lang.NullPointerException: logTag (i.e. template name) cannot be null, you must provide an identifier for the content being evaluated
/** セクション開始. */
void startSection(int lineNum, int pageType, int imagePageType, String srcImageFilePath) throws IOException
{
this.sectionIndex++;
String sectionId = decimalFormat.format(this.sectionIndex);
//package.opf用にファイル名
SectionInfo sectionInfo = new SectionInfo(sectionId);
//次の行が単一画像なら画像専用指定
switch (imagePageType) {
case PageBreakType.IMAGE_PAGE_W:
//幅100%指定
sectionInfo.setImagePage(true);
sectionInfo.setImageFitW(true);
break;
case PageBreakType.IMAGE_PAGE_H:
//高さ100%指定
sectionInfo.setImagePage(true);
sectionInfo.setImageFitH(true);
break;
case PageBreakType.IMAGE_PAGE_NOFIT:
sectionInfo.setImagePage(true);
break;
}
if (pageType == PageBreakType.PAGE_MIDDLE) sectionInfo.setMiddle(true);
else if (pageType == PageBreakType.PAGE_BOTTOM) sectionInfo.setBottom(true);
this.sectionInfos.add(sectionInfo);
//セクション開始は名称がnullなので改ページ処理で文字列が設定されなければ出力されない 階層レベルは1
//this.addChapter(null, null, 1);
this.zos.putArchiveEntry(new ZipArchiveEntry(OPS_PATH+XHTML_PATH+sectionId+".xhtml"));
//ヘッダ出力
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(zos, StandardCharsets.UTF_8));
//出力開始するセクションに対応したSectionInfoを設定
this.velocityContext.put("sectionInfo", sectionInfo);
//Velocity.mergeTemplate(this.templatePath+OPS_PATH+XHTML_PATH+XHTML_HEADER_VM, "UTF-8", velocityContext, bw);
String template = inputStreemToString(context.getAssets().open(this.templatePath+OPS_PATH+XHTML_PATH+XHTML_HEADER_VM), StandardCharsets.UTF_8);
//LogAppender.println(template);
Velocity.evaluate(velocityContext, bw, "XHTML_HEADER", template);
bw.flush();
}
epubcheckがmimetypeエラーだった。バイナリエディターでみても圧縮はされていない。展開するとmimetypeの文字に改行が入っていた。これが原因?
qiita.com EPUBチェックエラーの修正 FileInputStream fisをInputStream isに置き換えて。アンドロイドのアセットの読み込み方にした。 InputStream is = context.getAssets().open(templatePath+MIMETYPE_PATH);
ZipArchiveEntry mimeTypeEntry = new ZipArchiveEntry(MIMETYPE_PATH);
FileInputStream fis = new FileInputStream(templatePath+MIMETYPE_PATH);
byte[] b = new byte[256];
int len = fis.read(b);
fis.close();
ZipArchiveEntry mimeTypeEntry = new ZipArchiveEntry(MIMETYPE_PATH);
InputStream mime = context.getAssets().open(templatePath+MIMETYPE_PATH);
FileInputStream fis;
// mimetype の内容
byte[] b = new byte[256];
int len = mime.read(b);
mime.close();