You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ss...@apache.org on 2015/02/06 14:19:09 UTC
svn commit: r1657799 [2/2] - in
/xmlgraphics/fop/branches/Temp_PDFLinearization:
src/java/org/apache/fop/pdf/ src/java/org/apache/fop/pdf/xref/
src/java/org/apache/fop/render/pdf/ src/java/org/apache/fop/svg/
test/java/org/apache/fop/pdf/ test/java/org...
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java Fri Feb 6 13:19:08 2015
@@ -31,6 +31,7 @@ import org.apache.fop.pdf.PDFFactory;
import org.apache.fop.pdf.PDFGoTo;
import org.apache.fop.pdf.PDFLink;
import org.apache.fop.pdf.PDFOutline;
+import org.apache.fop.pdf.PDFReference;
import org.apache.fop.pdf.PDFStructElem;
import org.apache.fop.render.intermediate.IFDocumentNavigationHandler;
import org.apache.fop.render.intermediate.IFException;
@@ -87,7 +88,7 @@ public class PDFDocumentNavigationHandle
parent = getPDFDoc().getOutlineRoot();
}
PDFAction action = getAction(bookmark.getAction());
- String actionRef = (action != null ? action.makeReference().toString() : null);
+ PDFReference actionRef = (action != null ? action.makeReference() : null);
PDFOutline pdfOutline = getPDFDoc().getFactory().makeOutline(parent,
bookmark.getTitle(), actionRef, bookmark.isShown());
Iterator iter = bookmark.getChildBookmarks().iterator();
@@ -194,7 +195,7 @@ public class PDFDocumentNavigationHandle
p2d = new Point2D.Double(
action.getTargetLocation().x / 1000.0,
(pageRef.getPageDimension().height - action.getTargetLocation().y) / 1000.0);
- String pdfPageRef = pageRef.getPageRef();
+ PDFReference pdfPageRef = pageRef.getPageRef();
pdfGoTo.setPageReference(pdfPageRef);
pdfGoTo.setPosition(p2d);
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFImageHandlerGraphics2D.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFImageHandlerGraphics2D.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFImageHandlerGraphics2D.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFImageHandlerGraphics2D.java Fri Feb 6 13:19:08 2015
@@ -85,7 +85,7 @@ public class PDFImageHandlerGraphics2D e
final boolean textAsShapes = false;
PDFGraphics2D graphics = new PDFGraphics2D(textAsShapes,
pdfContext.getFontInfo(), generator.getDocument(),
- generator.getResourceContext(), pdfContext.getPage().referencePDF(),
+ generator.getResourceContext(), pdfContext.getPage().makeReference(),
"", 0.0f, null);
graphics.setGraphicContext(new org.apache.xmlgraphics.java2d.GraphicContext());
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java Fri Feb 6 13:19:08 2015
@@ -171,7 +171,7 @@ public class PDFImageHandlerSVG implemen
PDFGraphics2D graphics = new PDFGraphics2D(true, pdfContext.getFontInfo(),
generator.getDocument(),
- generator.getResourceContext(), pdfContext.getPage().referencePDF(),
+ generator.getResourceContext(), pdfContext.getPage().makeReference(),
"", 0, new TransparencyIgnoredEventListener(pdfContext, imageSVG));
graphics.setGraphicContext(new org.apache.xmlgraphics.java2d.GraphicContext());
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRendererConfig.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRendererConfig.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRendererConfig.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRendererConfig.java Fri Feb 6 13:19:08 2015
@@ -56,6 +56,7 @@ import static org.apache.fop.render.pdf.
import static org.apache.fop.render.pdf.PDFEncryptionOption.USER_PASSWORD;
import static org.apache.fop.render.pdf.PDFRendererOption.DISABLE_SRGB_COLORSPACE;
import static org.apache.fop.render.pdf.PDFRendererOption.FILTER_LIST;
+import static org.apache.fop.render.pdf.PDFRendererOption.LINEARIZATION;
import static org.apache.fop.render.pdf.PDFRendererOption.MERGE_FONTS;
import static org.apache.fop.render.pdf.PDFRendererOption.OUTPUT_PROFILE;
import static org.apache.fop.render.pdf.PDFRendererOption.PDF_A_MODE;
@@ -137,6 +138,7 @@ public final class PDFRendererConfig imp
parseAndPut(OUTPUT_PROFILE, cfg);
parseAndPut(DISABLE_SRGB_COLORSPACE, cfg);
parseAndPut(MERGE_FONTS, cfg);
+ parseAndPut(LINEARIZATION, cfg);
parseAndPut(VERSION, cfg);
} catch (ConfigurationException e) {
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRendererOption.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRendererOption.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRendererOption.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRendererOption.java Fri Feb 6 13:19:08 2015
@@ -72,6 +72,12 @@ public enum PDFRendererOption implements
return Boolean.valueOf(value);
}
},
+ LINEARIZATION("linearization", false) {
+ @Override
+ Boolean deserialize(String value) {
+ return Boolean.valueOf(value);
+ }
+ },
/** Rendering Options key for the ICC profile for the output intent. */
OUTPUT_PROFILE("output-profile") {
@Override
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRendererOptionsConfig.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRendererOptionsConfig.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRendererOptionsConfig.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRendererOptionsConfig.java Fri Feb 6 13:19:08 2015
@@ -31,6 +31,7 @@ import org.apache.fop.pdf.Version;
import static org.apache.fop.render.pdf.PDFRendererOption.DISABLE_SRGB_COLORSPACE;
import static org.apache.fop.render.pdf.PDFRendererOption.FILTER_LIST;
+import static org.apache.fop.render.pdf.PDFRendererOption.LINEARIZATION;
import static org.apache.fop.render.pdf.PDFRendererOption.MERGE_FONTS;
import static org.apache.fop.render.pdf.PDFRendererOption.OUTPUT_PROFILE;
import static org.apache.fop.render.pdf.PDFRendererOption.PDF_A_MODE;
@@ -125,4 +126,8 @@ public final class PDFRendererOptionsCon
public Boolean getMergeFontsEnabled() {
return (Boolean)properties.get(MERGE_FONTS);
}
+
+ public Boolean getLinearizationEnabled() {
+ return (Boolean)properties.get(LINEARIZATION);
+ }
}
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRenderingUtil.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRenderingUtil.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRenderingUtil.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/render/pdf/PDFRenderingUtil.java Fri Feb 6 13:19:08 2015
@@ -588,6 +588,7 @@ class PDFRenderingUtil {
this.pdfDoc.enableAccessibility(userAgent.isAccessibilityEnabled());
pdfDoc.setMergeFontsEnabled(rendererConfig.getMergeFontsEnabled());
+ pdfDoc.setLinearizationEnabled(rendererConfig.getLinearizationEnabled());
return this.pdfDoc;
}
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/svg/PDFDocumentGraphics2D.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/svg/PDFDocumentGraphics2D.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/svg/PDFDocumentGraphics2D.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/svg/PDFDocumentGraphics2D.java Fri Feb 6 13:19:08 2015
@@ -337,7 +337,7 @@ public class PDFDocumentGraphics2D exten
width, height);
resourceContext = page;
pdfContext.setCurrentPage(page);
- pageRef = page.referencePDF();
+ pageRef = page.makeReference();
currentStream.write("q\n");
AffineTransform at = new AffineTransform(1.0, 0.0, 0.0, -1.0,
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/svg/PDFGraphics2D.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/svg/PDFGraphics2D.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/svg/PDFGraphics2D.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/src/java/org/apache/fop/svg/PDFGraphics2D.java Fri Feb 6 13:19:08 2015
@@ -88,6 +88,7 @@ import org.apache.fop.pdf.PDFLink;
import org.apache.fop.pdf.PDFNumber;
import org.apache.fop.pdf.PDFPaintingState;
import org.apache.fop.pdf.PDFPattern;
+import org.apache.fop.pdf.PDFReference;
import org.apache.fop.pdf.PDFResourceContext;
import org.apache.fop.pdf.PDFResources;
import org.apache.fop.pdf.PDFShading;
@@ -132,7 +133,7 @@ public class PDFGraphics2D extends Abstr
/**
* The PDF reference of the current page.
*/
- protected String pageRef;
+ protected PDFReference pageRef;
/**
* The PDF painting state
@@ -212,7 +213,7 @@ public class PDFGraphics2D extends Abstr
* @param size the current font size
*/
public PDFGraphics2D(boolean textAsShapes, FontInfo fi, PDFDocument doc,
- PDFResourceContext page, String pref, String font, float size,
+ PDFResourceContext page, PDFReference pref, String font, float size,
TransparencyIgnoredEventListener listener) {
this(textAsShapes);
pdfDoc = doc;
@@ -331,7 +332,7 @@ public class PDFGraphics2D extends Abstr
* Gets the PDF reference of the current page.
* @return the PDF reference of the current page
*/
- public String getPageReference() {
+ public PDFReference getPageReference() {
return this.pageRef;
}
@@ -422,7 +423,7 @@ public class PDFGraphics2D extends Abstr
if (linkType != PDFLink.EXTERNAL) {
String pdfdest = "/FitR " + dest;
resourceContext.addAnnotation(
- pdfDoc.getFactory().makeLink(rect, getPageReference(), pdfdest));
+ pdfDoc.getFactory().makeLink(rect, getPageReference().toString(), pdfdest));
} else {
resourceContext.addAnnotation(
pdfDoc.getFactory().makeLink(rect, dest, linkType, 0));
@@ -1068,13 +1069,13 @@ public class PDFGraphics2D extends Abstr
}
}
- String maskRef = null;
+ PDFReference maskRef = null;
if (mask != null) {
BitmapImage fopimg = new BitmapImage(
"TempImageMask:" + pctx.toString(), devW, devH, mask, null);
fopimg.setColorSpace(new PDFDeviceColorSpace(PDFDeviceColorSpace.DEVICE_GRAY));
PDFImageXObject xobj = pdfDoc.addImage(resourceContext, fopimg);
- maskRef = xobj.referencePDF();
+ maskRef = xobj.makeReference();
flushPDFDocument();
}
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/AbstractPDFStreamTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/AbstractPDFStreamTestCase.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/AbstractPDFStreamTestCase.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/AbstractPDFStreamTestCase.java Fri Feb 6 13:19:08 2015
@@ -49,7 +49,7 @@ public class AbstractPDFStreamTestCase e
encodedBytes[i++] = (byte) (in & 0xff);
}
}
- private String startStream = "<< /Length 5 0 R /Filter /FlateDecode >>\n"
+ private String startStream = "<< /Length 1 0 R /Filter /FlateDecode >>\n"
+ "stream\n";
private String endStream = "endstream";
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/ObjectStreamManagerTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/ObjectStreamManagerTestCase.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/ObjectStreamManagerTestCase.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/ObjectStreamManagerTestCase.java Fri Feb 6 13:19:08 2015
@@ -46,7 +46,7 @@ public class ObjectStreamManagerTestCase
int objectStreamNumber2 = assertSameObjectStream(expectedCapacity, expectedCapacity * 2);
int objectStreamNumber3 = assertSameObjectStream(expectedCapacity * 2, numCompressedObjects);
assertDifferent(objectStreamNumber1, objectStreamNumber2, objectStreamNumber3);
- assertEquals(objectStreamNumber3, pdfDocument.previous.getObjectNumber());
+ assertEquals(objectStreamNumber3, pdfDocument.previous.getObjectNumber().getNumber());
}
private void createCompressObjectReferences(int numObjects) {
@@ -82,8 +82,8 @@ public class ObjectStreamManagerTestCase
private CompressedObject createCompressedObject(final int objectNumber) {
return new CompressedObject() {
- public int getObjectNumber() {
- return objectNumber;
+ public PDFObjectNumber getObjectNumber() {
+ return new PDFObjectNumber(objectNumber);
}
public int output(OutputStream outputStream) throws IOException {
@@ -101,7 +101,7 @@ public class ObjectStreamManagerTestCase
}
private int getObjectStreamNumber(int index) {
- return compressedObjectReferences.get(index).getObjectStreamNumber();
+ return compressedObjectReferences.get(index).getObjectStreamNumber().getNumber();
}
private void assertDifferent(int objectStreamNumber1, int objectStreamNumber2,
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/ObjectStreamTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/ObjectStreamTestCase.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/ObjectStreamTestCase.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/ObjectStreamTestCase.java Fri Feb 6 13:19:08 2015
@@ -86,13 +86,14 @@ public class ObjectStreamTestCase {
private String getExpectedOutput() {
int numObs = compressedObjects.size();
- int objectStreamNumber = objectStream.getObjectNumber();
+ int objectStreamNumber = objectStream.getObjectNumber().getNumber();
int offsetsLength = 9;
StringBuilder expected = new StringBuilder();
expected.append("<<\n");
ObjectStream previous = (ObjectStream) objectStream.get("Extends");
if (previous != null) {
expected.append(" /Extends ").append(previous.getObjectNumber()).append(" 0 R\n");
+ objectStreamNumber++;
}
expected.append(" /Type /ObjStm\n")
.append(" /N ").append(numObs).append("\n")
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFEncryptionJCETestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFEncryptionJCETestCase.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFEncryptionJCETestCase.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFEncryptionJCETestCase.java Fri Feb 6 13:19:08 2015
@@ -286,7 +286,7 @@ public class PDFEncryptionJCETestCase {
public final void testMake() {
PDFEncryption testEncryptionObj = createEncryptionObject(new PDFEncryptionParams());
assertTrue(testEncryptionObj instanceof PDFEncryptionJCE);
- assertEquals(1, ((PDFEncryptionJCE) testEncryptionObj).getObjectNumber());
+ assertEquals(1, ((PDFEncryptionJCE) testEncryptionObj).getObjectNumber().getNumber());
}
@Test
@@ -608,7 +608,7 @@ public class PDFEncryptionJCETestCase {
};
}
};
- return (PDFEncryptionJCE) PDFEncryptionJCE.make(1, params, doc);
+ return (PDFEncryptionJCE) PDFEncryptionJCE.make(new PDFObjectNumber(1), params, doc);
}
private void runEncryptionTests() throws IOException {
Added: xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFLinearizationTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFLinearizationTestCase.java?rev=1657799&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFLinearizationTestCase.java (added)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFLinearizationTestCase.java Fri Feb 6 13:19:08 2015
@@ -0,0 +1,275 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+package org.apache.fop.pdf;
+
+import java.awt.geom.Rectangle2D;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.fop.render.pdf.PDFContentGenerator;
+
+public class PDFLinearizationTestCase {
+ private int objectLeast;
+ private int[] objects;
+
+ @Test
+ public void testPDF() throws IOException {
+ PDFDocument doc = new PDFDocument("");
+ doc.setLinearizationEnabled(true);
+ PDFResources resources = new PDFResources(doc);
+ PDFResourceContext context = new PDFResourceContext(resources);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ PDFContentGenerator gen = null;
+ for (int i = 0; i < 2; i++) {
+ gen = new PDFContentGenerator(doc, out, context);
+ Rectangle2D.Float f = new Rectangle2D.Float();
+ PDFPage page = new PDFPage(resources, i, f, f, f, f);
+ doc.registerObject(page);
+// doc.registerObject(gen.getStream());
+ page.setContents(gen.getStream());
+ }
+ gen.flushPDFDoc();
+ byte[] data = out.toByteArray();
+ checkPDF(data);
+ }
+
+ private void checkPDF(byte[] data) throws IOException {
+ checkHintTable(data);
+ InputStream is = new ByteArrayInputStream(data);
+ Map<String, StringBuilder> objs = readObjs(is);
+
+ List<String> keys = new ArrayList<String>(objs.keySet());
+ int start = keys.indexOf("1 0 obj");
+ Assert.assertTrue(start > 1);
+ int j = 1;
+ for (int i = start; i < keys.size(); i++) {
+ Assert.assertEquals(keys.get(i), j + " 0 obj");
+ j++;
+ }
+ for (int i = 0; i < start; i++) {
+ Assert.assertEquals(keys.get(i), j + " 0 obj");
+ j++;
+ }
+
+ checkFirstObj(data);
+ checkTrailer(data);
+
+ String firstObj = objs.values().iterator().next().toString().replace("\n", "");
+ Assert.assertTrue(firstObj.startsWith("<< /Linearized 1 /L " + data.length));
+ Assert.assertTrue(firstObj.endsWith("startxref0%%EOF"));
+ int pageObjNumber = getValue("/O", firstObj);
+ Assert.assertTrue(objs.get(pageObjNumber + " 0 obj").toString().contains("/Type /Page"));
+ Assert.assertTrue(objs.get("5 0 obj").toString().contains("/Type /Pages"));
+
+ int total = 0;
+ for (int i : objects) {
+ total += i;
+ }
+ Assert.assertEquals(total, objs.size() - 6);
+ }
+
+ private void checkFirstObj(byte[] data) throws IOException {
+ int firstObjPos = getValue("/E", getFirstObj(data));
+ InputStream is = new ByteArrayInputStream(data);
+ Assert.assertEquals(is.skip(firstObjPos), firstObjPos);
+ byte[] obj = new byte[10];
+ Assert.assertEquals(is.read(obj), obj.length);
+ Assert.assertTrue(new String(obj).startsWith("1 0 obj"));
+ }
+
+ private void checkTrailer(byte[] data) throws IOException {
+ int trailerPos = getValue("/T", getFirstObj(data));
+ InputStream is = new ByteArrayInputStream(data);
+ Assert.assertEquals(is.skip(trailerPos), trailerPos);
+ byte[] obj = new byte[20];
+ Assert.assertEquals(is.read(obj), obj.length);
+ Assert.assertTrue(new String(obj).startsWith("0000000000 65535 f"));
+ }
+
+ private int getValue(String name, String firstObj) throws IOException {
+ String[] split = firstObj.split(" ");
+ for (int i = 0; i < split.length; i++) {
+ if (split[i].equals(name)) {
+ return Integer.valueOf(split[i + 1].replace(">>", ""));
+ }
+ }
+ throw new IOException(name + " not found " + firstObj);
+ }
+
+ private int[] getArrayValue(String name, String firstObj) throws IOException {
+ String[] split = firstObj.split(" ");
+ for (int i = 0; i < split.length; i++) {
+ if (split[i].equals(name)) {
+ int[] v = new int[2];
+ v[0] = Integer.valueOf(split[i + 1].replace("[", ""));
+ v[1] = Integer.valueOf(split[i + 2].replace("]", ""));
+ return v;
+ }
+ }
+ throw new IOException(name + " not found " + firstObj);
+ }
+
+ private String getFirstObj(byte[] out) throws IOException {
+ InputStream data = new ByteArrayInputStream(out);
+ Map<String, StringBuilder> objs = readObjs(data);
+ return objs.values().iterator().next().toString().replace("\n", "");
+ }
+
+ private void checkHintTable(byte[] out) throws IOException {
+ String firstObj = getFirstObj(out);
+ int hintPos = getArrayValue("/H", firstObj)[0];
+ int hintLength = getArrayValue("/H", firstObj)[1];
+
+ InputStream data = new ByteArrayInputStream(out);
+ Assert.assertEquals(data.skip(hintPos), hintPos);
+
+ byte[] hintTable = new byte[hintLength];
+ Assert.assertEquals(data.read(hintTable), hintLength);
+ String hintTableStr = new String(hintTable);
+
+ Assert.assertTrue(hintTableStr.contains("/S "));
+ Assert.assertTrue(hintTableStr.contains("/C "));
+ Assert.assertTrue(hintTableStr.contains("/E "));
+ Assert.assertTrue(hintTableStr.contains("/L "));
+ Assert.assertTrue(hintTableStr.contains("/V "));
+ Assert.assertTrue(hintTableStr.contains("/O "));
+ Assert.assertTrue(hintTableStr.contains("/I "));
+ Assert.assertTrue(hintTableStr.contains("/Length "));
+ Assert.assertTrue(hintTableStr.contains("stream"));
+ Assert.assertTrue(hintTableStr.contains("endstream"));
+ Assert.assertTrue(hintTableStr.endsWith("endobj\n"));
+
+ data = new ByteArrayInputStream(hintTable);
+ readStart(data);
+ int pages = getValue("/N", firstObj);
+ readObjectsTable(data, pages);
+ readSharedObjectsTable(data);
+ Assert.assertEquals(objectLeast, 1);
+ }
+
+ private void readObjectsTable(InputStream data, int pages)
+ throws IOException {
+ objectLeast = read32(data);
+ read32(data);
+ int bitsDiffObjects = read16(data);
+ read32(data);
+ int bitsDiffPageLength = read16(data);
+ read32(data);
+ read16(data);
+ read32(data);
+ read16(data);
+ read16(data);
+ read16(data);
+ read16(data);
+ read16(data);
+
+ objects = new int[pages];
+ for (int i = 0; i < pages; i++) {
+ objects[i] = objectLeast + readBits(bitsDiffObjects, data);
+ }
+ for (int i = 0; i < pages; i++) {
+ readBits(bitsDiffPageLength, data);
+ }
+ for (int i = 0; i < pages; i++) {
+ readBits(32, data);
+ }
+ }
+
+ private void readSharedObjectsTable(InputStream str) throws IOException {
+ readBits(32, str);
+ readBits(32, str);
+ readBits(32, str);
+ int sharedGroups = readBits(32, str);
+ readBits(16, str);
+ readBits(32, str);
+ int bitsDiffGroupLength = readBits(16, str);
+ for (int i = 0; i < sharedGroups; i++) {
+ readBits(bitsDiffGroupLength, str);
+ }
+ }
+
+ private int readBits(int bits, InputStream data) throws IOException {
+ if (bits == 32) {
+ return read32(data);
+ }
+ if (bits == 16) {
+ return read16(data);
+ }
+ throw new IOException("Wrong bits");
+ }
+
+ private int read32(InputStream data) throws IOException {
+ int ch1 = data.read();
+ int ch2 = data.read();
+ int ch3 = data.read();
+ int ch4 = data.read();
+ return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4));
+ }
+
+ private int read16(InputStream data) throws IOException {
+ int ch1 = data.read();
+ int ch2 = data.read();
+ return (ch1 << 8) + (ch2);
+ }
+
+ private void readStart(InputStream inputStream) throws IOException {
+ StringBuilder sb = new StringBuilder();
+ while (inputStream.available() > 0) {
+ int data = inputStream.read();
+ if (data == '\n') {
+ if (sb.toString().equals("stream")) {
+ return;
+ }
+ sb.setLength(0);
+ } else {
+ sb.append((char)data);
+ }
+ }
+ }
+
+ private Map<String, StringBuilder> readObjs(InputStream inputStream) throws IOException {
+ Map<String, StringBuilder> objs = new LinkedHashMap<String, StringBuilder>();
+ StringBuilder sb = new StringBuilder();
+ String key = null;
+ while (inputStream.available() > 0) {
+ int data = inputStream.read();
+ if (data == '\n') {
+ if (sb.toString().endsWith(" 0 obj")) {
+ key = sb.toString().trim();
+ objs.put(key, new StringBuilder());
+ } else if (key != null) {
+ objs.get(key).append(sb).append("\n");
+ }
+ sb.setLength(0);
+ } else {
+ sb.append((char)data);
+ }
+ }
+ return objs;
+ }
+}
Propchange: xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFLinearizationTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFObjectTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFObjectTestCase.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFObjectTestCase.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/PDFObjectTestCase.java Fri Feb 6 13:19:08 2015
@@ -58,10 +58,10 @@ public class PDFObjectTestCase {
@Test
public void testSetObjectNumber() {
pdfObjectUnderTest.setObjectNumber(1);
- assertEquals(1, pdfObjectUnderTest.getObjectNumber());
+ assertEquals(1, pdfObjectUnderTest.getObjectNumber().getNumber());
pdfObjectUnderTest.setObjectNumber(5);
- assertEquals(5, pdfObjectUnderTest.getObjectNumber());
+ assertEquals(5, pdfObjectUnderTest.getObjectNumber().getNumber());
}
/**
@@ -157,12 +157,12 @@ public class PDFObjectTestCase {
PDFDictionary dict = new PDFDictionary();
dict.setObjectNumber(7);
PDFReference ref = dict.makeReference();
- assertEquals(ref.getObjectNumber(), 7);
+ assertEquals(ref.getObjectNumber().getNumber(), 7);
assertEquals(ref.getGeneration(), 0);
assertEquals(ref.toString(), "7 0 R");
ref = new PDFReference("8 0 R");
- assertEquals(ref.getObjectNumber(), 8);
+ assertEquals(ref.getObjectNumber().getNumber(), 8);
assertEquals(ref.getGeneration(), 0);
assertEquals(ref.toString(), "8 0 R");
}
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CompressedObjectReferenceTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CompressedObjectReferenceTestCase.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CompressedObjectReferenceTestCase.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CompressedObjectReferenceTestCase.java Fri Feb 6 13:19:08 2015
@@ -27,6 +27,8 @@ import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;
+import org.apache.fop.pdf.PDFObjectNumber;
+
public class CompressedObjectReferenceTestCase extends ObjectReferenceTest {
@Test
@@ -41,7 +43,7 @@ public class CompressedObjectReferenceTe
private void runTest(List<Integer> expectedObjectStreamBytes, int index) throws IOException {
int objectStreamNumber = (int) computeNumberFromBytes(expectedObjectStreamBytes);
- sut = new CompressedObjectReference(0, objectStreamNumber, index);
+ sut = new CompressedObjectReference(new PDFObjectNumber(0), new PDFObjectNumber(objectStreamNumber), index);
byte[] expected = createExpectedOutput((byte) 2, expectedObjectStreamBytes, index);
byte[] actual = getActualOutput();
assertArrayEquals(expected, actual);
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CrossReferenceObjectTest.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CrossReferenceObjectTest.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CrossReferenceObjectTest.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CrossReferenceObjectTest.java Fri Feb 6 13:19:08 2015
@@ -52,7 +52,7 @@ public abstract class CrossReferenceObje
pdfDocument = new PDFDocument("Apache FOP");
Map<String, List<String>> filterMap = pdfDocument.getFilterMap();
filterMap.put("default", Arrays.asList("null"));
- PDFRoot root = new PDFRoot(1, new PDFPages(10));
+ PDFRoot root = new PDFRoot(pdfDocument, new PDFPages(pdfDocument));
PDFInfo info = new PDFInfo();
info.setObjectNumber(2);
byte[] fileID =
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CrossReferenceStreamTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CrossReferenceStreamTestCase.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CrossReferenceStreamTestCase.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CrossReferenceStreamTestCase.java Fri Feb 6 13:19:08 2015
@@ -29,6 +29,8 @@ import java.util.List;
import org.junit.Test;
+import org.apache.fop.pdf.PDFObjectNumber;
+
public class CrossReferenceStreamTestCase extends CrossReferenceObjectTest {
private List<Long> uncompressedObjectOffsets;
@@ -54,7 +56,7 @@ public class CrossReferenceStreamTestCas
@Test
public void testWithObjectStreams1() throws IOException {
List<CompressedObjectReference> compressedObjectReferences =
- Arrays.asList(new CompressedObjectReference(2, 1, 0));
+ Arrays.asList(new CompressedObjectReference(new PDFObjectNumber(2), new PDFObjectNumber(1), 0));
test(Arrays.asList(0L, null), compressedObjectReferences);
}
@@ -72,8 +74,8 @@ public class CrossReferenceStreamTestCas
for (int index = 0; index < numCompressedObjects; index++) {
indirectObjectOffsets.add(null);
int obNum = numIndirectObjects + index + 1;
- compressedObjectReferences.add(new CompressedObjectReference(obNum,
- numIndirectObjects, index));
+ compressedObjectReferences.add(new CompressedObjectReference(new PDFObjectNumber(obNum),
+ new PDFObjectNumber(numIndirectObjects), index));
}
test(indirectObjectOffsets, compressedObjectReferences);
}
@@ -108,7 +110,7 @@ public class CrossReferenceStreamTestCas
objectReferences.add(offset == null ? null : new UncompressedObjectReference(offset));
}
for (CompressedObjectReference ref : compressedObjectReferences) {
- objectReferences.set(ref.getObjectNumber() - 1, ref);
+ objectReferences.set(ref.getObjectNumber().getNumber() - 1, ref);
}
int maxObjectNumber = objectReferences.size() + 1;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Modified: xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CrossReferenceTableTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CrossReferenceTableTestCase.java?rev=1657799&r1=1657798&r2=1657799&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CrossReferenceTableTestCase.java (original)
+++ xmlgraphics/fop/branches/Temp_PDFLinearization/test/java/org/apache/fop/pdf/xref/CrossReferenceTableTestCase.java Fri Feb 6 13:19:08 2015
@@ -53,7 +53,7 @@ public class CrossReferenceTableTestCase
@Override
protected CrossReferenceObject createCrossReferenceObject() {
- return new CrossReferenceTable(trailerDictionary, STARTXREF, offsets);
+ return new CrossReferenceTable(trailerDictionary, STARTXREF, offsets, 0, offsets.size(), offsets.size());
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org