/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portlet.documentlibrary.util;
import com.liferay.portal.image.ImageToolImpl;
import com.liferay.portal.kernel.image.ImageTool;
import java.awt.image.RenderedImage;
import java.io.File;
import javax.imageio.ImageIO;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
/**
* @author Juan Gonzalez
*/
public class LiferayPDFBoxConverter {
public LiferayPDFBoxConverter(
File inputFile, File thumbnailFile, File[] previewFiles,
String extension, String thumbnailExtension, int dpi, int height,
int width, boolean generatePreview, boolean generateThumbnail) {
_inputFile = inputFile;
_thumbnailFile = thumbnailFile;
_previewFiles = previewFiles;
_extension = extension;
_thumbnailExtension = thumbnailExtension;
_dpi = dpi;
_height = height;
_width = width;
_generatePreview = generatePreview;
_generateThumbnail = generateThumbnail;
}
public void generateImagesPB() throws Exception {
try (PDDocument pdDocument = PDDocument.load(_inputFile)) {
PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);
PDPageTree pdPageTree = pdDocument.getPages();
int count = pdPageTree.getCount();
for (int i = 0; i < count; i++) {
if (_generateThumbnail && (i == 0)) {
_generateImagesPB(
pdfRenderer, i, _thumbnailFile, _thumbnailExtension);
}
if (!_generatePreview) {
break;
}
_generateImagesPB(pdfRenderer, i, _previewFiles[i], _extension);
}
}
}
private void _generateImagesPB(
PDFRenderer pdfRenderer, int pageIndex, File outputFile,
String extension)
throws Exception {
RenderedImage renderedImage = pdfRenderer.renderImageWithDPI(
pageIndex, _dpi, ImageType.RGB);
ImageTool imageTool = ImageToolImpl.getInstance();
if (_height != 0) {
renderedImage = imageTool.scale(renderedImage, _width, _height);
}
else {
renderedImage = imageTool.scale(renderedImage, _width);
}
outputFile.createNewFile();
ImageIO.write(renderedImage, extension, outputFile);
}
private final int _dpi;
private final String _extension;
private final boolean _generatePreview;
private final boolean _generateThumbnail;
private final int _height;
private final File _inputFile;
private final File[] _previewFiles;
private final String _thumbnailExtension;
private final File _thumbnailFile;
private final int _width;
}