Author: ssteiner
Date: Tue May 19 13:11:09 2015
New Revision: 1680278
URL: http://svn.apache.org/r1680278
Log:
FOP-2436: Merging of Tagged (Accessible) PDF fixes
Added:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/resources/brokenLink.pdf
(with props)
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/resources/classMap.pdf
(with props)
Modified:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/lib/fop.jar
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/DocumentRootModifier.java
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinder.java
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/TaggedPDFConductor.java
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/DocumentRootModifierTestCase.java
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
Modified: xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/lib/fop.jar
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/lib/fop.jar?rev=1680278&r1=1680277&r2=1680278&view=diff
==============================================================================
Binary files - no diff available.
Modified:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/DocumentRootModifier.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/DocumentRootModifier.java?rev=1680278&r1=1680277&r2=1680278&view=diff
==============================================================================
---
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/DocumentRootModifier.java
(original)
+++
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/DocumentRootModifier.java
Tue May 19 13:11:09 2015
@@ -37,7 +37,7 @@ public class DocumentRootModifier {
public void structTreeRootEntriesToCopy(COSDictionary structRootDict)
throws IOException {
checkForMap(structRootDict, COSName.ROLE_MAP.getName());
- checkForMap(structRootDict, "CLASS_MAP");
+ checkForMap(structRootDict, "ClassMap");
}
private void checkForMap(COSDictionary structRootDict, String mapName)
throws IOException {
Modified:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinder.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinder.java?rev=1680278&r1=1680277&r2=1680278&view=diff
==============================================================================
---
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinder.java
(original)
+++
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinder.java
Tue May 19 13:11:09 2015
@@ -47,8 +47,7 @@ public class PageParentTreeFinder {
}
if (position != -1) {
PDNumberTreeNode srcNumberTreeNode =
srcDoc.getDocumentCatalog().getStructureTreeRoot().getParentTree();
- COSArray parentTreeKids =
traverseParentTree(srcNumberTreeNode.getCOSDictionary(), position);
- return removeNonCOSObjects(parentTreeKids);
+ return traverseParentTree(srcNumberTreeNode.getCOSDictionary(),
position);
}
return new COSArray();
}
@@ -105,7 +104,6 @@ public class PageParentTreeFinder {
COSArray nums = (COSArray)
kidCOSObj.getDictionaryObject(COSName.NUMS);
pageParentTree = (COSArray) nums.getObject(((position
- lowerLimit) * 2) + 1);
numList.add(pageParentTree);
- return;
}
} else {
COSArray nums = (COSArray)
kidCOSObj.getDictionaryObject(COSName.NUMS);
@@ -136,14 +134,4 @@ public class PageParentTreeFinder {
}
return new COSArray();
}
- private COSArray removeNonCOSObjects(COSArray pageParentTreeArray) {
- COSArray objectList = new COSArray();
- for (COSBase entry : pageParentTreeArray) {
- if (entry instanceof COSObject) {
- COSObject entryObj = (COSObject)entry;
- objectList.add(entryObj);
- }
- }
- return objectList;
- }
}
Modified:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java?rev=1680278&r1=1680277&r2=1680278&view=diff
==============================================================================
---
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java
(original)
+++
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java
Tue May 19 13:11:09 2015
@@ -31,9 +31,11 @@ import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSInteger;
import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSNull;
import org.apache.pdfbox.cos.COSObject;
-
import org.apache.pdfbox.pdmodel.PDPage;
+import
org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf.StandardStructureTypes;
+
import org.apache.fop.pdf.PDFDictionary;
import org.apache.fop.pdf.PDFDocument;
@@ -42,6 +44,8 @@ import org.apache.fop.pdf.PDFObject;
import org.apache.fop.pdf.PDFPage;
import org.apache.fop.pdf.PDFReference;
import org.apache.fop.pdf.PDFStructElem;
+
+
import org.apache.fop.render.pdf.PDFLogicalStructureHandler;
public class StructureTreeMerger {
@@ -58,6 +62,7 @@ public class StructureTreeMerger {
private int currentMCID;
private List<COSObject> topElems = new ArrayList<COSObject>();
private COSArray extra = new COSArray();
+ private COSArray originalParentTree = new COSArray();
public StructureTreeMerger(PDFStructElem currentSessionElem,
PDFLogicalStructureHandler logicalStructHandler,
PDFBoxAdapter adapter, PDPage srcPage) {
@@ -75,6 +80,8 @@ public class StructureTreeMerger {
}
public void copyStructure(COSArray pageParentTreeArray) throws IOException
{
+ originalParentTree = pageParentTreeArray;
+ pageParentTreeArray = removeNonCOSObjects(pageParentTreeArray);
for (COSBase entry : pageParentTreeArray) {
COSObject entryObj = (COSObject)entry;
createPageStructElements(entryObj);
@@ -146,7 +153,7 @@ public class StructureTreeMerger {
for (COSName name : names) {
if (baseDic.keySet().contains(name)) {
if (name.equals(COSName.PG)) {
- elem.put("Pg", targetPage.makeReference());
+ elem.put(COSName.PG.getName(), targetPage.makeReference());
} else {
elem.put(name.getName(),
adapter.cloneForNewDocument(baseDic.getItem(name)));
}
@@ -176,20 +183,19 @@ public class StructureTreeMerger {
elem.setParent(currentSessionElem);
currentSessionElem.addKid(elem);
topElems.add(cosElem);
- return;
} else if (elemParent != null) {
- checkIlfStructureTypeIsPresent(parentElemDictionary, "TR");
- if (!checkIlfStructureTypeIsPresent(parentElemDictionary, "TR")) {
+ if (!checkIfStructureTypeIsPresent(parentElemDictionary,
StandardStructureTypes.TR)) {
elem.setParent(elemParent);
int position =
StructureTreeMergerUtil.findObjectPositionInKidsArray(cosElem);
elemParent.addKidInSpecificOrder(position, elem);
}
- } else if (!checkIlfStructureTypeIsPresent(parentElemDictionary,
"Document")) {
+ } else if (!checkIfStructureTypeIsPresent(parentElemDictionary,
StandardStructureTypes.DOCUMENT)) {
elemParent = createAndRegisterStructElem(cosParentElem);
copyElemEntries(cosParentElem, elemParent);
elem.setParent(elemParent);
fillKidsWithNull(elemParent,
(COSDictionary)cosParentElem.getObject());
- if
(((COSName)parentElemDictionary.getDictionaryObject(COSName.S)).getName().equals("TR"))
{
+ if
(((COSName)parentElemDictionary.getDictionaryObject(COSName.S)).getName()
+ .equals(StandardStructureTypes.TR)) {
COSBase rowKids = parentElemDictionary.getItem(COSName.K);
createKids(rowKids, parentElemDictionary, elemParent, true);
} else {
@@ -293,14 +299,19 @@ public class StructureTreeMerger {
private void createKidFromCOSDictionary(COSDictionary mcrDict,
PDFStructElem parent, COSDictionary baseDict)
throws IOException {
Collection<COSName> exclude = Arrays.asList(COSName.PG);
+ PDFReference referenceObj;
if (isElementFromSourcePage(mcrDict, baseDict)) {
PDFDictionary contentItem =
(PDFDictionary)adapter.cloneForNewDocument(mcrDict, mcrDict, exclude);
if (mcrDict.keySet().contains(COSName.TYPE)) {
String type = ((COSName)
mcrDict.getDictionaryObject(COSName.TYPE)).getName();
if (type.equals("OBJR")) {
COSObject obj = (COSObject) mcrDict.getItem(COSName.OBJ);
- PDFReference referenceObj = ((PDFObject)
adapter.getCachedClone(obj)).makeReference();
- contentItem.put("Obj", referenceObj);
+ if (adapter.getCachedClone(obj) == null) {
+ referenceObj = null;
+ } else {
+ referenceObj = ((PDFObject)
adapter.getCachedClone(obj)).makeReference();
+ }
+ contentItem.put(COSName.OBJ.getName(), referenceObj);
updateStructParentAndAddToPageParentTree(referenceObj,
parent);
} else if (type.equals("MCR")) {
updateMCIDEntry(contentItem);
@@ -309,9 +320,9 @@ public class StructureTreeMerger {
}
}
if (mcrDict.keySet().contains(COSName.PG)) {
- contentItem.put("Pg", targetPage.makeReference());
+ contentItem.put(COSName.PG.getName(),
targetPage.makeReference());
} else {
- parent.put("Pg", targetPage.makeReference());
+ parent.put(COSName.PG.getName(), targetPage.makeReference());
}
parent.addKid(contentItem);
} else {
@@ -327,10 +338,10 @@ public class StructureTreeMerger {
private void updateMCIDEntry(PDFDictionary mcrDictionary) {
if (currentMCID > 0) {
- int oldMCID =
(((PDFNumber)mcrDictionary.get("MCID")).getNumber()).intValue();
+ int oldMCID =
(((PDFNumber)mcrDictionary.get(COSName.MCID.getName())).getNumber()).intValue();
PDFNumber number = new PDFNumber();
number.setNumber(oldMCID + currentMCID);
- mcrDictionary.put("MCID", number);
+ mcrDictionary.put(COSName.MCID.getName(), number);
}
}
@@ -352,26 +363,39 @@ public class StructureTreeMerger {
return false;
}
+
public void addToPageParentTreeArray() {
- for (PDFStructElem entry : markedContentMap.values()) {
+ List<PDFStructElem> complete = restoreNullValuesInParentTree();
+ for (PDFStructElem entry : complete) {
logicalStructHandler.getPageParentTree().add(entry);
}
}
- private void updateStructParentAndAddToPageParentTree(PDFReference obj,
PDFStructElem elem) {
- PDFObject referenceObj = obj.getObject();
- assert referenceObj instanceof PDFDictionary;
- int nextParentTreeKey;
- PDFDictionary objDict = (PDFDictionary)referenceObj;
- nextParentTreeKey = logicalStructHandler.getNextParentTreeKey();
- objDict.put("StructParent", nextParentTreeKey);
- logicalStructHandler.getParentTree().addToNums(nextParentTreeKey,
elem);
+ private List<PDFStructElem> restoreNullValuesInParentTree() {
+ int total = markedContentMap.size();
+ List<PDFStructElem> list = new
ArrayList<PDFStructElem>(markedContentMap.values());
+ List<PDFStructElem> complete = new ArrayList<PDFStructElem>(total);
+ for (COSBase base : originalParentTree) {
+ if (base instanceof COSNull || base == null) {
+ complete.add(null);
+ } else {
+ complete.add(list.get(0));
+ list.remove(0);
+ }
+ }
+ return complete;
}
- public void setCurrentSessionElemKid() {
- PDFNumber num = new PDFNumber();
- createKidEntryFromInt(num, currentSessionElem);
- addToPageParentTreeArray();
+ private void updateStructParentAndAddToPageParentTree(PDFReference obj,
PDFStructElem elem) {
+ int nextParentTreeKey = logicalStructHandler.getNextParentTreeKey();
+ if (obj != null) {
+ PDFObject referenceObj = obj.getObject();
+ assert referenceObj instanceof PDFDictionary;
+ PDFDictionary objDict = (PDFDictionary)referenceObj;
+ objDict.put((COSName.STRUCT_PARENT).getName(), nextParentTreeKey);
+ }
+
+ logicalStructHandler.getParentTree().addToNums(nextParentTreeKey,
elem);
}
private void findLeafNodesInPageFromStructElemObjects(COSBase entry)
throws IOException {
@@ -437,7 +461,7 @@ public class StructureTreeMerger {
}
}
- private boolean checkIlfStructureTypeIsPresent(COSDictionary
elemDictionary, String type) {
+ private boolean checkIfStructureTypeIsPresent(COSDictionary
elemDictionary, String type) {
String potentialCustomElemType =
((COSName)elemDictionary.getDictionaryObject(COSName.S)).getName();
if (type.equals(potentialCustomElemType)) {
return true;
@@ -447,4 +471,19 @@ public class StructureTreeMerger {
}
}
+ private COSArray removeNonCOSObjects(COSArray pageParentTreeArray) {
+ COSArray objectList = new COSArray();
+ for (COSBase entry : pageParentTreeArray) {
+ if (entry instanceof COSObject) {
+ COSObject entryObj = (COSObject)entry;
+ objectList.add(entryObj);
+ }
+ }
+ return objectList;
+ }
+ public void setCurrentSessionElemKid() {
+ PDFNumber num = new PDFNumber();
+ createKidEntryFromInt(num, currentSessionElem);
+ addToPageParentTreeArray();
+ }
}
Modified:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/TaggedPDFConductor.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/TaggedPDFConductor.java?rev=1680278&r1=1680277&r2=1680278&view=diff
==============================================================================
---
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/TaggedPDFConductor.java
(original)
+++
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/src/java/org/apache/fop/render/pdf/pdfbox/TaggedPDFConductor.java
Tue May 19 13:11:09 2015
@@ -36,7 +36,6 @@ import org.apache.fop.render.pdf.PDFLogi
public class TaggedPDFConductor {
private PDPage srcPage;
- private PDFDocument pdfDoc;
private PDFPage targetPage;
private DocumentRootModifier rootMod;
private StructureTreeMerger merger;
@@ -46,7 +45,7 @@ public class TaggedPDFConductor {
PDFBoxAdapter adapter) {
this.srcPage = srcPage;
this.targetPage = adapter.getTargetPage();
- this.pdfDoc = targetPage.getDocument();
+ PDFDocument pdfDoc = targetPage.getDocument();
this.rootMod = new DocumentRootModifier(adapter, pdfDoc);
merger = new StructureTreeMerger(currentSessionElem,
logicalStructHandler, adapter, srcPage);
}
@@ -78,6 +77,7 @@ public class TaggedPDFConductor {
merger.currentSessionElem.put(COSName.PG.getName(),
targetPage.makeReference());
} else {
merger.currentSessionElem.put("S", new PDFName("Div"));
+ merger.currentSessionElem.remove("Alt");
}
}
private boolean isInputPDFTagged(PDDocument srcDoc) {
Modified:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/DocumentRootModifierTestCase.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/DocumentRootModifierTestCase.java?rev=1680278&r1=1680277&r2=1680278&view=diff
==============================================================================
---
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/DocumentRootModifierTestCase.java
(original)
+++
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/DocumentRootModifierTestCase.java
Tue May 19 13:11:09 2015
@@ -24,6 +24,7 @@ import org.junit.Test;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.fop.pdf.PDFArray;
import org.apache.fop.pdf.PDFDictionary;
@@ -32,42 +33,66 @@ import org.apache.fop.pdf.PDFName;
import org.apache.fop.pdf.PDFPage;
import org.apache.fop.pdf.PDFResources;
import org.apache.fop.pdf.PDFStructTreeRoot;
+
import org.apache.fop.render.pdf.pdfbox.DocumentRootModifier;
import org.apache.fop.render.pdf.pdfbox.PDFBoxAdapter;
import junit.framework.Assert;
public class DocumentRootModifierTestCase {
+ private static final String CLASSMAP = "test/resources/classMap.pdf";
@Test
public void testStructTreeRootEntriesToCopy() throws IOException {
Rectangle2D r = new Rectangle2D.Double();
- PDFPage page = new PDFPage(new PDFResources(0), 0, r, r, r, r);
- page.setObjectNumber(1);
PDFDocument pdfDoc = new PDFDocument("");
+ PDFPage page = new PDFPage(new PDFResources(pdfDoc), 0, r, r, r, r);
+ page.setObjectNumber(1);
page.setDocument(pdfDoc);
pdfDoc.makeStructTreeRoot(null);
PDFStructTreeRoot structTreeRoot =
pdfDoc.getRoot().getStructTreeRoot();
PDFDictionary rootBaseRoleMap = new PDFDictionary();
- PDFName para = new PDFName("P");
- rootBaseRoleMap.put("MyPara", para);
- structTreeRoot.put("RoleMap", rootBaseRoleMap);
PDFBoxAdapter adapter = new PDFBoxAdapter(page, new HashMap(), new
HashMap<Integer, PDFArray>());
+ DocumentRootModifier modifier = new DocumentRootModifier(adapter,
pdfDoc);
COSDictionary root = new COSDictionary();
COSDictionary mapRole = new COSDictionary();
mapRole.setName("Icon", "Figure");
root.setItem(COSName.ROLE_MAP, mapRole);
- DocumentRootModifier modifier = new DocumentRootModifier(adapter,
pdfDoc);
modifier.structTreeRootEntriesToCopy(root);
structTreeRoot = pdfDoc.getRoot().getStructTreeRoot();
PDFDictionary baseRoot = (PDFDictionary) structTreeRoot.get("RoleMap");
- PDFName nameIcon = (PDFName) baseRoot.get("Icon");
- PDFName myPara = (PDFName)baseRoot.get("MyPara");
- String test = nameIcon.getName();
- String expected = "Figure";
+ String test = baseRoot.get("Icon").toString();
+ String expected = "/Figure";
+ Assert.assertEquals(test, expected);
+
+ PDFName para = new PDFName("P");
+ rootBaseRoleMap.put("MyPara", para);
+ structTreeRoot.put("RoleMap", rootBaseRoleMap);
+ modifier.structTreeRootEntriesToCopy(root);
+ structTreeRoot = pdfDoc.getRoot().getStructTreeRoot();
+ PDFDictionary baseRoot2 = (PDFDictionary)
structTreeRoot.get("RoleMap");
+ PDFName nameIcon = (PDFName) baseRoot2.get("Icon");
+ PDFName myPara = (PDFName)baseRoot2.get("MyPara");
+ test = nameIcon.getName();
+ expected = "Figure";
Assert.assertEquals(test, expected);
test = myPara.getName();
expected = "P";
Assert.assertEquals(test, expected);
+
+
+ PDDocument doc = PDDocument.load(CLASSMAP);
+ COSDictionary temp =
(COSDictionary)doc.getDocumentCatalog().getStructureTreeRoot().getCOSObject();
+ PDFDictionary classMap = new PDFDictionary();
+ PDFDictionary inner = new PDFDictionary();
+ inner.put("StartIndent", 0);
+ classMap.put("Normal2", inner);
+ structTreeRoot.put("ClassMap", classMap);
+ modifier.structTreeRootEntriesToCopy(temp);
+ structTreeRoot = pdfDoc.getRoot().getStructTreeRoot();
+ PDFDictionary testDict = (PDFDictionary)structTreeRoot.get("ClassMap");
+ Assert.assertNotNull(testDict.get("Normal2"));
}
+
}
+
Modified:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java?rev=1680278&r1=1680277&r2=1680278&view=diff
==============================================================================
---
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
(original)
+++
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
Tue May 19 13:11:09 2015
@@ -76,7 +76,6 @@ import junit.framework.Assert;
public class PDFBoxAdapterTestCase {
private Rectangle2D r = new Rectangle2D.Double();
- private PDFPage pdfpage = new PDFPage(new PDFResources(0), 0, r, r, r, r);
private static final String CFF1 = "test/resources/2fonts.pdf";
private static final String CFF2 = "test/resources/2fonts2.pdf";
private static final String CFF3 = "test/resources/simpleh.pdf";
@@ -98,6 +97,7 @@ public class PDFBoxAdapterTestCase {
private PDFBoxAdapter getPDFBoxAdapter() {
PDFDocument doc = new PDFDocument("");
+ PDFPage pdfpage = new PDFPage(new PDFResources(doc), 0, r, r, r, r);
doc.setMergeFontsEnabled(true);
pdfpage.setDocument(doc);
pdfpage.setObjectNumber(1);
@@ -286,7 +286,9 @@ public class PDFBoxAdapterTestCase {
@Test
public void testStream() throws Exception {
- pdfpage.setDocument(new PDFDocument(""));
+ PDFDocument pdfdoc = new PDFDocument("");
+ PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
+ pdfpage.setDocument(pdfdoc);
PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new
HashMap<Integer, PDFArray>());
PDDocument doc = PDDocument.load(ROTATE);
PDPage page = (PDPage) doc.getDocumentCatalog().getAllPages().get(0);
@@ -302,9 +304,10 @@ public class PDFBoxAdapterTestCase {
@Test
public void testLink() throws Exception {
- pdfpage.setObjectNumber(1);
PDFDocument pdfdoc = new PDFDocument("");
+ PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
pdfpage.setDocument(pdfdoc);
+ pdfpage.setObjectNumber(1);
Map<Integer, PDFArray> pageNumbers = new HashMap<Integer, PDFArray>();
PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(),
pageNumbers);
PDDocument doc = PDDocument.load(LINK);
@@ -315,7 +318,7 @@ public class PDFBoxAdapterTestCase {
Assert.assertTrue(stream.contains("/Link <</MCID 5 >>BDC"));
Assert.assertTrue(pageNumbers.size() == 4);
PDFAnnotList annots = (PDFAnnotList) pdfpage.get("Annots");
- Assert.assertEquals(annots.toPDFString(), "[\n9 0 R\n12 0 R\n]");
+ Assert.assertEquals(annots.toPDFString(), "[\n1 0 R\n2 0 R\n]");
doc.close();
}
@@ -333,6 +336,7 @@ public class PDFBoxAdapterTestCase {
PDDocument doc = PDDocument.load(SHADING);
ImagePDF img = new ImagePDF(imgi, doc);
PDFDocument pdfdoc = new PDFDocument("");
+ PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
pdfpage.setDocument(pdfdoc);
PDFGState g = new PDFGState();
pdfdoc.assignObjectNumber(g);
@@ -346,6 +350,6 @@ public class PDFBoxAdapterTestCase {
PDFResources res = c.getPage().getPDFResources();
OutputStream bos = new ByteArrayOutputStream();
res.output(bos);
- Assert.assertTrue(bos.toString().contains("/ExtGState << /GS5"));
+ Assert.assertTrue(bos.toString().contains("/ExtGState << /GS1"));
}
}
Modified:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java?rev=1680278&r1=1680277&r2=1680278&view=diff
==============================================================================
---
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
(original)
+++
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
Tue May 19 13:11:09 2015
@@ -19,13 +19,20 @@ package org.apache.fop.render.pdf;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+
+
import org.junit.Test;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSInteger;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSObject;
+
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
@@ -49,6 +56,7 @@ import junit.framework.Assert;
public class StructureTreeMergerTestCase {
private static final String LINK = "test/resources/linkTagged.pdf";
private static final String NoParentTree =
"test/resources/NoParentTree.pdf";
+ private static final String BrokenLink = "test/resources/brokenLink.pdf";
private PDFPage pdfPage;
private PDFDocument pdfDoc;
private PDFBoxAdapter adapter;
@@ -121,7 +129,7 @@ public class StructureTreeMergerTestCase
private void setUp() {
Rectangle2D r = new Rectangle2D.Double();
- pdfPage = new PDFPage(new PDFResources(0), 0, r, r, r, r);
+ pdfPage = new PDFPage(new PDFResources(pdfDoc), 0, r, r, r, r);
pdfDoc = new PDFDocument(" ");
pdfDoc.makeStructTreeRoot(null);
pdfPage.setObjectNumber(1);
@@ -146,4 +154,48 @@ public class StructureTreeMergerTestCase
checkNoParentTree(kid, index);
}
}
+
+
+ @Test
+ public void testNullEntriesInParentTree() throws IOException {
+ setUp();
+ PDDocument doc = PDDocument.load(LINK);
+ PDPage srcPage = doc.getPage(0);
+ PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
+ COSArray markedContentParents = finder.getPageParentTreeArray(doc);
+ markedContentParents.add(0, null);
+ PDFStructElem elem = new PDFStructElem();
+ elem.setObjectNumber(2);
+ adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new
HashMap<Integer, PDFArray>());
+ PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
+ StructureTreeMerger merger = new StructureTreeMerger(elem, handler,
adapter, srcPage);
+ merger.copyStructure(markedContentParents);
+ PDFArray array = handler.getPageParentTree();
+ Assert.assertNull(array.get(0));
+ }
+ @Test
+ public void checkNullCOSObject() throws IOException {
+ setUp();
+ PDDocument doc = PDDocument.load(BrokenLink);
+ PDPage srcPage = doc.getPage(0);
+ PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
+ COSArray markedContentParents = finder.getPageParentTreeArray(doc);
+ COSObject nullObj = new COSObject(null);
+ nullObj.setObjectNumber(COSInteger.get(100));
+ nullObj.setGenerationNumber(COSInteger.ZERO);
+ PDFStructElem elem = new PDFStructElem();
+ elem.setObjectNumber(2);
+ COSObject parent = (COSObject)markedContentParents.get(1);
+ COSArray kids = (COSArray) parent.getDictionaryObject(COSName.K);
+ COSDictionary kid = (COSDictionary) kids.get(1);
+ kid.setItem(COSName.OBJ, nullObj);
+ adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new
HashMap<Integer, PDFArray>());
+ PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
+ StructureTreeMerger merger = new StructureTreeMerger(elem, handler,
adapter, srcPage);
+ merger.copyStructure(markedContentParents);
+ PDFArray array = handler.getPageParentTree();
+ PDFStructElem parentElem = (PDFStructElem)array.get(1);
+ PDFDictionary objrDict = (PDFDictionary) parentElem.getKids().get(1);
+ Assert.assertNull(objrDict.get("Obj"));
+ }
}
Modified:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java?rev=1680278&r1=1680277&r2=1680278&view=diff
==============================================================================
---
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
(original)
+++
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
Tue May 19 13:11:09 2015
@@ -66,8 +66,10 @@ public class TaggedPDFConductorTestCase
Assert.assertEquals(print(elem),
"/Div/Part/Sect/Table/TBody/TR/TD/P/TD/P/TR/TD/TD");
elem = new PDFStructElem();
+ elem.put("Alt", "alt-text");
runConductor(OTF, elem);
Assert.assertEquals(print(elem), "/Div/Part/Art/P/Span");
+ Assert.assertNull(elem.get("Alt"));
}
private String print(PDFStructElem x) throws IOException {
@@ -93,7 +95,7 @@ public class TaggedPDFConductorTestCase
private void setUp() {
Rectangle2D r = new Rectangle2D.Double();
- pdfPage = new PDFPage(new PDFResources(0), 0, r, r, r, r);
+ pdfPage = new PDFPage(new PDFResources(pdfDoc), 0, r, r, r, r);
pdfDoc = new PDFDocument(" ");
pdfDoc.makeStructTreeRoot(null);
pdfPage.setObjectNumber(1);
Added:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/resources/brokenLink.pdf
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/resources/brokenLink.pdf?rev=1680278&view=auto
==============================================================================
Binary file - no diff available.
Propchange:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/resources/brokenLink.pdf
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/resources/classMap.pdf
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/resources/classMap.pdf?rev=1680278&view=auto
==============================================================================
Binary file - no diff available.
Propchange:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/resources/classMap.pdf
------------------------------------------------------------------------------
svn:executable = *
Propchange:
xmlgraphics/fop-pdf-images/branches/Temp_MergeTaggedPDF/test/resources/classMap.pdf
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]