package com.patch.html_to_png_server.renderers;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import javax.imageio.ImageIO;
import com.patch.html_to_png_server.renderers.helpers.ImageProcessor;
/*
* Renders using the platform's built-in Internet Explorer 6 or 7.
*
* The necessary program, "ie-thumbnail-generator.exe", is packaged here. Its
* source code is provided in the "ie_thumbnail_generator" folder.
*/
public class IERenderer extends AbstractRenderer {
private static File exeFile;
public IERenderer() throws IOException {
super();
}
@Override
public void generatePngFile() throws IOException {
File midPngFile = File.createTempFile("html_to_png_ff3_mid", ".png");
midPngFile.deleteOnExit();
ProcessBuilder pb = new ProcessBuilder(
getExeFile().getPath(),
htmlFile.toURI().toURL().toString(),
midPngFile.getAbsolutePath());
Process p = pb.start();
try {
p.waitFor();
} catch (InterruptedException e) {
p.destroy();
throw new IOException(e);
}
BufferedImage midImage = ImageIO.read(midPngFile);
BufferedImage finalImage =
(new ImageProcessor()).autocropImage(midImage);
ImageIO.write(finalImage, "png", pngFile);
midPngFile.delete();
}
private static File getExeFile() throws IOException {
if (exeFile != null) return exeFile;
exeFile = File.createTempFile(
"html_to_png_ie-thumbnail-generator", ".exe");
exeFile.deleteOnExit();
InputStream is = IERenderer.class.getResourceAsStream(
"ie-thumbnail-generator.exe");
FileChannel exeChannel = new FileOutputStream(exeFile).getChannel();
exeChannel.transferFrom(Channels.newChannel(is), 0, Integer.MAX_VALUE);
is.close();
exeChannel.close();
return exeFile;
}
}