pdf.converter.epub.EpubCreator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pdf-converter Show documentation
Show all versions of pdf-converter Show documentation
A Java library to convert .pdf files into .txt, .jpg, .png, .epub and .zip formats.
The newest version!
package pdf.converter.epub;
import com.google.common.collect.Lists;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class EpubCreator {
private String timestamp;
private String uuid;
private File basedir;
private ClassLoader classLoader;
private String title;
private File imgsDir;
public void create(String title, File imgsDir, File output) throws IOException {
timestamp = DateTimeFormat.forPattern("yyyy-MM-dd'T'hh:mm:ssSZZ").print(DateTime.now());
uuid = UUID.randomUUID().toString();
this.title = title;
this.imgsDir = imgsDir;
try {
basedir = File.createTempFile(uuid,"");
basedir.delete();
basedir.mkdirs();
} catch (IOException e) {
e.printStackTrace();
}
classLoader = getClass().getClassLoader();
copyImages();
copyStandardFilez();
createOPFFile();
createIndex();
createTitlePage();
createTOC();
pack(basedir.getAbsolutePath(), output.getAbsolutePath());
FileUtils.deleteDirectory(basedir);
}
private void copyImages() throws IOException {
File imagesDir = new File(basedir, "images");
imagesDir.mkdirs();
for(File file : listFiles()){
IOUtils.copy(new FileInputStream(file), new FileOutputStream(new File(imagesDir, file.getName())));
}
}
private void copyStandardFilez() throws IOException {
File metainf = new File(basedir, "META-INF");
metainf.mkdirs();
writeFile(new File(metainf, "container.xml"), readFileFromSrc("epub/META-INF/container.xml"));
writeFile(new File(basedir, "mimetype"), readFileFromSrc("epub/mimetype"));
writeFile(new File(basedir, "page_styles.css"), readFileFromSrc("epub/page_styles.css"));
writeFile(new File(basedir, "stylesheet.css"), readFileFromSrc("epub/stylesheet.css"));
}
private void createOPFFile() throws IOException {
StringBuilder content = new StringBuilder();
for(File file : listFiles()){
content.append(String.format("- \n", file.getName(), idForImage(file.getName())));
}
String opf = readFileFromSrc("epub/content.opf");
opf = opf
.replace("$AUTHOR", "Unknown")
.replace("$TIMESTAMP", timestamp)
.replace("$TITLE", title)
.replace("$UUID", uuid)
.replace("$CONTENT", content.toString());
writeFile(new File(basedir, "content.opf"), opf);
}
private void createIndex() throws IOException {
StringBuilder content = new StringBuilder();
for(File file : listFiles()){
content.append(String.format("\n", idForImage(file.getName()), file.getName()));
}
String index = readFileFromSrc("epub/index.html");
index = index.replace("$CONTENT", content.toString());
writeFile(new File(basedir, "index.html"), index);
}
private void createTitlePage() throws IOException {
String pagetitle = readFileFromSrc("epub/titlepage.xhtml");
pagetitle = pagetitle.replace("$TITLE", title);
writeFile(new File(basedir, "titlepage.xhtml"), pagetitle);
}
private void createTOC() throws IOException {
String toc = readFileFromSrc("epub/toc.ncx");
toc = toc.replace("$TITLE", title);
writeFile(new File(basedir, "toc.ncx"), toc);
}
private void writeFile(File dest, String content) throws IOException {
FileWriter writer = new FileWriter(dest);
writer.write(content);
writer.flush();
writer.close();
}
private String readFileFromSrc(String path) throws IOException {
return IOUtils.toString(classLoader.getResourceAsStream(path));
}
private String idForImage(String name){
return String.format("id%s", name.replace(".png", ""));
}
private static void pack(String sourceDirPath, String zipFilePath) throws IOException {
Path p = Files.createFile(Paths.get(zipFilePath));
try (ZipOutputStream zs = new ZipOutputStream(Files.newOutputStream(p))) {
Path pp = Paths.get(sourceDirPath);
Files.walk(pp)
.filter(path -> !Files.isDirectory(path))
.forEach(path -> {
ZipEntry zipEntry = new ZipEntry(pp.relativize(path).toString());
try {
zs.putNextEntry(zipEntry);
zs.write(Files.readAllBytes(path));
zs.closeEntry();
} catch (Exception e) {
System.err.println(e);
}
});
}
}
private List
listFiles(){
File[] files = imgsDir.listFiles((dir, name) -> {
return name.toLowerCase().endsWith(".png");
});
List sorted = Lists.newArrayList(files);
Collections.sort(sorted, (o1, o2) -> o1.toString().compareTo(o2.toString()));
return sorted;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy