You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2016/11/08 16:57:50 UTC
svn commit: r1768739 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java
Author: tilman
Date: Tue Nov 8 16:57:50 2016
New Revision: 1768739
URL: http://svn.apache.org/viewvc?rev=1768739&view=rev
Log:
PDFBOX-2852: remove unneeded segment, as suggested by Lorenz Pahl; improve javadoc
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java?rev=1768739&r1=1768738&r2=1768739&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java Tue Nov 8 16:57:50 2016
@@ -1,195 +1,189 @@
-/*
- * 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.pdfbox.pdmodel.font;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.pdfbox.contentstream.PDContentStream;
-import org.apache.pdfbox.contentstream.operator.Operator;
-import org.apache.pdfbox.cos.COSBase;
-import org.apache.pdfbox.cos.COSNumber;
-import org.apache.pdfbox.cos.COSObject;
-import org.apache.pdfbox.cos.COSStream;
-import org.apache.pdfbox.pdfparser.PDFStreamParser;
-import org.apache.pdfbox.pdmodel.PDResources;
-import org.apache.pdfbox.pdmodel.common.COSObjectable;
-import org.apache.pdfbox.pdmodel.common.PDRectangle;
-import org.apache.pdfbox.pdmodel.common.PDStream;
-import org.apache.pdfbox.util.Matrix;
-
-/**
- * A Type 3 character procedure. This is a standalone PDF content stream.
- *
- * @author John Hewson
- */
-public final class PDType3CharProc implements COSObjectable, PDContentStream
-{
- private final PDType3Font font;
- private final COSStream charStream;
-
- public PDType3CharProc(PDType3Font font, COSStream charStream)
- {
- this.font = font;
- this.charStream = charStream;
- }
-
- @Override
- public COSStream getCOSObject()
- {
- return charStream;
- }
-
- public PDType3Font getFont()
- {
- return font;
- }
-
- public PDStream getContentStream()
- {
- return new PDStream(charStream);
- }
-
- @Override
- public InputStream getContents() throws IOException
- {
- return charStream.createInputStream();
- }
-
- @Override
- public PDResources getResources()
- {
- return font.getResources();
- }
-
- @Override
- public PDRectangle getBBox()
- {
- return font.getFontBBox();
- }
-
- /**
- * Calculate the bounding box of this glyph. This will work only if the first operator in the
- * stream is d1.
- *
- * @return the bounding box of this glyph, or null if the first operator is not d1.
- * @throws IOException If an io error occurs while parsing the stream.
- */
- public PDRectangle getGlyphBBox() throws IOException
- {
- List<COSBase> arguments = new ArrayList<COSBase>();
- PDFStreamParser parser = new PDFStreamParser(this);
- Object token = parser.parseNextToken();
- while (token != null)
- {
- if (token instanceof COSObject)
- {
- arguments.add(((COSObject) token).getObject());
- }
- else if (token instanceof Operator)
- {
- if (((Operator) token).getName().equals("d1") && arguments.size() == 6)
- {
- for (int i = 0; i < 6; ++i)
- {
- if (!(arguments.get(i) instanceof COSNumber))
- {
- return null;
- }
- }
- return new PDRectangle(
- ((COSNumber) arguments.get(2)).floatValue(),
- ((COSNumber) arguments.get(3)).floatValue(),
- ((COSNumber) arguments.get(4)).floatValue() - ((COSNumber) arguments.get(2)).floatValue(),
- ((COSNumber) arguments.get(5)).floatValue() - ((COSNumber) arguments.get(3)).floatValue());
- }
- else
- {
- return null;
- }
- }
- else
- {
- arguments.add((COSBase) token);
- }
- token = parser.parseNextToken();
- }
- return null;
- }
-
- @Override
- public Matrix getMatrix()
- {
- return font.getFontMatrix();
- }
-
- /**
- * todo.
- *
- * @return
- * @throws IOException
- */
- public float getWidth() throws IOException
- {
- List<COSBase> arguments = new ArrayList<COSBase>();
- PDFStreamParser parser = new PDFStreamParser(this);
- Object token = parser.parseNextToken();
- while (token != null)
- {
- if (token instanceof COSObject)
- {
- arguments.add(((COSObject) token).getObject());
- }
- else if (token instanceof Operator)
- {
- return parseWidth((Operator) token, arguments);
- }
- else
- {
- arguments.add((COSBase) token);
- }
- token = parser.parseNextToken();
- }
- throw new IOException("Unexpected end of stream");
- }
-
- private float parseWidth(Operator operator, List<COSBase> arguments) throws IOException
- {
- if (operator.getName().equals("d0") || operator.getName().equals("d1"))
- {
- Object obj = arguments.get(0);
- if (obj instanceof Number)
- {
- return ((Number) obj).floatValue();
- }
- else if (obj instanceof COSNumber)
- {
- return ((COSNumber) obj).floatValue();
- }
- else
- {
- throw new IOException("Unexpected argument type: " + obj.getClass().getName());
- }
- }
- else
- {
- throw new IOException("First operator must be d0 or d1");
- }
- }
-}
+/*
+ * 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.pdfbox.pdmodel.font;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.pdfbox.contentstream.PDContentStream;
+import org.apache.pdfbox.contentstream.operator.Operator;
+import org.apache.pdfbox.cos.COSBase;
+import org.apache.pdfbox.cos.COSNumber;
+import org.apache.pdfbox.cos.COSObject;
+import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.pdfparser.PDFStreamParser;
+import org.apache.pdfbox.pdmodel.PDResources;
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.common.PDStream;
+import org.apache.pdfbox.util.Matrix;
+
+/**
+ * A Type 3 character procedure. This is a standalone PDF content stream.
+ *
+ * @author John Hewson
+ */
+public final class PDType3CharProc implements COSObjectable, PDContentStream
+{
+ private final PDType3Font font;
+ private final COSStream charStream;
+
+ public PDType3CharProc(PDType3Font font, COSStream charStream)
+ {
+ this.font = font;
+ this.charStream = charStream;
+ }
+
+ @Override
+ public COSStream getCOSObject()
+ {
+ return charStream;
+ }
+
+ public PDType3Font getFont()
+ {
+ return font;
+ }
+
+ public PDStream getContentStream()
+ {
+ return new PDStream(charStream);
+ }
+
+ @Override
+ public InputStream getContents() throws IOException
+ {
+ return charStream.createInputStream();
+ }
+
+ @Override
+ public PDResources getResources()
+ {
+ return font.getResources();
+ }
+
+ @Override
+ public PDRectangle getBBox()
+ {
+ return font.getFontBBox();
+ }
+
+ /**
+ * Calculate the bounding box of this glyph. This will work only if the first operator in the
+ * stream is d1.
+ *
+ * @return the bounding box of this glyph, or null if the first operator is not d1.
+ * @throws IOException If an io error occurs while parsing the stream.
+ */
+ public PDRectangle getGlyphBBox() throws IOException
+ {
+ List<COSBase> arguments = new ArrayList<COSBase>();
+ PDFStreamParser parser = new PDFStreamParser(this);
+ Object token = parser.parseNextToken();
+ while (token != null)
+ {
+ if (token instanceof COSObject)
+ {
+ arguments.add(((COSObject) token).getObject());
+ }
+ else if (token instanceof Operator)
+ {
+ if (((Operator) token).getName().equals("d1") && arguments.size() == 6)
+ {
+ for (int i = 0; i < 6; ++i)
+ {
+ if (!(arguments.get(i) instanceof COSNumber))
+ {
+ return null;
+ }
+ }
+ return new PDRectangle(
+ ((COSNumber) arguments.get(2)).floatValue(),
+ ((COSNumber) arguments.get(3)).floatValue(),
+ ((COSNumber) arguments.get(4)).floatValue() - ((COSNumber) arguments.get(2)).floatValue(),
+ ((COSNumber) arguments.get(5)).floatValue() - ((COSNumber) arguments.get(3)).floatValue());
+ }
+ else
+ {
+ return null;
+ }
+ }
+ else
+ {
+ arguments.add((COSBase) token);
+ }
+ token = parser.parseNextToken();
+ }
+ return null;
+ }
+
+ @Override
+ public Matrix getMatrix()
+ {
+ return font.getFontMatrix();
+ }
+
+ /**
+ * Get the width from a type3 charproc stream.
+ *
+ * @return the glyph width.
+ * @throws IOException if the stream could not be read, or did not have d0 or d1 as first
+ * operator, or if their first argument was not a number.
+ */
+ public float getWidth() throws IOException
+ {
+ List<COSBase> arguments = new ArrayList<COSBase>();
+ PDFStreamParser parser = new PDFStreamParser(this);
+ Object token = parser.parseNextToken();
+ while (token != null)
+ {
+ if (token instanceof COSObject)
+ {
+ arguments.add(((COSObject) token).getObject());
+ }
+ else if (token instanceof Operator)
+ {
+ return parseWidth((Operator) token, arguments);
+ }
+ else
+ {
+ arguments.add((COSBase) token);
+ }
+ token = parser.parseNextToken();
+ }
+ throw new IOException("Unexpected end of stream");
+ }
+
+ private float parseWidth(Operator operator, List<COSBase> arguments) throws IOException
+ {
+ if (operator.getName().equals("d0") || operator.getName().equals("d1"))
+ {
+ COSBase obj = arguments.get(0);
+ if (obj instanceof COSNumber)
+ {
+ return ((COSNumber) obj).floatValue();
+ }
+ throw new IOException("Unexpected argument type: " + obj.getClass().getName());
+ }
+ else
+ {
+ throw new IOException("First operator must be d0 or d1");
+ }
+ }
+}