aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-pdfbox
diff options
context:
space:
mode:
authorAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2015-05-22 08:59:04 +0200
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2015-05-22 08:59:04 +0200
commit07a9ceecac85c3c0f329285ae113bfdd5f2971bd (patch)
tree0570b707d98d1664ccf1829babb38a87e2ac750c /pdf-as-pdfbox
parentf933114e2cfd9e34f6e41e6548bee633169c867d (diff)
downloadpdf-as-4-07a9ceecac85c3c0f329285ae113bfdd5f2971bd.tar.gz
pdf-as-4-07a9ceecac85c3c0f329285ae113bfdd5f2971bd.tar.bz2
pdf-as-4-07a9ceecac85c3c0f329285ae113bfdd5f2971bd.zip
TTF font caching, Import cleanup, auto positioning in rotated pages
Diffstat (limited to 'pdf-as-pdfbox')
-rw-r--r--pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox/PDFBOXObject.java9
-rw-r--r--pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java1
-rw-r--r--pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/FontInfoCache.java1
-rw-r--r--pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsTemplateCreator.java4
-rw-r--r--pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java4
-rw-r--r--pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureProperties.java7
-rw-r--r--pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxFont.java48
-rw-r--r--pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java45
-rw-r--r--pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PdfBoxStamper.java2
-rw-r--r--pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PdfBoxVisualObject.java12
-rw-r--r--pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/TableDrawUtils.java6
-rw-r--r--pdf-as-pdfbox/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java157
12 files changed, 166 insertions, 130 deletions
diff --git a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox/PDFBOXObject.java b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox/PDFBOXObject.java
index f80df075..ef4c055c 100644
--- a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox/PDFBOXObject.java
+++ b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox/PDFBOXObject.java
@@ -1,10 +1,13 @@
package at.gv.egiz.pdfas.lib.impl.pdfbox;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import javax.activation.DataSource;
import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.font.PDFont;
import at.gv.egiz.pdfas.lib.impl.status.OperationStatus;
import at.gv.egiz.pdfas.lib.impl.status.PDFObject;
@@ -13,6 +16,8 @@ public class PDFBOXObject extends PDFObject {
private PDDocument doc;
+ private Map<String, PDFont> fontCache = new HashMap<String, PDFont>();
+
public PDFBOXObject(OperationStatus operationStatus) {
super(operationStatus);
}
@@ -56,4 +61,8 @@ public class PDFBOXObject extends PDFObject {
public String getPDFVersion() {
return String.valueOf(getDocument().getDocument().getVersion());
}
+
+ public Map<String, PDFont> getFontCache() {
+ return fontCache;
+ }
}
diff --git a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java
index 8095911d..cacd39c0 100644
--- a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java
+++ b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java
@@ -53,7 +53,6 @@ import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageNode;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.common.PDNumberTreeNode;
-import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDAttributeObject;
import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement;
import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureTreeRoot;
import org.apache.pdfbox.pdmodel.graphics.color.PDOutputIntent;
diff --git a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/FontInfoCache.java b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/FontInfoCache.java
index 10a5c9f8..3f85e445 100644
--- a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/FontInfoCache.java
+++ b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/FontInfoCache.java
@@ -4,4 +4,5 @@ public class FontInfoCache {
String filename;
String fontName;
String fontFamily;
+ String fontPath;
}
diff --git a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsTemplateCreator.java b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsTemplateCreator.java
index 8e03c4d4..0ceb6139 100644
--- a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsTemplateCreator.java
+++ b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsTemplateCreator.java
@@ -55,7 +55,7 @@ public class PDFAsTemplateCreator extends PDFTemplateCreator {
}
- public InputStream buildPDF(PDFAsVisualSignatureDesigner properties)
+ public InputStream buildPDF(PDFAsVisualSignatureDesigner properties, PDDocument originalDocument)
throws IOException, PdfAsException {
logger.debug("pdf building has been started");
PDFTemplateStructure pdfStructure = pdfBuilder.getStructure();
@@ -108,7 +108,7 @@ public class PDFAsTemplateCreator extends PDFTemplateCreator {
properties.getRotation() + properties.getPageRotation());
// inner formstream, form and resource (hlder form containts inner form)
- this.pdfBuilder.createInnerFormStreamPdfAs(template);
+ this.pdfBuilder.createInnerFormStreamPdfAs(template, originalDocument);
this.pdfBuilder.createInnerFormResource();
PDResources innerFormResource = pdfStructure.getInnerFormResources();
this.pdfBuilder.createInnerForm(innerFormResource, pdfStructure.getInnterFormStream(), formater);
diff --git a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java
index 33e4102d..cd3d1899 100644
--- a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java
+++ b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java
@@ -241,7 +241,7 @@ public class PDFAsVisualSignatureBuilder extends PDVisibleSigBuilder implements
}
}
- public void createInnerFormStreamPdfAs(PDDocument template)
+ public void createInnerFormStreamPdfAs(PDDocument template, PDDocument origDoc)
throws PdfAsException {
try {
@@ -332,7 +332,7 @@ public class PDFAsVisualSignatureBuilder extends PDVisibleSigBuilder implements
appendRawCommands(getStructure().getHolderFormStream()
.createOutputStream(), holderFormComment.trim().replace("\n", "").replace("\r", ""));
appendRawCommands(getStructure().getInnterFormStream()
- .createOutputStream(), innerFormComment.trim().replace("\n", "").replace("\r", ""));
+ .createOutputStream(), innerFormComment/*.trim().replace("\n", "").replace("\r", "")*/);
// appendRawCommands(getStructure().getImageFormStream().createOutputStream(),
// imgFormComment);
logger.debug("Injected apereance stream to pdf");
diff --git a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureProperties.java b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureProperties.java
index 3fdc6b4c..0b00cac1 100644
--- a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureProperties.java
+++ b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureProperties.java
@@ -28,7 +28,6 @@ import java.util.List;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,6 +51,8 @@ public class PDFAsVisualSignatureProperties extends PDVisibleSigProperties {
private float rotationAngle = 0;
+ private PDDocument origDoc;
+
private SignatureProfileSettings signatureProfileSettings;
private String alternativeTableCaption="";
@@ -67,7 +68,7 @@ public class PDFAsVisualSignatureProperties extends PDVisibleSigProperties {
}
this.rotationAngle = pos.getRotation();
try {
- PDDocument origDoc = object.getDocument();
+ origDoc = object.getDocument();
designer = new PDFAsVisualSignatureDesigner(origDoc, pos.getPage(), this, pos.isMakeNewPage());
List<?> pages = origDoc.getDocumentCatalog().getAllPages();
@@ -113,7 +114,7 @@ public class PDFAsVisualSignatureProperties extends PDVisibleSigProperties {
PDFAsVisualSignatureBuilder builder = new PDFAsVisualSignatureBuilder(this, this.settings, designer);
PDFAsTemplateCreator creator = new PDFAsTemplateCreator(builder);
try {
- setVisibleSignature(creator.buildPDF(designer));
+ setVisibleSignature(creator.buildPDF(designer, this.origDoc));
} catch (PdfAsException e) {
throw new PdfAsWrappedIOException(e);
}
diff --git a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxFont.java b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxFont.java
index fdbf40e2..05c7eb2a 100644
--- a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxFont.java
+++ b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxFont.java
@@ -40,7 +40,6 @@ import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSObject;
-import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
@@ -48,6 +47,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import at.gv.egiz.pdfas.common.settings.ISettings;
+import at.gv.egiz.pdfas.lib.impl.pdfbox.PDFBOXObject;
public class PDFBoxFont {
@@ -94,7 +94,6 @@ public class PDFBoxFont {
float fontSize;
String fontDesc;
String ttfFontDesc;
- PDDocument doc;
ISettings settings;
private FontInfoCache getFontInfo(String pathName) {
@@ -128,6 +127,7 @@ public class PDFBoxFont {
fontInfo.filename = pathName;
fontInfo.fontFamily = fontFamilyToLoad;
fontInfo.fontName = fontNameToLoad;
+ fontInfo.fontPath = pathName;
fontInfoCache.put(pathName, fontInfo);
return fontInfo;
} catch (Throwable e) {
@@ -138,9 +138,13 @@ public class PDFBoxFont {
}
}
- private PDFont findCachedFont(PDDocument doc, FontInfoCache fontInfo) {
+ private PDFont findCachedFont(PDFBOXObject pdfObject, FontInfoCache fontInfo) {
try {
- List<COSObject> cosObjects = doc.getDocument().getObjectsByType(
+ if(pdfObject.getFontCache().containsKey(fontInfo.fontPath)) {
+ return pdfObject.getFontCache().get(fontInfo.fontPath);
+ }
+
+ List<COSObject> cosObjects = pdfObject.getDocument().getDocument().getObjectsByType(
COSName.FONT);
//COSName cosFontName = COSName.getPDFName(fontInfo.fontName);
@@ -182,17 +186,17 @@ public class PDFBoxFont {
return null;
}
- private PDFont generateTTF(String fonttype, PDDocument doc)
+ private PDFont generateTTF(String fonttype, PDFBOXObject pdfObject)
throws IOException {
- boolean cacheNow = false;
- if (doc == null) {
+ /*boolean cacheNow = true;
+ if (pdfObject == null) {
if (this.doc == null) {
this.doc = new PDDocument();
}
doc = this.doc;
} else {
cacheNow = true;
- }
+ }*/
ttfFontDesc = fonttype;
String fontName = fonttype.replaceFirst("TTF:", "");
String fontPath = this.settings.getWorkingDirectory() + File.separator
@@ -208,7 +212,7 @@ public class PDFBoxFont {
if(fontInfo != null) {
- PDFont font = findCachedFont(doc, fontInfo);
+ PDFont font = findCachedFont(pdfObject, fontInfo);
if (font != null) {
return font;
@@ -218,7 +222,7 @@ public class PDFBoxFont {
logger.debug("Instantiating font.");
//if (cacheNow) {
- cachedfont = PDTrueTypeFont.loadTTF(doc, fontPath);
+ cachedfont = PDTrueTypeFont.loadTTF(pdfObject.getDocument(), fontPath);
fontStyleMap.put(fontPath, cachedfont);
return cachedfont;
//} else {
@@ -228,10 +232,10 @@ public class PDFBoxFont {
}
private PDFont generateFont(String fonttype, String fontder,
- PDDocument originalDoc) throws IOException {
+ PDFBOXObject pdfObject) throws IOException {
if (fonttype.startsWith("TTF:")) {
// Load TTF Font
- return generateTTF(fonttype, originalDoc);
+ return generateTTF(fonttype, pdfObject);
} else {
if (fontder == null) {
fontder = NORMAL;
@@ -247,15 +251,15 @@ public class PDFBoxFont {
}
}
- private void setFont(String desc, PDDocument originalDoc)
+ private void setFont(String desc, PDFBOXObject pdfObject)
throws IOException {
String[] fontArr = desc.split(",");
if (fontArr.length == 3) {
- font = generateFont(fontArr[0], fontArr[2], originalDoc);
+ font = generateFont(fontArr[0], fontArr[2], pdfObject);
fontSize = Float.parseFloat(fontArr[1]);
} else if (fontArr.length == 2 && fontArr[0].startsWith("TTF:")) {
- font = generateFont(fontArr[0], null, originalDoc);
+ font = generateFont(fontArr[0], null, pdfObject);
fontSize = Float.parseFloat(fontArr[1]);
} else {
logger.warn(
@@ -268,22 +272,24 @@ public class PDFBoxFont {
}
public PDFBoxFont(String fontDesc, ISettings settings,
- PDDocument originalDoc) throws IOException {
+ PDFBOXObject pdfObject) throws IOException {
this.settings = settings;
this.fontDesc = fontDesc;
logger.debug("Creating Font: " + fontDesc);
- this.setFont(fontDesc, originalDoc);
+ this.setFont(fontDesc, pdfObject);
}
- public PDFont getFont(PDDocument doc) throws IOException {
+ public PDFont getFont(/*PDFBOXObject pdfObject*/) throws IOException {
if (cachedfont != null) {
return cachedfont;
}
- if (font instanceof PDTrueTypeFont && doc != null) {
- return generateTTF(ttfFontDesc, doc);
+ return font;
+ /*
+ if (font instanceof PDTrueTypeFont && pdfObject != null) {
+ return generateTTF(ttfFontDesc, pdfObject);
} else {
return font;
- }
+ }*/
}
public float getFontSize() {
diff --git a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java
index 8959d631..d5c5d683 100644
--- a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java
+++ b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java
@@ -25,8 +25,6 @@ package at.gv.egiz.pdfas.lib.impl.stamping.pdfbox;
import java.awt.Color;
import java.awt.Dimension;
-import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
@@ -42,6 +40,7 @@ import at.gv.egiz.pdfas.common.exceptions.PdfAsWrappedIOException;
import at.gv.egiz.pdfas.common.settings.ISettings;
import at.gv.egiz.pdfas.common.utils.ImageUtils;
import at.gv.egiz.pdfas.common.utils.StringUtils;
+import at.gv.egiz.pdfas.lib.impl.pdfbox.PDFBOXObject;
import at.knowcenter.wag.egov.egiz.table.Entry;
import at.knowcenter.wag.egov.egiz.table.Style;
import at.knowcenter.wag.egov.egiz.table.Table;
@@ -70,6 +69,8 @@ public class PDFBoxTable {
PDDocument originalDoc;
+ PDFBOXObject pdfBoxObject;
+
private void normalizeContent(Table abstractTable) throws PdfAsException {
try {
int rows = abstractTable.getRows().size();
@@ -94,7 +95,7 @@ public class PDFBoxTable {
}
private void initializeStyle(Table abstractTable, PDFBoxTable parent,
- PDDocument originalDoc) throws IOException {
+ PDFBOXObject pdfBoxObject) throws IOException {
this.table = abstractTable;
try {
normalizeContent(abstractTable);
@@ -130,7 +131,7 @@ public class PDFBoxTable {
+ abstractTable.getName());
}
- font = new PDFBoxFont(fontString, settings, originalDoc);
+ font = new PDFBoxFont(fontString, settings, pdfBoxObject);
if (vfontString == null && parent != null && parent.style != null) {
vfontString = parent.style.getValueFont();
@@ -140,7 +141,7 @@ public class PDFBoxTable {
+ abstractTable.getName());
}
- valueFont = new PDFBoxFont(vfontString, settings, originalDoc);
+ valueFont = new PDFBoxFont(vfontString, settings, pdfBoxObject);
}
padding = style.getPadding();
@@ -148,11 +149,12 @@ public class PDFBoxTable {
}
public PDFBoxTable(Table abstractTable, PDFBoxTable parent, float fixSize,
- ISettings settings, PDDocument originalDoc) throws IOException,
+ ISettings settings, PDFBOXObject pdfBoxObject) throws IOException,
PdfAsException {
this.settings = settings;
- this.originalDoc = originalDoc;
- initializeStyle(abstractTable, parent, originalDoc);
+ this.pdfBoxObject = pdfBoxObject;
+ this.originalDoc = pdfBoxObject.getDocument();
+ initializeStyle(abstractTable, parent, pdfBoxObject);
float[] relativSizes = abstractTable.getColsRelativeWith();
if (relativSizes != null) {
colWidths = new float[relativSizes.length];
@@ -184,11 +186,12 @@ public class PDFBoxTable {
}
public PDFBoxTable(Table abstractTable, PDFBoxTable parent,
- ISettings settings, PDDocument originalDoc) throws IOException,
+ ISettings settings, PDFBOXObject pdfBoxObject) throws IOException,
PdfAsException {
this.settings = settings;
- this.originalDoc = originalDoc;
- initializeStyle(abstractTable, parent, originalDoc);
+ this.pdfBoxObject = pdfBoxObject;
+ this.originalDoc = pdfBoxObject.getDocument();
+ initializeStyle(abstractTable, parent, pdfBoxObject);
this.calculateWidthHeight();
}
@@ -318,10 +321,10 @@ public class PDFBoxTable {
float fontSize;
String string = (String) cell.getValue();
if (isValue) {
- c = valueFont.getFont(null);
+ c = valueFont.getFont();//null
fontSize = valueFont.getFontSize();
} else {
- c = font.getFont(null);
+ c = font.getFont();//null
fontSize = font.getFontSize();
}
if (string == null) {
@@ -350,7 +353,7 @@ public class PDFBoxTable {
PDFBoxTable pdfBoxTable = null;
if (cell.getValue() instanceof Table) {
pdfBoxTable = new PDFBoxTable((Table) cell.getValue(), this,
- this.settings, originalDoc);
+ this.settings, pdfBoxObject);
cell.setValue(pdfBoxTable);
} else if (cell.getValue() instanceof PDFBoxTable) {
pdfBoxTable = (PDFBoxTable) cell.getValue();
@@ -526,10 +529,10 @@ public class PDFBoxTable {
float fontSize;
String string = (String) cell.getValue();
if (isValue) {
- c = valueFont.getFont(null);
+ c = valueFont.getFont();//null
fontSize = valueFont.getFontSize();
} else {
- c = font.getFont(null);
+ c = font.getFont();//null
fontSize = font.getFontSize();
}
@@ -554,13 +557,13 @@ public class PDFBoxTable {
PDFBoxTable pdfBoxTable = null;
if (cell.getValue() instanceof Table) {
pdfBoxTable = new PDFBoxTable((Table) cell.getValue(), this,
- width, this.settings, this.originalDoc);
+ width, this.settings, this.pdfBoxObject);
cell.setValue(pdfBoxTable);
} else if (cell.getValue() instanceof PDFBoxTable) {
// recreate here beacuse of fixed width!
pdfBoxTable = (PDFBoxTable) cell.getValue();
pdfBoxTable = new PDFBoxTable(pdfBoxTable.table, this, width,
- this.settings, this.originalDoc);
+ this.settings, this.pdfBoxObject);
cell.setValue(pdfBoxTable);
} else {
throw new IOException("Failed to build PDFBox Table");
@@ -582,10 +585,10 @@ public class PDFBoxTable {
float fontSize;
String string = (String) cell.getValue();
if (isValue) {
- c = valueFont.getFont(null);
+ c = valueFont.getFont();//null
fontSize = valueFont.getFontSize();
} else {
- c = font.getFont(null);
+ c = font.getFont();//null
fontSize = font.getFontSize();
}
@@ -611,7 +614,7 @@ public class PDFBoxTable {
PDFBoxTable pdfBoxTable = null;
if (cell.getValue() instanceof Table) {
pdfBoxTable = new PDFBoxTable((Table) cell.getValue(), this,
- this.settings, originalDoc);
+ this.settings, pdfBoxObject);
cell.setValue(pdfBoxTable);
} else if (cell.getValue() instanceof PDFBoxTable) {
pdfBoxTable = (PDFBoxTable) cell.getValue();
diff --git a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PdfBoxStamper.java b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PdfBoxStamper.java
index 3dd1f0a4..6d1fccff 100644
--- a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PdfBoxStamper.java
+++ b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PdfBoxStamper.java
@@ -48,7 +48,7 @@ public class PdfBoxStamper implements IPDFStamper {
public IPDFVisualObject createVisualPDFObject(PDFObject pdf, Table table) throws IOException {
try {
PDFBOXObject pdfboxObject = (PDFBOXObject)pdf;
- return new PdfBoxVisualObject(table, pdf.getStatus().getSettings(), pdfboxObject.getDocument());
+ return new PdfBoxVisualObject(table, pdf.getStatus().getSettings(), pdfboxObject);
} catch (PdfAsException e) {
throw new PdfAsWrappedIOException(e);
}
diff --git a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PdfBoxVisualObject.java b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PdfBoxVisualObject.java
index 9fd8ed84..feacf3d1 100644
--- a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PdfBoxVisualObject.java
+++ b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PdfBoxVisualObject.java
@@ -25,12 +25,12 @@ package at.gv.egiz.pdfas.lib.impl.stamping.pdfbox;
import java.io.IOException;
-import org.apache.pdfbox.pdmodel.PDDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import at.gv.egiz.pdfas.common.exceptions.PdfAsException;
import at.gv.egiz.pdfas.common.settings.ISettings;
+import at.gv.egiz.pdfas.lib.impl.pdfbox.PDFBOXObject;
import at.gv.egiz.pdfas.lib.impl.stamping.IPDFVisualObject;
import at.knowcenter.wag.egov.egiz.table.Table;
@@ -46,13 +46,13 @@ public class PdfBoxVisualObject implements IPDFVisualObject {
private float y;
private int page;
private ISettings settings;
- private PDDocument originalDoc;
+ private PDFBOXObject pdfBoxObject;
- public PdfBoxVisualObject(Table table, ISettings settings, PDDocument originalDoc)
+ public PdfBoxVisualObject(Table table, ISettings settings, PDFBOXObject pdfBoxObject)
throws IOException, PdfAsException {
this.abstractTable = table;
- this.originalDoc = originalDoc;
- this.table = new PDFBoxTable(table, null, settings, originalDoc);
+ this.pdfBoxObject = pdfBoxObject;
+ this.table = new PDFBoxTable(table, null, settings, pdfBoxObject);
this.settings = settings;
}
@@ -62,7 +62,7 @@ public class PdfBoxVisualObject implements IPDFVisualObject {
public void fixWidth() {
try {
- table = new PDFBoxTable(abstractTable, null, this.width, settings, this.originalDoc);
+ table = new PDFBoxTable(abstractTable, null, this.width, settings, this.pdfBoxObject);
} catch (IOException e) {
logger.warn("Failed to fix width of Table!", e);
} catch (PdfAsException e) {
diff --git a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/TableDrawUtils.java b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/TableDrawUtils.java
index 9b0f5ae1..7388090c 100644
--- a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/TableDrawUtils.java
+++ b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/TableDrawUtils.java
@@ -24,7 +24,6 @@
package at.gv.egiz.pdfas.lib.impl.stamping.pdfbox;
import java.awt.Color;
-import java.beans.DesignMode;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
@@ -41,7 +40,6 @@ import org.slf4j.LoggerFactory;
import at.gv.egiz.pdfas.common.exceptions.PdfAsException;
import at.gv.egiz.pdfas.common.settings.ISettings;
-import at.gv.egiz.pdfas.lib.impl.signing.pdfbox.PADESPDFBOXSigner;
import at.knowcenter.wag.egov.egiz.table.Entry;
import at.knowcenter.wag.egov.egiz.table.Style;
@@ -278,7 +276,7 @@ public class TableDrawUtils {
float fontSize = PDFBoxFont.defaultFontSize;
PDFont textFont = PDFBoxFont.defaultFont;
- textFont = abstractTable.getFont().getFont(doc);
+ textFont = abstractTable.getFont().getFont();//doc);
fontSize = abstractTable.getFont().getFontSize();
// get the cell Text
@@ -312,7 +310,7 @@ public class TableDrawUtils {
float fontSize = PDFBoxFont.defaultFontSize;
PDFont textFont = PDFBoxFont.defaultFont;
- textFont = abstractTable.getValueFont().getFont(doc);
+ textFont = abstractTable.getValueFont().getFont();//doc);
fontSize = abstractTable.getValueFont().getFontSize();
// get the cell Text
diff --git a/pdf-as-pdfbox/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java b/pdf-as-pdfbox/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java
index a7aaf2df..48e6d3d2 100644
--- a/pdf-as-pdfbox/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java
+++ b/pdf-as-pdfbox/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java
@@ -93,7 +93,8 @@ import at.knowcenter.wag.egov.egiz.pdf.operator.path.painting.StrokePath;
/**
* 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 at.knowcenter.wag.egov.egiz.pdf.PDFPage#showCharacter(TextPosition)}<br>
+ * interested method:
+ * {@link at.knowcenter.wag.egov.egiz.pdf.PDFPage#showCharacter(TextPosition)}<br>
* This method is called when processing the FileStream. By calling the method
* {@link org.apache.pdfbox.util.PDFStreamEngine#processStream(org.apache.pdfbox.pdmodel.PDPage, org.apache.pdfbox.pdmodel.PDResources, org.pdfbox.cos.COSStream)}
* the implemented method showCharacter is called.
@@ -105,7 +106,7 @@ public class PDFPage extends PDFTextStripper {
/**
* The logger definition.
*/
- private static final Logger logger = LoggerFactory.getLogger(PDFPage.class);
+ private static final Logger logger = LoggerFactory.getLogger(PDFPage.class);
/**
* The maximum (lowest) y position of a character.
@@ -141,15 +142,16 @@ public class PDFPage extends PDFTextStripper {
*
* @throws java.io.IOException
*/
- public PDFPage(float effectivePageHeight, boolean legacy32) throws IOException {
+ public PDFPage(float effectivePageHeight, boolean legacy32)
+ throws IOException {
super();
this.effectivePageHeight = effectivePageHeight;
OperatorProcessor newInvoke = new MyInvoke(this);
newInvoke.setContext(this);
- this.registerOperatorProcessor("Do", newInvoke);
-
+ this.registerOperatorProcessor("Do", newInvoke);
+
if (!legacy32) {
registerCustomPathOperators();
}
@@ -165,26 +167,32 @@ public class PDFPage extends PDFTextStripper {
// *** path construction
- this.registerOperatorProcessor("m", new MoveTo(this));
- this.registerOperatorProcessor("l", new LineTo(this));
- this.registerOperatorProcessor("c", new CurveTo(this));
- this.registerOperatorProcessor("y", new CurveToReplicateFinalPoint(this));
- this.registerOperatorProcessor("v", new CurveToReplicateInitialPoint(this));
- this.registerOperatorProcessor("h", new ClosePath(this));
+ this.registerOperatorProcessor("m", new MoveTo(this));
+ this.registerOperatorProcessor("l", new LineTo(this));
+ this.registerOperatorProcessor("c", new CurveTo(this));
+ this.registerOperatorProcessor("y",
+ new CurveToReplicateFinalPoint(this));
+ this.registerOperatorProcessor("v", new CurveToReplicateInitialPoint(
+ this));
+ this.registerOperatorProcessor("h", new ClosePath(this));
// *** path painting
// "S": stroke path
- this.registerOperatorProcessor("S", new StrokePath(this));
- this.registerOperatorProcessor("s", new CloseAndStrokePath(this));
- this.registerOperatorProcessor("f", new FillPathNonZeroWindingNumberRule(this));
- this.registerOperatorProcessor("F", new FillPathNonZeroWindingNumberRule(this));
- this.registerOperatorProcessor("f*", new FillPathEvenOddRule(this));
- this.registerOperatorProcessor("b", new CloseFillNonZeroAndStrokePath(this));
- this.registerOperatorProcessor("B", new FillNonZeroAndStrokePath(this));
- this.registerOperatorProcessor("b*", new CloseFillEvenOddAndStrokePath(this));
- this.registerOperatorProcessor("B*", new FillEvenOddAndStrokePath(this));
- this.registerOperatorProcessor("n", new EndPath(this));
+ this.registerOperatorProcessor("S", new StrokePath(this));
+ this.registerOperatorProcessor("s", new CloseAndStrokePath(this));
+ this.registerOperatorProcessor("f",
+ new FillPathNonZeroWindingNumberRule(this));
+ this.registerOperatorProcessor("F",
+ new FillPathNonZeroWindingNumberRule(this));
+ this.registerOperatorProcessor("f*", new FillPathEvenOddRule(this));
+ this.registerOperatorProcessor("b", new CloseFillNonZeroAndStrokePath(
+ this));
+ this.registerOperatorProcessor("B", new FillNonZeroAndStrokePath(this));
+ this.registerOperatorProcessor("b*", new CloseFillEvenOddAndStrokePath(
+ this));
+ this.registerOperatorProcessor("B*", new FillEvenOddAndStrokePath(this));
+ this.registerOperatorProcessor("n", new EndPath(this));
// Note: The graphic context
// (org.pdfbox.pdmodel.graphics.PDGraphicsState) of the underlying
@@ -235,11 +243,11 @@ public class PDFPage extends PDFTextStripper {
float lowerBoundYPositionFromTop;
PDRectangle boundaryBox = this.getCurrentPage().findCropBox();
-
- if(boundaryBox == null) {
+
+ if (boundaryBox == null) {
boundaryBox = this.getCurrentPage().findMediaBox();
}
-
+
float pageHeight;
switch (this.getCurrentPage().findRotation()) {
@@ -298,7 +306,7 @@ public class PDFPage extends PDFTextStripper {
protected void processTextPosition(TextPosition text) {
showCharacter(text);
}
-
+
// exthex
/**
* A method provided as an event interface to allow a subclass to perform
@@ -314,6 +322,11 @@ public class PDFPage extends PDFTextStripper {
float current_y = text.getY();
final String character = text.getCharacter();
+ if (at.gv.egiz.pdfas.common.utils.StringUtils.whiteSpaceTrim(character)
+ .isEmpty()) {
+ return;
+ }
+
int pageRotation = this.getCurrentPage().findRotation();
// logger_.debug("PageRotation = " + pageRotation);
if (pageRotation == 0) {
@@ -328,15 +341,14 @@ public class PDFPage extends PDFTextStripper {
if (pageRotation == 270) {
current_y = text.getY();
}
-
- if (current_y > this.effectivePageHeight) {
- this.max_character_ypos=this.effectivePageHeight;
+
+ if (current_y > this.effectivePageHeight) {
+ this.max_character_ypos = this.effectivePageHeight;
return;
}
-
+
// store ypos of the char if it is not empty
- if (!at.gv.egiz.pdfas.common.utils.StringUtils.whiteSpaceTrim(character).isEmpty() &&
- current_y > this.max_character_ypos) {
+ if (current_y > this.max_character_ypos) {
this.max_character_ypos = current_y;
}
@@ -359,35 +371,39 @@ public class PDFPage extends PDFTextStripper {
+ ", path=" + maxPathRelatedYPositionFromTop);
}
return NumberUtils.max(max_character_ypos, max_image_ypos,
- maxPathRelatedYPositionFromTop);
+ maxPathRelatedYPositionFromTop);
}
@Override
public Map<String, PDFont> getFonts() {
-
+
COSBase fontObj = null;
-
- if(getCurrentPage().getResources() != null &&
- getCurrentPage().getResources().getCOSDictionary() != null &&
- getCurrentPage().getResources().getCOSDictionary().getDictionaryObject(COSName.FONT) != null) {
- fontObj = getCurrentPage().getResources().getCOSDictionary().getDictionaryObject(COSName.FONT);
+
+ if (getCurrentPage().getResources() != null
+ && getCurrentPage().getResources().getCOSDictionary() != null
+ && getCurrentPage().getResources().getCOSDictionary()
+ .getDictionaryObject(COSName.FONT) != null) {
+ fontObj = getCurrentPage().getResources().getCOSDictionary()
+ .getDictionaryObject(COSName.FONT);
}
- Map<String, PDFont> fontMap = getCurrentPage().findResources().getFonts();
-
- if(fontObj != null) {
- getCurrentPage().getResources().getCOSDictionary().setItem(COSName.FONT, fontObj);
+ Map<String, PDFont> fontMap = getCurrentPage().findResources()
+ .getFonts();
+
+ if (fontObj != null) {
+ getCurrentPage().getResources().getCOSDictionary()
+ .setItem(COSName.FONT, fontObj);
}
-
+
return fontMap;
}
-
+
public class MyInvoke extends OperatorProcessor {
- private PDFPage mypage;
+ private PDFPage mypage;
- public MyInvoke(PDFPage page) {
- this.mypage = page;
- }
+ public MyInvoke(PDFPage page) {
+ this.mypage = page;
+ }
public void process(PDFOperator operator, List<COSBase> arguments)
throws IOException {
@@ -408,7 +424,7 @@ public class PDFPage extends PDFTextStripper {
Matrix ctm = context.getGraphicsState()
.getCurrentTransformationMatrix();
- logger.debug("ctm = " + ctm);
+ 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) };
@@ -430,9 +446,10 @@ public class PDFPage extends PDFTextStripper {
logger.debug("PageRotation = " + pageRotation);
if (pageRotation == 0) {
float min_y = findMinY(transformed_coordinates);
- logger.debug("min_y = " + min_y);
- float page_height = this.mypage.getCurrentPage().findMediaBox().getHeight();
- logger.debug("page_height = " + page_height);
+ logger.debug("min_y = " + min_y);
+ float page_height = this.mypage.getCurrentPage()
+ .findMediaBox().getHeight();
+ logger.debug("page_height = " + page_height);
actual_lowest_point = page_height - min_y;
actual_starting_point = page_height
@@ -440,36 +457,38 @@ public class PDFPage extends PDFTextStripper {
}
if (pageRotation == 90) {
float max_x = findMaxX(transformed_coordinates);
- logger.debug("max_x = " + max_x);
- float page_width = this.mypage.getCurrentPage().findMediaBox().getWidth();
- logger.debug("page_width = " + page_width);
+ logger.debug("max_x = " + max_x);
+ float page_width = this.mypage.getCurrentPage()
+ .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);
+ logger.debug("min_y = " + min_y);
actual_lowest_point = findMaxY(transformed_coordinates);
actual_starting_point = actual_lowest_point + min_y;
}
if (pageRotation == 270) {
float min_x = findMinX(transformed_coordinates);
- logger.debug("min_x = " + min_x);
+ logger.debug("min_x = " + min_x);
- float page_width = this.mypage.getCurrentPage().findMediaBox().getWidth();
- logger.debug("page_width = " + page_width);
+ float page_width = this.mypage.getCurrentPage()
+ .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);
+ logger.debug("actual_lowest_point = " + actual_lowest_point);
if (actual_lowest_point > PDFPage.this.effectivePageHeight
&& actual_starting_point > PDFPage.this.effectivePageHeight) {
- logger.debug("image is below footer_line");
+ logger.debug("image is below footer_line");
return;
}
@@ -511,7 +530,7 @@ public class PDFPage extends PDFTextStripper {
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);
+ logger.debug(" transformed " + pos + " --> " + transformed);
return transformed;
}
@@ -558,16 +577,16 @@ public class PDFPage extends PDFTextStripper {
public void processAnnotation(PDAnnotation anno) {
float current_y = anno.getRectangle().getLowerLeftY();
PDPage page = anno.getPage();
-
- if(page == null) {
+
+ if (page == null) {
page = getCurrentPage();
}
-
- if(page == null) {
+
+ if (page == null) {
logger.warn("Annotation without page! The position might not be correct!");
return;
}
-
+
int pageRotation = page.findRotation();
// logger_.debug("PageRotation = " + pageRotation);
if (pageRotation == 0) {
@@ -582,7 +601,7 @@ public class PDFPage extends PDFTextStripper {
}
if (pageRotation == 270) {
float page_width = page.findMediaBox().getWidth();
- current_y = page_width - anno.getRectangle().getLowerLeftX() ;
+ current_y = page_width - anno.getRectangle().getLowerLeftX();
}
if (current_y > this.effectivePageHeight) {
@@ -594,5 +613,5 @@ public class PDFPage extends PDFTextStripper {
this.max_character_ypos = current_y;
}
}
-
+
}