aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java
diff options
context:
space:
mode:
authortknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2013-01-09 15:41:29 +0000
committertknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2013-01-09 15:41:29 +0000
commit535a04fa05f739ec16dd81666e3b0f82dfbd442d (patch)
tree0804f301c1a9ceb303a8441b7b29244fc8eb7ff0 /src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java
parent1efaf6fd5619dfa95c9d7e8c71eda4c2ffba4998 (diff)
downloadpdf-as-3-535a04fa05f739ec16dd81666e3b0f82dfbd442d.tar.gz
pdf-as-3-535a04fa05f739ec16dd81666e3b0f82dfbd442d.tar.bz2
pdf-as-3-535a04fa05f739ec16dd81666e3b0f82dfbd442d.zip
pdf-as-lib maven project files moved to pdf-as-lib
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/pdf-as/trunk@926 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
Diffstat (limited to 'src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java')
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java377
1 files changed, 0 insertions, 377 deletions
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java
deleted file mode 100644
index a0311da..0000000
--- a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java
+++ /dev/null
@@ -1,377 +0,0 @@
-/**
- * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
- * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
- * joint initiative of the Federal Chancellery Austria and Graz University of
- * Technology.
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://www.osor.eu/eupl/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
- *
- * $Id: PDFPage.java,v 1.5 2006/10/31 08:09:33 wprinz Exp $
- */
-package at.knowcenter.wag.egov.egiz.pdf;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-import org.pdfbox.cos.COSName;
-import org.pdfbox.cos.COSStream;
-import org.pdfbox.pdmodel.PDPage;
-import org.pdfbox.pdmodel.PDResources;
-import org.pdfbox.pdmodel.common.PDStream;
-import org.pdfbox.pdmodel.graphics.xobject.PDXObject;
-import org.pdfbox.pdmodel.graphics.xobject.PDXObjectForm;
-import org.pdfbox.util.Matrix;
-import org.pdfbox.util.PDFOperator;
-import org.pdfbox.util.PDFTextStripper;
-import org.pdfbox.util.TextPosition;
-import org.pdfbox.util.operator.OperatorProcessor;
-
-import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger;
-
-/**
- * PDFPage is an inner class that is used to calculate the page length of a PDF
- * Document page. It extends the PDFTextStripper class and implement one
- * interested method: {@link PDFPage#showCharacter(TextPosition)}<br>
- * This method is called when processing the FileStream. By calling the method
- * {@link org.pdfbox.util.PDFStreamEngine#processStream(org.pdfbox.pdmodel.PDPage, org.pdfbox.pdmodel.PDResources, org.pdfbox.cos.COSStream)}
- * the implemented method showCharacter is called.
- *
- * @author wlackner
- * @see PDFTextStripper
- */
-public class PDFPage extends PDFTextStripper
-{
- /**
- * The logger definition.
- */
- private static final Logger logger_ = ConfigLogger.getLogger(PDFPage.class);
-
- /**
- * The maximum (lowest) y position of a character.
- */
- protected float max_character_ypos = Float.NEGATIVE_INFINITY;
-
- /**
- * The maximum (lowest y position of an image.
- */
- protected float max_image_ypos = Float.NEGATIVE_INFINITY;
-
- /**
- * The y coordinate of the footer line. PDF elements below this footer line will not be regarded.
- */
- protected float footer_line = 0.0f;
-
- /**
- * Constructor.
- *
- * @param footer_line The y coordinate of the footer line. PDF elements below this footer line will not be regarded.
- *
- * @throws IOException
- */
- public PDFPage(float footer_line) throws IOException
- {
- super();
-
- this.footer_line = footer_line;
-
- OperatorProcessor newInvoke = new MyInvoke();
- newInvoke.setContext(this);
- operators.put("Do", newInvoke);
- }
-
-
- protected void processOperator(PDFOperator operator, List arguments) throws IOException
- {
- //logger_.debug("operator = " + operator);
-
- super.processOperator(operator, arguments);
- }
-
- // exthex
- /**
- * A method provided as an event interface to allow a subclass to perform some
- * specific functionality when a character needs to be displayed. This method
- * is used to calculate the latest position of a text in the page. Sorry for
- * this missinterpretation of the method, but it is the only way to do this
- * (provided by PDFBox)!!!
- *
- * @param text
- * the character to be displayed -> calculate there y position.
- */
- protected void showCharacter(TextPosition text)
- {
- float current_y = text.getY();
- final String character = text.getCharacter();
-
- int pageRotation = page.findRotation();
- //logger_.debug("PageRotation = " + pageRotation);
- if (pageRotation == 0)
- {
- current_y = text.getY();
- }
- if (pageRotation == 90)
- {
- current_y = text.getX();
- }
- if (pageRotation == 180)
- {
- float page_height = page.findMediaBox().getHeight();
- current_y = page_height - text.getY();
- }
- if (pageRotation == 270)
- {
- float page_height = page.findMediaBox().getHeight();
- current_y = page_height - text.getX();
- }
-
-
- if (current_y > this.footer_line)
- {
- //logger_.debug("character is below footer_line. footer_line = " + this.footer_line + ", text.character=" + character + ", y=" + current_y);
- return;
- }
-
- // store ypos of the char if it is not empty
- if (!character.equals(" ") && current_y > this.max_character_ypos)
- {
- this.max_character_ypos = current_y;
- //logger_.debug("text.character=" + character + ", y=" + current_y);
- // System.err.println(character + "|" + current_y);
- }
-
- //logger_.error("text.character=" + character + ", y=" + current_y + " max_c=" + this.max_character_ypos);
- // System.err.println(character + "|" + current_y);
- }
-
- // use this funtion getting an unsorted text output
- // public void showString(byte[] string) {
- // logger_.debug(new String(string));
- // }
-
- /**
- * Returns the calculated page length.
- *
- * @return the max page length value
- */
- public float getMaxPageLength()
- {
- float max_ypos = Float.NEGATIVE_INFINITY;
-
- if (this.max_character_ypos > this.max_image_ypos)
- {
- max_ypos = this.max_character_ypos;
- }
- else
- {
- max_ypos = this.max_image_ypos;
- }
- //logger_.error("max len=" + max_ypos);
- return max_ypos;
- }
-
- public class MyInvoke extends OperatorProcessor
- {
-
- public void process(PDFOperator operator, List arguments) throws IOException
- {
- COSName name = (COSName) arguments.get(0);
- //logger_.error("<Do name=\"" + name.getName() + "\">");
-
- // PDResources res = context.getResources();
-
- Map xobjects = context.getXObjects();
- PDXObject xobject = (PDXObject) xobjects.get(name.getName());
-
- PDStream stream = xobject.getPDStream();
- COSStream cos_stream = stream.getStream();
-
- COSName subtype = (COSName) cos_stream.getDictionaryObject(COSName.SUBTYPE);
- //logger_.error("<Do subtype name=\"" + subtype.getName() + "\">");
- if (subtype.equals(COSName.IMAGE))
- {
- //logger_.error("XObject Image");
-
- Matrix ctm = context.getGraphicsState().getCurrentTransformationMatrix();
- //logger_.debug("ctm = " + ctm);
-
- Pos [] coordinates = new Pos [] {
- new Pos(0, 0, 1),
- new Pos(1, 0, 1),
- new Pos(0, 1, 1),
- new Pos(1, 1, 1) };
-
- Pos [] transformed_coordinates = transtormCoordinates(coordinates, ctm);
-
- /**********************************************************
- * pdf-as fix:
- * calculating min and max point of an image to look where
- * the signature should be placed
- * fix solves problems with footer and images and
- * placement of the signature in an image only pdf document
- **********************************************************/
-
- float actual_lowest_point = Float.NaN;
- float actual_starting_point = Float.NaN;
-
- int pageRotation = page.findRotation();
- logger_.debug("PageRotation = " + pageRotation);
- if (pageRotation == 0)
- {
- float min_y = findMinY(transformed_coordinates);
- logger_.debug("min_y = " + min_y);
- float page_height = page.findMediaBox().getHeight();
- logger_.debug("page_height = " + page_height);
-
- actual_lowest_point = page_height - min_y;
- actual_starting_point = page_height - findMaxY(transformed_coordinates);
- }
- if (pageRotation == 90)
- {
- float max_x = findMaxX(transformed_coordinates);
- logger_.debug("max_x = " + max_x);
- float page_width = page.findMediaBox().getWidth();
- logger_.debug("page_width = " + page_width);
-
- actual_lowest_point = max_x;
- actual_starting_point = findMinX(transformed_coordinates);
- }
- if (pageRotation == 180)
- {
- float min_y = findMinY(transformed_coordinates);
- logger_.debug("min_y = " + min_y);
- float page_height = page.findMediaBox().getHeight();
- actual_lowest_point = page_height - findMaxY(transformed_coordinates);
- actual_starting_point = page_height - min_y;
- }
- if (pageRotation == 270)
- {
- float min_x = findMinX(transformed_coordinates);
- logger_.debug("min_x = " + min_x);
-
- float page_width = page.findMediaBox().getWidth();
- logger_.debug("page_width = " + page_width);
-
- actual_lowest_point = page_width - min_x;
- actual_starting_point = page_width - findMaxX(transformed_coordinates);
- }
-
-
- logger_.debug("actual_lowest_point = " + actual_lowest_point);
-
- if (actual_lowest_point > PDFPage.this.footer_line && actual_starting_point > PDFPage.this.footer_line)
- {
- logger_.debug("image is below footer_line. footer_line = " + PDFPage.this.footer_line);
- return;
- }
-
- if (actual_lowest_point > PDFPage.this.max_image_ypos)
- {
- PDFPage.this.max_image_ypos = actual_lowest_point;
- }
-
- return;
- }
-
- if (xobject instanceof PDXObjectForm)
- {
- PDXObjectForm form = (PDXObjectForm) xobject;
- COSStream invoke = (COSStream) form.getCOSObject();
- PDResources pdResources = form.getResources();
- PDPage page = context.getCurrentPage();
- if (pdResources == null)
- {
- pdResources = page.findResources();
- }
-
- getContext().processSubStream(page, pdResources, invoke);
- }
- }
- }
-
- public static Pos [] transtormCoordinates (Pos [] coordinates, Matrix m)
- {
- Pos [] transformed = new Pos [coordinates.length];
- for (int i = 0; i < coordinates.length; i++)
- {
- transformed[i] = transtormCoordinate(coordinates[i], m);
- }
- return transformed;
- }
-
- public static Pos transtormCoordinate (Pos pos, Matrix m)
- {
- Pos transformed = new Pos();
- transformed.x = pos.x * m.getValue(0, 0) + pos.y * m.getValue(1, 0) + pos.z * m.getValue(2, 0);
- transformed.y = pos.x * m.getValue(0, 1) + pos.y * m.getValue(1, 1) + pos.z * m.getValue(2, 1);
- transformed.z = pos.x * m.getValue(0, 2) + pos.y * m.getValue(1, 2) + pos.z * m.getValue(2, 2);
-
- logger_.debug(" transformed " + pos + " --> " + transformed);
- return transformed;
- }
-
- public static float findMinY (Pos [] coordinates)
- {
- float min = Float.POSITIVE_INFINITY;
- for (int i = 0; i < coordinates.length; i++)
- {
- if (coordinates[i].y < min)
- {
- min = coordinates[i].y;
- }
- }
- return min;
- }
-
- public static float findMaxY(Pos[] coordinates) {
- float max = 0;
- for (int i = 0; i < coordinates.length; i++) {
- if (coordinates[i].y > max) {
- max = coordinates[i].y;
- }
- }
- return max;
- }
-
- public static float findMaxX (Pos [] coordinates)
- {
- float max = Float.NEGATIVE_INFINITY;
- for (int i = 0; i < coordinates.length; i++)
- {
- if (coordinates[i].x > max)
- {
- max = coordinates[i].x;
- }
- }
- return max;
- }
- public static float findMinX (Pos [] coordinates)
- {
- float min = Float.POSITIVE_INFINITY;
- for (int i = 0; i < coordinates.length; i++)
- {
- if (coordinates[i].x < min)
- {
- min = coordinates[i].x;
- }
- }
- return min;
- }
-
-} \ No newline at end of file