epub.js를 사용하는 방법
- http://fchasen.github.io/epub.js/demo/의 예제처럼 자바스크립트를 이용해서 화면에 E-book UI를 제공할 때 유용함
- 그러나 텍스트를 추출해서 서버에서 사용하려면 자바스크립트 수준에서 처리하거나 AJAX를 이용해서 서버에 다시 전달하는 번거로움이 발생함
- EPUB 파일 자체가 ZIP 압축 파일인데, 서버에 압축 파일을 풀어놓은 상태라면 epub.js를 이용해서 쉽게 렌더링할 수 있음.
- 그러나 압축 파일 그대로인 상태에서는 epub.js 문서에 나와있는 대로 따라해도 잘 실행되지 않는 문제가 있음. (zip.js와의 연동이 원인인 듯)
적용 방법
<script src="epub.min.js"></script>
"use strict";
var Book = ePub("text/1/", { width: 400, height: 600, spreads : false });
PHP의 기본 라이브러리를 사용하는 방법
애초 목표는 EPUB 파일의 표지와 목차 정도의 서지정보를 추출하는 것이었기 때문에 PHP의 기본 라이브러리를 이용하는 것으로 방향 전환.
XMLReader를 이용하는 방법임
- 우선 파일을 열고 첫줄이 PK로 시작하는지 확인함
function check_archive_file($filename)
{
$fp = fopen($filename);
$line = fgets($fp);
fclose($fp);
if (strpos($line, "PK") !== false) {
return true;
}
return false;
}
- XML reader를 이용하여 EPUB 파일을 ZIP으로 간주하여 핸들링함. ZIP 파일의 경우 다음과 같은 url 패턴을 사용할 수 있음. EPUB 파일의 실제 데이터는 OEBPS 디렉토리 안에 위치함
zip://파일경로#압축파일내부경로
$chapter1_filename = "zip://./text/epubs/" . $filename . "#OEBPS/chapter1.xhtml";
$reader = new XMLReader();
$reader->open($chapter1_filename);
while ($reader->read()) {
print $reader->value;
}
$reader->close();
파일 경로를 적을 때 위의 예제와 같이 상대 경로로 지정하면 안 될 수 있으므로, 문제가 생기면 절대 경로로 변경해야 함
위 코드는 $reader→value를 이용해서 XHTML 파일 내의 모든 텍스트를 추출한 것이었는데 특정 엘리먼트의 값만을 추출하려면 다음과 같은 방식으로 가능함
ZipArchive를 이용하여 읽어내는 방법
$zip = new ZipArchive();
if ($zip->open($path)) {
$fp = $zip->getStream('OEBPS/chapter1.xhtml');
if ($fp) {
while (!feof($fp)) {
$data = fread($fp, 2);
print($data);
}
}
fclose($fp);
}
$zip->close();