All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.jpedal.parser.swing.PDFtoImageConvertorSwing Maven / Gradle / Ivy
/*
* ===========================================
* Java Pdf Extraction Decoding Access Library
* ===========================================
*
* Project Info: http://www.idrsolutions.com
* Help section for developers at http://www.idrsolutions.com/support/
*
* (C) Copyright 1997-2017 IDRsolutions and Contributors.
*
* This file is part of JPedal/JPDF2HTML5
*
@LICENSE@
*
* ---------------
* PDFtoImageConvertorSwing.java
* ---------------
*/
package org.jpedal.parser.swing;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import org.jpedal.color.ColorSpaces;
import org.jpedal.display.swing.SwingHelper;
import org.jpedal.exception.PdfException;
import org.jpedal.io.ObjectStore;
import org.jpedal.objects.PdfPageData;
import org.jpedal.objects.acroforms.AcroRenderer;
import org.jpedal.objects.raw.PdfObject;
import org.jpedal.parser.DecoderOptions;
import org.jpedal.parser.PDFtoImageConvertor;
import org.jpedal.parser.PdfStreamDecoder;
import org.jpedal.parser.ValueTypes;
import org.jpedal.render.DynamicVectorRenderer;
import org.jpedal.render.ImageDisplay;
public class PDFtoImageConvertorSwing extends PDFtoImageConvertor {
public PDFtoImageConvertorSwing(final float multiplyer, final DecoderOptions options) {
super(multiplyer, options);
}
@Override
public DynamicVectorRenderer getDisplay(final int pageIndex, final ObjectStore localStore, final boolean isTransparent) {
return imageDisplay = new ImageDisplay(pageIndex, !isTransparent, 5000, localStore); //note !isTransparent as actually addBackground
}
public static AffineTransform setPageParametersForImage(final float scaling, final int pageNumber, final PdfPageData pageData) {
//create scaling factor to use
final AffineTransform imageScaling = new AffineTransform();
final int crw = pageData.getCropBoxWidth(pageNumber);
final int crh = pageData.getCropBoxHeight(pageNumber);
final int crx = pageData.getCropBoxX(pageNumber);
final int cry = pageData.getCropBoxY(pageNumber);
final int image_x_size = (int) ((crw) * scaling);
final int image_y_size = (int) ((crh) * scaling);
final int raw_rotation = pageData.getRotation(pageNumber);
imageScaling.translate(-crx * scaling, +cry * scaling);
if (raw_rotation == 270) {
imageScaling.rotate(-Math.PI / 2.0, image_x_size / 2, image_y_size / 2);
final double x_change = (imageScaling.getTranslateX());
final double y_change = (imageScaling.getTranslateY());
imageScaling.translate((image_y_size - y_change), -x_change);
if (cry < 0) {
imageScaling.translate(2 * cry * scaling, 2 * cry * scaling);
} else {
imageScaling.translate(2 * cry * scaling, 0);
}
imageScaling.translate(0, -scaling * (pageData.getCropBoxHeight(pageNumber) - pageData.getMediaBoxHeight(pageNumber)));
} else if (raw_rotation == 180) {
imageScaling.rotate(Math.PI, image_x_size / 2, image_y_size / 2);
} else if (raw_rotation == 90) {
imageScaling.rotate(Math.PI / 2.0, image_x_size / 2, image_y_size / 2);
final double x_change = (imageScaling.getTranslateX());
final double y_change = (imageScaling.getTranslateY());
imageScaling.translate(-y_change, image_x_size - x_change);
}
imageScaling.translate(image_x_size, image_y_size);
imageScaling.scale(1, -1);
imageScaling.translate(-image_x_size, 0);
imageScaling.scale(scaling, scaling);
return imageScaling;
}
@Override
public BufferedImage pageToImage(final boolean imageIsTransparent, final PdfStreamDecoder currentImageDecoder, final float scaling,
final PdfObject pdfObject, final AcroRenderer formRenderer) throws PdfException {
final BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
final Graphics graphics = image.getGraphics();
final Graphics2D g2 = (Graphics2D) graphics;
if (!imageIsTransparent) {
g2.setColor(Color.white);
g2.fillRect(0, 0, w, h);
}
/*
* adjustment for upside down images
*/
if (rotation == 180) {
g2.translate(crx * 2 * multiplyer, -(cry * 2 * multiplyer));
}
/*
* pass in values as needed for patterns
*/
imageDisplay.setScalingValues(crx * multiplyer, (crh * multiplyer) + cry, multiplyer * scaling);
g2.setRenderingHints(ColorSpaces.hints);
g2.transform(imageScaling);
if (rotated) {
if (rotation == 90) { //90
if (multiplyer < 1) {
cry = imageScaling.getTranslateX() + cry;
crx = imageScaling.getTranslateY() + crx;
} else {
cry = (int) ((imageScaling.getTranslateX() / multiplyer) + cry);
crx = (int) ((imageScaling.getTranslateY() / multiplyer) + crx);
}
crx /= scaling;
cry /= scaling;
g2.translate(-crx, -cry);
} else { //270
if (cry < 0) {
g2.translate(-(crx / scaling), (mediaH - crh + cry) / scaling);
} else {
g2.translate(-(crx / scaling), (mediaH - crh - cry) / scaling);
}
}
}
// decode and print in 1 go
currentImageDecoder.setObjectValue(ValueTypes.DirectRendering, g2); //(Graphics2D) graphics);
imageDisplay.setG2(g2);
currentImageDecoder.decodePageContent(pdfObject);
final AffineTransform old = g2.getTransform();
g2.scale(1, -1);
g2.translate(0, -((cry / scaling) + (crh / scaling)));
SwingHelper.scaleDisplay(g2, 0, 0, (int) (crw / scaling), (int) (crh / scaling));
g2.setTransform(old);
g2.setClip(null);
return image;
}
}