Author: ssteiner Date: Tue Oct 26 12:12:49 2021 New Revision: 1894578 URL: http://svn.apache.org/viewvc?rev=1894578&view=rev Log: FOP-3032: Allow to embed native PDF in AFP
Added: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2AFP.java (with props) xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/ImageConverterPDF2AFPTestCase.java (with props) Modified: xmlgraphics/fop-pdf-images/trunk/src/java/META-INF/services/org.apache.xmlgraphics.image.loader.spi.ImageConverter xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java Modified: xmlgraphics/fop-pdf-images/trunk/src/java/META-INF/services/org.apache.xmlgraphics.image.loader.spi.ImageConverter URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/META-INF/services/org.apache.xmlgraphics.image.loader.spi.ImageConverter?rev=1894578&r1=1894577&r2=1894578&view=diff ============================================================================== --- xmlgraphics/fop-pdf-images/trunk/src/java/META-INF/services/org.apache.xmlgraphics.image.loader.spi.ImageConverter (original) +++ xmlgraphics/fop-pdf-images/trunk/src/java/META-INF/services/org.apache.xmlgraphics.image.loader.spi.ImageConverter Tue Oct 26 12:12:49 2021 @@ -1 +1,2 @@ +org.apache.fop.render.pdf.pdfbox.ImageConverterPDF2AFP org.apache.fop.render.pdf.pdfbox.ImageConverterPDF2G2D Added: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2AFP.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2AFP.java?rev=1894578&view=auto ============================================================================== --- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2AFP.java (added) +++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2AFP.java Tue Oct 26 12:12:49 2021 @@ -0,0 +1,65 @@ +/* + * 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.pdfbox; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Map; + +import org.apache.pdfbox.multipdf.Splitter; +import org.apache.pdfbox.pdmodel.PDDocument; + +import org.apache.xmlgraphics.image.loader.Image; +import org.apache.xmlgraphics.image.loader.ImageFlavor; +import org.apache.xmlgraphics.image.loader.MimeEnabledImageFlavor; +import org.apache.xmlgraphics.image.loader.impl.AbstractImageConverter; +import org.apache.xmlgraphics.image.loader.impl.ImageRawStream; +import org.apache.xmlgraphics.image.loader.util.ImageUtil; + +public class ImageConverterPDF2AFP extends AbstractImageConverter { + public Image convert(Image src, Map hints) throws IOException { + if (!(src instanceof ImagePDF)) { + return null; + } + ImagePDF imgPDF = (ImagePDF)src; + int selectedPage = ImageUtil.needPageIndexFromURI(src.getInfo().getOriginalURI()); + PDDocument pdDocument = imgPDF.getPDDocument(); + Splitter splitter = new Splitter(); + splitter.setStartPage(selectedPage + 1); + splitter.setEndPage(selectedPage + 1); + pdDocument = splitter.split(pdDocument).get(0); + ByteArrayOutputStream pdf = new ByteArrayOutputStream(); + pdDocument.save(pdf); + MimeEnabledImageFlavor imageFlavor = new MimeEnabledImageFlavor(src.getFlavor(), ImagePDF.MIME_PDF); + return new ImageRawStream(src.getInfo(), imageFlavor, new ByteArrayInputStream(pdf.toByteArray())); + } + + public ImageFlavor getSourceFlavor() { + return ImagePDF.PDFBOX_IMAGE; + } + + public ImageFlavor getTargetFlavor() { + return ImageFlavor.RAW; + } + + public int getConversionPenalty() { + return 100; + } +} Propchange: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2AFP.java ------------------------------------------------------------------------------ svn:eol-style = native Added: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/ImageConverterPDF2AFPTestCase.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/ImageConverterPDF2AFPTestCase.java?rev=1894578&view=auto ============================================================================== --- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/ImageConverterPDF2AFPTestCase.java (added) +++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/ImageConverterPDF2AFPTestCase.java Tue Oct 26 12:12:49 2021 @@ -0,0 +1,51 @@ +/* + * 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. + */ +package org.apache.fop.render.pdf; + +import org.junit.Assert; +import org.junit.Test; + +import org.apache.commons.io.IOUtils; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; + +import org.apache.xmlgraphics.image.loader.ImageInfo; +import org.apache.xmlgraphics.image.loader.impl.ImageRawStream; + +import org.apache.fop.render.pdf.pdfbox.ImageConverterPDF2AFP; +import org.apache.fop.render.pdf.pdfbox.ImagePDF; + +public class ImageConverterPDF2AFPTestCase { + @Test + public void testConverter() throws Exception { + PDDocument orgdoc = PDFBoxAdapterTestCase.load(PDFBoxAdapterTestCase.ANNOT); + String orgPage = IOUtils.toString(orgdoc.getPage(1).getContents()); + Assert.assertEquals(orgdoc.getNumberOfPages(), 2); + ImageInfo info = new ImageInfo("x.pdf#page=2", ImagePDF.MIME_PDF); + ImagePDF imagePDF = new ImagePDF(info, orgdoc); + ImageConverterPDF2AFP converter = new ImageConverterPDF2AFP(); + ImageRawStream stream = (ImageRawStream) converter.convert(imagePDF, null); + PDDocument doc = PDDocument.load(stream.createInputStream()); + PDPage page = doc.getPage(0); + Assert.assertEquals(orgPage, IOUtils.toString(page.getContents())); + Assert.assertEquals(doc.getNumberOfPages(), 1); + Assert.assertEquals(stream.getMimeType(), ImagePDF.MIME_PDF); + orgdoc.close(); + doc.close(); + } +} Propchange: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/ImageConverterPDF2AFPTestCase.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java?rev=1894578&r1=1894577&r2=1894578&view=diff ============================================================================== --- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java (original) +++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java Tue Oct 26 12:12:49 2021 @@ -101,31 +101,31 @@ public class PDFBoxAdapterTestCase { protected static final String TTCID2 = "ttcid2.pdf"; protected static final String TTSubset1 = "ttsubset.pdf"; protected static final String TTSubset2 = "ttsubset2.pdf"; - private static final String TTSubset3 = "ttsubset3.pdf"; - private static final String TTSubset5 = "ttsubset5.pdf"; - private static final String TTSubset6 = "ttsubset6.pdf"; - private static final String TTSubset7 = "ttsubset7.pdf"; + protected static final String TTSubset3 = "ttsubset3.pdf"; + protected static final String TTSubset5 = "ttsubset5.pdf"; + protected static final String TTSubset6 = "ttsubset6.pdf"; + protected static final String TTSubset7 = "ttsubset7.pdf"; protected static final String CFFCID1 = "cffcid1.pdf"; - private static final String CFFCID2 = "cffcid2.pdf"; + protected static final String CFFCID2 = "cffcid2.pdf"; protected static final String Type1Subset1 = "t1subset.pdf"; protected static final String Type1Subset2 = "t1subset2.pdf"; - private static final String Type1Subset3 = "t1subset3.pdf"; - private static final String Type1Subset4 = "t1subset4.pdf"; + protected static final String Type1Subset3 = "t1subset3.pdf"; + protected static final String Type1Subset4 = "t1subset4.pdf"; protected static final String ROTATE = "rotate.pdf"; - private static final String ANNOT = "annot.pdf"; - private static final String SHADING = "shading.pdf"; - private static final String LINK = "link.pdf"; - private static final String IMAGE = "image.pdf"; - private static final String HELLOTagged = "taggedWorld.pdf"; - private static final String XFORM = "xform.pdf"; - private static final String LOOP = "loop.pdf"; - private static final String ERROR = "error.pdf"; - private static final String LIBREOFFICE = "libreoffice.pdf"; - private static final String SMASK = "smask.pdf"; - private static final String TYPE0TT = "type0tt.pdf"; - private static final String TYPE0CFF = "type0cff.pdf"; - private static final String ACCESSIBLERADIOBUTTONS = "accessibleradiobuttons.pdf"; - private static final String PATTERN = "pattern.pdf"; + protected static final String ANNOT = "annot.pdf"; + protected static final String SHADING = "shading.pdf"; + protected static final String LINK = "link.pdf"; + protected static final String IMAGE = "image.pdf"; + protected static final String HELLOTagged = "taggedWorld.pdf"; + protected static final String XFORM = "xform.pdf"; + protected static final String LOOP = "loop.pdf"; + protected static final String ERROR = "error.pdf"; + protected static final String LIBREOFFICE = "libreoffice.pdf"; + protected static final String SMASK = "smask.pdf"; + protected static final String TYPE0TT = "type0tt.pdf"; + protected static final String TYPE0CFF = "type0cff.pdf"; + protected static final String ACCESSIBLERADIOBUTTONS = "accessibleradiobuttons.pdf"; + protected static final String PATTERN = "pattern.pdf"; private static PDFPage getPDFPage(PDFDocument doc) { final Rectangle2D r = new Rectangle2D.Double(); --------------------------------------------------------------------- To unsubscribe, e-mail: fop-commits-unsubscr...@xmlgraphics.apache.org For additional commands, e-mail: fop-commits-h...@xmlgraphics.apache.org