From 1748997fc14c01a3c1b5d994d643f7e002a8d7c7 Mon Sep 17 00:00:00 2001 From: Jeremias Maerki Date: Mon, 16 Feb 2009 08:09:29 +0000 Subject: [PATCH] Now using the "font" filter list entry for font streams. Made T1 and TTF streams children of a commons base class. Refactored default filter addition a bit. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@744851 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/fop/pdf/AbstractPDFFontStream.java | 41 +++++++++++++++++++ .../org/apache/fop/pdf/AbstractPDFStream.java | 14 +++++-- .../org/apache/fop/pdf/PDFImageXObject.java | 6 +-- src/java/org/apache/fop/pdf/PDFMetadata.java | 6 +-- src/java/org/apache/fop/pdf/PDFT1Stream.java | 6 +-- src/java/org/apache/fop/pdf/PDFTTFStream.java | 22 ++++++++-- 6 files changed, 75 insertions(+), 20 deletions(-) create mode 100644 src/java/org/apache/fop/pdf/AbstractPDFFontStream.java diff --git a/src/java/org/apache/fop/pdf/AbstractPDFFontStream.java b/src/java/org/apache/fop/pdf/AbstractPDFFontStream.java new file mode 100644 index 000000000..f3d005bd3 --- /dev/null +++ b/src/java/org/apache/fop/pdf/AbstractPDFFontStream.java @@ -0,0 +1,41 @@ +/* + * 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; + + +/** + * Base class for PDF font streams. + */ +public abstract class AbstractPDFFontStream extends AbstractPDFStream { + + /** + * Main constructor. + */ + public AbstractPDFFontStream() { + super(); + } + + /** {@inheritDoc} */ + protected void setupFilterList() { + addDefaultFilter(PDFFilterList.FONT_FILTER); + super.setupFilterList(); + } + +} diff --git a/src/java/org/apache/fop/pdf/AbstractPDFStream.java b/src/java/org/apache/fop/pdf/AbstractPDFStream.java index 1e1f1f259..fc853b512 100644 --- a/src/java/org/apache/fop/pdf/AbstractPDFStream.java +++ b/src/java/org/apache/fop/pdf/AbstractPDFStream.java @@ -47,13 +47,21 @@ public abstract class AbstractPDFStream extends PDFDictionary { * from outside. */ protected void setupFilterList() { + addDefaultFilter(PDFFilterList.DEFAULT_FILTER); + prepareImplicitFilters(); + getDocument().applyEncryption(this); + } + + /** + * Adds the default filter to the filter list if the filter list hasn't been initialized, yet. + * @param filterName the name of the default filter to use + */ + protected void addDefaultFilter(String filterName) { if (!getFilterList().isInitialized()) { getFilterList().addDefaultFilters( getDocumentSafely().getFilterMap(), - PDFFilterList.DEFAULT_FILTER); + filterName); } - prepareImplicitFilters(); - getDocument().applyEncryption(this); } /** diff --git a/src/java/org/apache/fop/pdf/PDFImageXObject.java b/src/java/org/apache/fop/pdf/PDFImageXObject.java index 7104422e7..a69d9e8de 100644 --- a/src/java/org/apache/fop/pdf/PDFImageXObject.java +++ b/src/java/org/apache/fop/pdf/PDFImageXObject.java @@ -164,11 +164,7 @@ public class PDFImageXObject extends PDFXObject { * {@inheritDoc} */ protected void setupFilterList() { - if (!getFilterList().isInitialized()) { - getFilterList().addDefaultFilters( - getDocumentSafely().getFilterMap(), - pdfimage.getFilterHint()); - } + addDefaultFilter(pdfimage.getFilterHint()); super.setupFilterList(); } diff --git a/src/java/org/apache/fop/pdf/PDFMetadata.java b/src/java/org/apache/fop/pdf/PDFMetadata.java index 6d15a67d4..5008183ef 100644 --- a/src/java/org/apache/fop/pdf/PDFMetadata.java +++ b/src/java/org/apache/fop/pdf/PDFMetadata.java @@ -60,11 +60,7 @@ public class PDFMetadata extends PDFStream { /** {@inheritDoc} */ protected void setupFilterList() { - if (!getFilterList().isInitialized()) { - getFilterList().addDefaultFilters( - getDocumentSafely().getFilterMap(), - PDFFilterList.METADATA_FILTER); - } + addDefaultFilter(PDFFilterList.METADATA_FILTER); super.setupFilterList(); } diff --git a/src/java/org/apache/fop/pdf/PDFT1Stream.java b/src/java/org/apache/fop/pdf/PDFT1Stream.java index 8181287b5..d723625eb 100644 --- a/src/java/org/apache/fop/pdf/PDFT1Stream.java +++ b/src/java/org/apache/fop/pdf/PDFT1Stream.java @@ -28,13 +28,11 @@ import org.apache.fop.fonts.type1.PFBData; /** * Special PDFStream for embedding Type 1 fonts. */ -public class PDFT1Stream extends AbstractPDFStream { +public class PDFT1Stream extends AbstractPDFFontStream { private PFBData pfb; - /** - * {@inheritDoc} - */ + /** {@inheritDoc} */ protected int getSizeHint() throws IOException { if (this.pfb != null) { return pfb.getLength(); diff --git a/src/java/org/apache/fop/pdf/PDFTTFStream.java b/src/java/org/apache/fop/pdf/PDFTTFStream.java index 6c68ea8bf..643ddb1e8 100644 --- a/src/java/org/apache/fop/pdf/PDFTTFStream.java +++ b/src/java/org/apache/fop/pdf/PDFTTFStream.java @@ -20,13 +20,15 @@ package org.apache.fop.pdf; import java.io.IOException; +import java.io.OutputStream; /** * Special PDFStream for embeddable TrueType fonts. */ -public class PDFTTFStream extends PDFStream { +public class PDFTTFStream extends AbstractPDFFontStream { private int origLength; + private byte[] ttfData; /** * Main constructor @@ -37,6 +39,15 @@ public class PDFTTFStream extends PDFStream { origLength = len; } + /** {@inheritDoc} */ + protected int getSizeHint() throws IOException { + if (this.ttfData != null) { + return ttfData.length; + } else { + return 0; //no hint available + } + } + /** * Overload the base object method so we don't have to copy * byte arrays around so much @@ -53,6 +64,11 @@ public class PDFTTFStream extends PDFStream { return length; } + /** {@inheritDoc} */ + protected void outputRawStreamData(OutputStream out) throws IOException { + out.write(this.ttfData); + } + /** {@inheritDoc} */ protected void populateStreamDict(Object lengthEntry) { put("Length1", origLength); @@ -66,8 +82,8 @@ public class PDFTTFStream extends PDFStream { * @throws IOException in case of an I/O problem */ public void setData(byte[] data, int size) throws IOException { - this.data.clear(); - getBufferOutputStream().write(data, 0, size); + this.ttfData = new byte[size]; + System.arraycopy(data, 0, this.ttfData, 0, size); } } -- 2.39.5