From 6025b6016517c6d898d8957d1d7e03ba71431912 Mon Sep 17 00:00:00 2001 From: tknall Date: Fri, 1 Dec 2006 12:20:24 +0000 Subject: Initial import of release 2.2. git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@4 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- src/main/java/org/pdfbox/pfb/PfbParser.java | 211 ++++++++++++++++++++++++++++ src/main/java/org/pdfbox/pfb/package.html | 9 ++ 2 files changed, 220 insertions(+) create mode 100644 src/main/java/org/pdfbox/pfb/PfbParser.java create mode 100644 src/main/java/org/pdfbox/pfb/package.html (limited to 'src/main/java/org/pdfbox/pfb') diff --git a/src/main/java/org/pdfbox/pfb/PfbParser.java b/src/main/java/org/pdfbox/pfb/PfbParser.java new file mode 100644 index 0000000..ab069d6 --- /dev/null +++ b/src/main/java/org/pdfbox/pfb/PfbParser.java @@ -0,0 +1,211 @@ +/** + * Copyright (c) 2004-2005, www.pdfbox.org + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of pdfbox; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://www.pdfbox.org + * + */ + +package org.pdfbox.pfb; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.EOFException; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * Parser for a pfb-file. + * + * @author Michael Niedermair + * @version $Revision: 1.3 $ + */ +public class PfbParser +{ + /** + * the pdf header length. + * (start-marker (1 byte), ascii-/binary-marker (1 byte), size (4 byte)) + * 3*6 == 18 + */ + private static final int PFB_HEADER_LENGTH = 18; + + /** + * the start marker. + */ + private static final int START_MARKER = 0x80; + + /** + * the ascii marker. + */ + private static final int ASCII_MARKER = 0x01; + + /** + * the binary marker. + */ + private static final int BINARY_MARKER = 0x02; + + /** + * The record types in the pfb-file. + */ + private static final int[] PFB_RECORDS = {ASCII_MARKER, BINARY_MARKER, + ASCII_MARKER}; + + /** + * buffersize. + */ + private static final int BUFFER_SIZE = 0xffff; + + /** + * the parsed pfb-data. + */ + private byte[] pfbdata; + + /** + * the lengths of the records. + */ + private int[] lengths; + + // sample (pfb-file) + // 00000000 80 01 8b 15 00 00 25 21 50 53 2d 41 64 6f 62 65 + // ......%!PS-Adobe + + + /** + * Create a new object. + * @param filename the file name + * @throws IOException if an IO-error occurs. + */ + public PfbParser(final String filename) throws IOException + { + this( new BufferedInputStream(new FileInputStream(filename),BUFFER_SIZE) ); + } + + /** + * Create a new object. + * @param in The input. + * @throws IOException if an IO-error occurs. + */ + public PfbParser(final InputStream in) throws IOException + { + byte[] pfb = readPfbInput(in); + parsePfb(pfb); + } + + /** + * Parse the pfb-array. + * @param pfb The pfb-Array + * @throws IOException in an IO-error occurs. + */ + private void parsePfb(final byte[] pfb) throws IOException + { + + ByteArrayInputStream in = new ByteArrayInputStream(pfb); + pfbdata = new byte[pfb.length - PFB_HEADER_LENGTH]; + lengths = new int[PFB_RECORDS.length]; + int pointer = 0; + for (int records = 0; records < PFB_RECORDS.length; records++) + { + if (in.read() != START_MARKER) + { + throw new IOException("Start marker missing"); + } + + if (in.read() != PFB_RECORDS[records]) + { + throw new IOException("Incorrect record type"); + } + + int size = in.read(); + size += in.read() << 8; + size += in.read() << 16; + size += in.read() << 24; + lengths[records] = size; + int got = in.read(pfbdata, pointer, size); + if (got < 0) + { + throw new EOFException(); + } + pointer += got; + } + } + + /** + * Read the pdf input. + * @param in The input. + * @return Returns the pdf-array. + * @throws IOException if an IO-error occurs. + */ + private byte[] readPfbInput(final InputStream in) throws IOException + { + // copy into an array + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] tmpbuf = new byte[BUFFER_SIZE]; + int amountRead = -1; + while ((amountRead = in.read(tmpbuf)) != -1) + { + out.write(tmpbuf, 0, amountRead); + } + return out.toByteArray(); + } + + /** + * Returns the lengths. + * @return Returns the lengths. + */ + public int[] getLengths() + { + return lengths; + } + + /** + * Returns the pfbdata. + * @return Returns the pfbdata. + */ + public byte[] getPfbdata() + { + return pfbdata; + } + + /** + * Returns the pfb data as stream. + * @return Returns the pfb data as stream. + */ + public InputStream getInputStream() + { + return new ByteArrayInputStream(pfbdata); + } + + /** + * Returns the size of the pfb-data. + * @return Returns the size of the pfb-data. + */ + public int size() + { + return pfbdata.length; + } +} diff --git a/src/main/java/org/pdfbox/pfb/package.html b/src/main/java/org/pdfbox/pfb/package.html new file mode 100644 index 0000000..fcc23f0 --- /dev/null +++ b/src/main/java/org/pdfbox/pfb/package.html @@ -0,0 +1,9 @@ + + + + + + +Classes that are used to parse pfb files. + + -- cgit v1.2.3