org.jpedal.examples.viewer.commands.ExtractSelectionAsImage Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of OpenViewerFX Show documentation
Show all versions of OpenViewerFX Show documentation
An Open Source JavaFX PDF Viewer
/*
* ===========================================
* 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-2015 IDRsolutions and Contributors.
*
* This file is part of JPedal/JPDF2HTML5
*
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.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* ---------------
* ExtractSelectionAsImage.java
* ---------------
*/
package org.jpedal.examples.viewer.commands;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import org.jpedal.PdfDecoderInt;
import org.jpedal.examples.handlers.DefaultImageHelper;
import org.jpedal.examples.viewer.Values;
import org.jpedal.examples.viewer.commands.generic.GUIExtractSelectionAsImage;
import org.jpedal.examples.viewer.utils.FileFilterer;
import org.jpedal.examples.viewer.utils.IconiseImage;
import org.jpedal.gui.GUIFactory;
import org.jpedal.utils.LogWriter;
import org.jpedal.utils.Messages;
/**
* This class is a Swing specific class to hold the Swing code for
* Extracting the drawn CursorBox as an Image.
*/
public class ExtractSelectionAsImage extends GUIExtractSelectionAsImage {
public static void execute(final Values commonValues, final GUIFactory currentGUI, final PdfDecoderInt decode_pdf) {
extractSelectedScreenAsImage(commonValues, currentGUI, decode_pdf); //Calls the generic code.
if(snapShot == null){
return;
}
final Container frame = (Container) currentGUI.getFrame();
final JDialog displayFrame = new JDialog((JFrame) null, true);
final JPanel image_display = new JPanel();
//Set up dialog
displayFrame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
if (commonValues.getModeOfOperation() != Values.RUNNING_APPLET) {
displayFrame.setLocationRelativeTo(null);
displayFrame.setLocation(frame.getLocationOnScreen().x + 10, frame.getLocationOnScreen().y + 10);
}
//Set up imagedisplay
String propValue = currentGUI.getProperties().getValue("replacePdfDisplayBackground");
if (!propValue.isEmpty()
&& propValue.equalsIgnoreCase("true")) {
//decode_pdf.useNewGraphicsMode = false;
propValue = currentGUI.getProperties().getValue("pdfDisplayBackground");
int col = Integer.parseInt(propValue);
image_display.setBackground(new Color(col));
} else {
if (decode_pdf.getDecoderOptions().getDisplayBackgroundColor() != null) {
int col = decode_pdf.getDecoderOptions().getDisplayBackgroundColor().getRGB();
image_display.setBackground(new Color(col));
} else if (decode_pdf.useNewGraphicsMode()) {
image_display.setBackground(new Color(55, 55, 65));
} else {
image_display.setBackground(new Color(190, 190, 190));
}
}
final IconiseImage icon_image = new IconiseImage(snapShot);
image_display.add(new JLabel(icon_image), BorderLayout.CENTER);
//Set up button bar
final JPanel buttonBar = new JPanel();
buttonBar.setBackground(image_display.getBackground());
final JButton copy = new JButton(Messages.getMessage("PdfSnapshotPreview.Copy"));
copy.setFont(new Font("SansSerif", Font.PLAIN, 12));
buttonBar.add(copy, BorderLayout.EAST);
copy.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
displayFrame.setVisible(false);
ClipboardImage clipboardImage = new ClipboardImage(snapShot);
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
c.setContents(clipboardImage, null);
}
});
/**
* yes option allows user to save content
*/
final JButton yes = new JButton(Messages.getMessage("PdfSnapshotPreview.Save"));
yes.setFont(new Font("SansSerif", Font.PLAIN, 12));
buttonBar.add(yes, BorderLayout.WEST);
yes.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
displayFrame.setVisible(false);
File file;
StringBuffer fileToSave;
boolean finished = false;
while (!finished) {
/**
* Sets the saveable file-types for snapshot image.
*/
final JFileChooser chooser = new JFileChooser(System.getProperty("user.dir"));
final FileFilterer defaultOpt = new FileFilterer(new String[]{"png", "png"}, "PNG");
chooser.setFileFilter(defaultOpt); //sets the default file-type to PNG
chooser.addChoosableFileFilter(new FileFilterer(new String[]{"tif", "tiff"}, "TIFF")); //adds Tiff as a saveable filetype option
chooser.addChoosableFileFilter(new FileFilterer(new String[]{"jpg", "jpeg"}, "JPEG")); //adds jpeg as a saveable filetype option
final int approved = chooser.showSaveDialog(image_display);
if (approved == JFileChooser.APPROVE_OPTION) {
file = chooser.getSelectedFile();
fileToSave = new StringBuffer(file.getAbsolutePath());
String format = chooser.getFileFilter().getDescription();
if (format.equals("All Files")) {
format = "TIFF";
}
if (!fileToSave.toString().toLowerCase().endsWith(('.' + format).toLowerCase())) {
fileToSave.append('.').append(format);
file = new File(fileToSave.toString());
}
if (file.exists()) {
final int n = currentGUI.showConfirmDialog(fileToSave.append('\n')
+ Messages.getMessage("PdfViewerMessage.FileAlreadyExists") + ".\n"
+ Messages.getMessage("PdfViewerMessage.ConfirmResave"),
Messages.getMessage("PdfViewerMessage.Resave"), JOptionPane.YES_NO_OPTION);
if (n == 1) {
continue;
}
}
//Do the actual save
if (snapShot != null) {
try {
DefaultImageHelper.write(snapShot, format, fileToSave.toString());
} catch (IOException ex) {
LogWriter.writeLog("Exception in writing image " + ex);
}
}
finished = true;
} else {
return;
}
}
displayFrame.dispose();
}
});
/**
* no option just removes display
*/
final JButton no = new JButton(Messages.getMessage("PdfSnapshotPreview.Cancel"));
no.setFont(new Font("SansSerif", Font.PLAIN, 12));
buttonBar.add(no, BorderLayout.EAST);
no.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
displayFrame.dispose();
}
});
//Add all components to dialog
displayFrame.setTitle(Messages.getMessage("PdfViewerMessage.SaveImage"));
displayFrame.getContentPane().add(image_display, BorderLayout.CENTER);
displayFrame.getContentPane().add(buttonBar, BorderLayout.SOUTH);
displayFrame.setResizable(false);
displayFrame.pack();
//Show dialog
displayFrame.setVisible(true);
}
}