All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jpedal.objects.acroforms.overridingImplementations.PdfSwingPopup Maven / Gradle / Ivy

The newest version!
/*
 * ===========================================
 * Java Pdf Extraction Decoding Access Library
 * ===========================================
 *
 * Project Info:  http://www.idrsolutions.com
 * Help section for developers at http://www.idrsolutions.com/java-pdf-library-support/
 *
 * (C) Copyright 1997-2013, IDRsolutions and Contributors.
 *
 * 	This file is part of JPedal
 *
     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


 *
 * ---------------
 * PdfSwingPopup.java
 * ---------------
 */
package org.jpedal.objects.acroforms.overridingImplementations;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Point;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.BorderFactory;
import javax.swing.JInternalFrame;
import javax.swing.JTextArea;

import org.jpedal.objects.raw.FormObject;
import org.jpedal.objects.raw.PdfDictionary;
import org.jpedal.objects.raw.PdfObject;

/**
 * provide PDF poup for Annotations
 */
public class PdfSwingPopup extends JInternalFrame {

	private static final long serialVersionUID = 796302916236391896L;

	public PdfSwingPopup(FormObject formObj, PdfObject popupObj, int cropBoxWidth) {
		super();

		if (formObj.getParameterConstant(PdfDictionary.Subtype) == PdfDictionary.Text) {
			String name = formObj.getTextStreamValue(PdfDictionary.Name);
			if (name != null) {
				// a Comment Annotation where we setup a standard popup
				if (name.equals("Comment")) {

					// change Rect - Comment Annotation bounds are the formObj.y and width of page for x,
					// then we make sure its visible in bottom right of display
					float[] rect = popupObj.getFloatArray(PdfDictionary.Rect);

					// rect[0] = cropBoxWidth;
					// rect[2] = rect[0]+250;//worked out sizes from comparing to adobe.
					// rect[3] = rect[1];
					// rect[1] = rect[1]-170;

					popupObj.setFloatArray(PdfDictionary.Rect, rect);

					// change Open - we invert after setup so set to false to show in end.
					popupObj.setBoolean(PdfDictionary.Open, false);

					// if no color defined so use default yellow for Comment (255,255,0)
					if (formObj.getFloatArray(PdfDictionary.C) == null) formObj.setFloatArray(PdfDictionary.C, new float[] { 255, 255, 0 });
				}
			}
			else
				if (popupObj != null) {
					float[] rect = popupObj.getFloatArray(PdfDictionary.Rect);
					if (rect != null) {
						rect[0] = rect[0];
						rect[2] = rect[2] + 160;// worked out sizes from comparing to adobe.
						rect[3] = rect[3] + 80;
						rect[1] = rect[1];
						popupObj.setFloatArray(PdfDictionary.Rect, rect);
					}
				}
		}

		// read in date for title bar
		String mStream = formObj.getTextStreamValue(PdfDictionary.M);
		StringBuffer date = null;
		if (mStream != null) {
			date = new StringBuffer(mStream);
			date.delete(0, 2);// delete D:
			date.insert(10, ':');
			date.insert(13, ':');
			date.insert(16, ' ');

			String year = date.substring(0, 4);
			String day = date.substring(6, 8);
			date.delete(6, 8);
			date.delete(0, 4);
			date.insert(0, day);
			date.insert(4, year);
			date.insert(2, '/');
			date.insert(5, '/');
			date.insert(10, ' ');

			// date.delete(19, date.length());//delete the +01'00' Time zone definition
		}

		// setup title text for popup
		String subject = formObj.getTextStreamValue(PdfDictionary.Subj);
		String popupTitle = formObj.getTextStreamValue(PdfDictionary.T);
		if (popupTitle == null) popupTitle = "";

		String title = "";
		if (subject != null) title += subject + '\t';
		if (date != null) title += date;
		title += '\n' + popupTitle;

		// main body text on contents is always a text readable form of the form or the content of the popup window.
		String contentString = formObj.getTextStreamValue(PdfDictionary.Contents);
		if (contentString == null) contentString = "";
		if (contentString.indexOf('\r') != -1) contentString = contentString.replaceAll("\r", "\n");

		// setup background color
		float[] col = formObj.getFloatArray(PdfDictionary.C);
		Color bgColor = null;
		if (col != null) {
			if (col[0] > 1 || col[1] > 1 || col[2] > 1) bgColor = new Color((int) col[0], (int) col[1], (int) col[2]);
			else bgColor = new Color(col[0], col[1], col[2]);

			// and set border to that if valid
			setBorder(BorderFactory.createLineBorder(bgColor));
		}

		// remove title bar from internalframe so its looks as we want
		((javax.swing.plaf.basic.BasicInternalFrameUI) this.getUI()).setNorthPane(null);

		setLayout(new BorderLayout());

		// add title bar
		JTextArea titleBar = new JTextArea(title);
		titleBar.setEditable(false);
		if (bgColor != null) titleBar.setBackground(bgColor);
		add(titleBar, BorderLayout.NORTH);

		// add content area
		JTextArea contentArea = new JTextArea(contentString);
		contentArea.setWrapStyleWord(true);
		contentArea.setLineWrap(true);
		add(contentArea, BorderLayout.CENTER);

		// set the font sizes so that they look more like adobes popups
		Font titFont = titleBar.getFont();
		titleBar.setFont(new Font(titFont.getName(), titFont.getStyle(), titFont.getSize() - 1));
		Font curFont = contentArea.getFont();
		contentArea.setFont(new Font(curFont.getName(), curFont.getStyle(), curFont.getSize() - 2));

		// add our drag listener so it acts like an internal frame
		MyMouseMotionAdapter mmma = new MyMouseMotionAdapter();
		titleBar.addMouseMotionListener(mmma);

		// add focus listener to bring selected popup to front
		addFocusListener(new FocusAdapter() {
			@Override
			public void focusGained(FocusEvent e) {
				toFront();
				super.focusGained(e);
			}
		});
	}

	private class MyMouseMotionAdapter extends MouseMotionAdapter {
		@Override
		public void mouseDragged(MouseEvent e) {
			// move the popup as the user drags the mouse
			Point pt = e.getPoint();
			Point curLoc = getLocation();
			curLoc.translate(pt.x, pt.y);
			setLocation(curLoc);

			super.mouseDragged(e);
		}
	}

	/*
	 * unsorted1\1414f3_file.pdf baseline_screens\customers1\2007-09-17_PLUMBING_SHOP_DWGS-_PART_1.pdf baseline_screens\extra\todd\B05016_12_TEST.pdf
	 * baseline_screens\extra\todd\B07037_55_TEST.pdf baseline_screens\extra\todd\B11115_99_Test.pdf baseline_screens\extra\todd\B15002_71_TEST.pdf
	 * baseline_screens\extra\todd\B15040_99_TEST.pdf baseline_screens\extra\todd\B16006_02_TEST.pdf baseline_screens\extra\todd\B16052_01_TEST.pdf
	 * baseline_screens\extra\todd\B16099_07_TEST.pdf baseline_screens\extra\todd\B17079_01_TEST.pdf baseline_screens\extra\todd\B20009_03_TEST.pdf
	 * baseline_screens\extra\todd\B25025_01_TEST.pdf baseline_screens\extra\todd\B35023_02_test.pdf baseline_screens\customers1\Binder1.pdf
	 * baseline_screens\debug1\DET.0000000159.03172005-S1.pdf baseline_screens\debug1\DrWang.pdf baseline_screens\customers1\example_cern.pdf
	 * pdftestfiles\rogsFiles\FelderTest.pdf baseline_screens\adobe\form2-1.pdf baseline_screens\abacus\Kreditorenbelege.pdf
	 * baseline_screens\abacus\Kreditorenbelege2.pdf baseline_screens\forms\multiplerevisions.pdf baseline_screens\abacus\multiplerevisions2.pdf
	 * C:\Documents and Settings\chris\My Documents\idrsolutions\tasks\Plumbing_Fixtures.pdf baseline_screens\docusign\Problem4.pdf
	 * baseline_screens\extra\bayer\Reportt0.pdf baseline_screens\acroforms\smart-mortgageapp.pdf
	 * baseline_screens\acroforms\smart-mortgageapp_signed.pdf baseline_screens\acroforms\smart-mortgageapp_unsigned.pdf
	 * baseline_screens\debug2\StampsProblems.pdf extras\annotsforChris\technical-contract.pdf baseline_screens\customers1\test_filefails_jpedal.pdf
	 * baseline_screens\customers2\ULTRA+PETROLEUM+2006_Annual_Report.pdf
	 */
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy