package org.bigbluebutton.presentation.imp; import java.io.File; import org.bigbluebutton.presentation.SupportedFileTypes; import org.bigbluebutton.presentation.SvgImageCreator; import org.bigbluebutton.presentation.UploadedPresentation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SvgImageCreatorImp implements SvgImageCreator { private static Logger log = LoggerFactory.getLogger(SvgImageCreatorImp.class); private String IMAGEMAGICK_DIR; @Override public boolean createSvgImages(UploadedPresentation pres) { boolean success = false; File svgImagesPresentationDir = determineSvgImagesDirectory( pres.getUploadedFile()); if (!svgImagesPresentationDir.exists()) svgImagesPresentationDir.mkdir(); cleanDirectory(svgImagesPresentationDir); try { success = generateSvgImages(svgImagesPresentationDir, pres); } catch (InterruptedException e) { log.warn("Interrupted Exception while generating images."); success = false; } return success; } private boolean generateSvgImages(File imagePresentationDir, UploadedPresentation pres) throws InterruptedException { String source = pres.getUploadedFile().getAbsolutePath(); String dest; String COMMAND = ""; boolean done = true; if (SupportedFileTypes.isImageFile(pres.getFileType())) { dest = imagePresentationDir.getAbsolutePath() + File.separator + "slide1.pdf"; COMMAND = IMAGEMAGICK_DIR + File.separator + "convert " + source + " " + dest; done = new ExternalProcessExecutor().exec(COMMAND, 60000); source = imagePresentationDir.getAbsolutePath() + File.separator + "slide1.pdf"; dest = imagePresentationDir.getAbsolutePath() + File.separator + "slide1.svg"; COMMAND = "pdftocairo -rx 300 -ry 300 -svg -q -f 1 -l 1 " + source + " " + dest; done = new ExternalProcessExecutor().exec(COMMAND, 60000); } else { for (int i = 1; i <= pres.getNumberOfPages(); i++) { File destsvg = new File(imagePresentationDir.getAbsolutePath() + File.separatorChar + "slide" + i + ".svg"); COMMAND = "pdftocairo -rx 300 -ry 300 -svg -q -f " + i + " -l " + i + " " + File.separatorChar + source + " " + destsvg.getAbsolutePath(); done = new ExternalProcessExecutor().exec(COMMAND, 60000); if (!done) { break; } } } if (done) { return true; } log.warn("Failed to create svg images: " + COMMAND); return false; } private File determineSvgImagesDirectory(File presentationFile) { return new File(presentationFile.getParent() + File.separatorChar + "svgs"); } private void cleanDirectory(File directory) { File[] files = directory.listFiles(); for (int i = 0; i < files.length; i++) { files[i].delete(); } } public void setImageMagickDir(String imageMagickDir) { IMAGEMAGICK_DIR = imageMagickDir; } }