From 77467fb13329ffebf62f9fbda48b6e832c977bfe Mon Sep 17 00:00:00 2001 From: Simon Steiner Date: Fri, 31 Jul 2015 14:36:56 +0000 Subject: [PATCH] FOP-2507: PDFVT and Page Piece exception using IF git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1693610 13f79535-47bb-0310-9956-ffa450edef68 --- .../pdf/extensions/PDFExtensionHandler.java | 6 ++ .../pdf/extensions/PDFPagePieceExtension.java | 25 ++++++++ .../render/pdf/extensions/PDFVTExtension.java | 25 ++++++++ .../org/apache/fop/pdf/PDFVTTestCase.java | 61 +++++++++++++++++-- 4 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 src/java/org/apache/fop/render/pdf/extensions/PDFPagePieceExtension.java create mode 100644 src/java/org/apache/fop/render/pdf/extensions/PDFVTExtension.java diff --git a/src/java/org/apache/fop/render/pdf/extensions/PDFExtensionHandler.java b/src/java/org/apache/fop/render/pdf/extensions/PDFExtensionHandler.java index 2d53c33bf..9579acc84 100644 --- a/src/java/org/apache/fop/render/pdf/extensions/PDFExtensionHandler.java +++ b/src/java/org/apache/fop/render/pdf/extensions/PDFExtensionHandler.java @@ -108,6 +108,12 @@ public class PDFExtensionHandler extends DefaultHandler implements ContentHandle } else if (PDFDictionaryType.Info.elementName().equals(localName)) { PDFDocumentInformationExtension info = new PDFDocumentInformationExtension(); collections.push(info); + } else if (PDFDictionaryType.VT.elementName().equals(localName)) { + PDFVTExtension dictionary = new PDFVTExtension(); + collections.push(dictionary); + } else if (PDFDictionaryType.PagePiece.elementName().equals(localName)) { + PDFPagePieceExtension dictionary = new PDFPagePieceExtension(); + collections.push(dictionary); } else if (PDFObjectType.hasValueOfElementName(localName)) { PDFCollectionEntryExtension entry; if (PDFObjectType.Reference.elementName().equals(localName)) { diff --git a/src/java/org/apache/fop/render/pdf/extensions/PDFPagePieceExtension.java b/src/java/org/apache/fop/render/pdf/extensions/PDFPagePieceExtension.java new file mode 100644 index 000000000..34600727c --- /dev/null +++ b/src/java/org/apache/fop/render/pdf/extensions/PDFPagePieceExtension.java @@ -0,0 +1,25 @@ +/* + * 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.render.pdf.extensions; + +public class PDFPagePieceExtension extends PDFDictionaryExtension { + PDFPagePieceExtension() { + super(PDFDictionaryType.PagePiece); + } +} diff --git a/src/java/org/apache/fop/render/pdf/extensions/PDFVTExtension.java b/src/java/org/apache/fop/render/pdf/extensions/PDFVTExtension.java new file mode 100644 index 000000000..22ac56ffe --- /dev/null +++ b/src/java/org/apache/fop/render/pdf/extensions/PDFVTExtension.java @@ -0,0 +1,25 @@ +/* + * 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.render.pdf.extensions; + +public class PDFVTExtension extends PDFDictionaryExtension { + PDFVTExtension() { + super(PDFDictionaryType.VT); + } +} diff --git a/test/java/org/apache/fop/pdf/PDFVTTestCase.java b/test/java/org/apache/fop/pdf/PDFVTTestCase.java index e3dcf2cf6..a2c1a010c 100644 --- a/test/java/org/apache/fop/pdf/PDFVTTestCase.java +++ b/test/java/org/apache/fop/pdf/PDFVTTestCase.java @@ -24,6 +24,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.util.Collection; import java.util.Iterator; import java.util.Map; @@ -34,6 +35,7 @@ import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXResult; +import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.junit.Assert; @@ -48,6 +50,12 @@ import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.Fop; import org.apache.fop.apps.FopFactory; import org.apache.fop.apps.MimeConstants; +import org.apache.fop.render.intermediate.IFContext; +import org.apache.fop.render.intermediate.IFDocumentHandler; +import org.apache.fop.render.intermediate.IFException; +import org.apache.fop.render.intermediate.IFParser; +import org.apache.fop.render.intermediate.IFSerializer; +import org.apache.fop.render.intermediate.IFUtil; import org.apache.fop.render.pdf.PDFContentGenerator; public class PDFVTTestCase { @@ -100,18 +108,63 @@ public class PDFVTTestCase { } @Test - public void textFO() throws IOException, SAXException, TransformerException { + public void textFO() throws IOException, SAXException, TransformerException, IFException { ByteArrayOutputStream out = new ByteArrayOutputStream(); - FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI(), - new FileInputStream("test/java/org/apache/fop/pdf/PDFVT.xconf")); + foToOutput(out, MimeConstants.MIME_PDF); + checkPDF(out); + } + + @Test + public void textIF() throws IOException, SAXException, TransformerException, IFException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + foToOutput(out, MimeConstants.MIME_FOP_IF); + iFToPDF(new ByteArrayInputStream(out.toByteArray())); + } + + + private void foToOutput(ByteArrayOutputStream out, String mimeFopIf) + throws IOException, SAXException, TransformerException { + FopFactory fopFactory = getFopFactory(); FOUserAgent userAgent = fopFactory.newFOUserAgent(); - Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, userAgent, out); + if (mimeFopIf.equals(MimeConstants.MIME_FOP_IF)) { + IFSerializer serializer = new IFSerializer(new IFContext(userAgent)); + IFDocumentHandler targetHandler + = userAgent.getRendererFactory().createDocumentHandler(userAgent, MimeConstants.MIME_PDF); + serializer.mimicDocumentHandler(targetHandler); + userAgent.setDocumentHandlerOverride(serializer); + } + + Fop fop = fopFactory.newFop(mimeFopIf, userAgent, out); Transformer transformer = TransformerFactory.newInstance().newTransformer(); Source src = new StreamSource(new FileInputStream("test/java/org/apache/fop/pdf/PDFVT.fo")); Result res = new SAXResult(fop.getDefaultHandler()); transformer.transform(src, res); + } + + private FopFactory getFopFactory() throws IOException, SAXException { + return FopFactory.newInstance(new File(".").toURI(), + new FileInputStream("test/java/org/apache/fop/pdf/PDFVT.xconf")); + } + + private void iFToPDF(InputStream is) throws IOException, SAXException, TransformerException, IFException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + FOUserAgent userAgent = getFopFactory().newFOUserAgent(); + Transformer transformer = TransformerFactory.newInstance().newTransformer(); + Source src = new StreamSource(is); + IFDocumentHandler documentHandler + = userAgent.getRendererFactory().createDocumentHandler(userAgent, MimeConstants.MIME_PDF); + documentHandler.setResult(new StreamResult(out)); + IFUtil.setupFonts(documentHandler); + IFParser parser = new IFParser(); + Result res = new SAXResult(parser.getContentHandler(documentHandler, userAgent)); + transformer.transform(src, res); + + checkPDF(out); + } + private void checkPDF(ByteArrayOutputStream out) throws IOException { Map objs = PDFLinearizationTestCase.readObjs(new ByteArrayInputStream(out.toByteArray())); String dpart = getObj(objs.values(), "/DParts"); -- 2.39.5