/******************************************************************************* * Copyright 2010 Atos Worldline SAS * * Licensed by Atos Worldline SAS under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * Atos Worldline SAS 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 net.awl.edoc.pdfa.compression; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.util.zip.Inflater; import org.apache.commons.io.IOUtils; /** * decode a deFlated byte array * * @author Mike Wessler */ public class FlateDecode { public static void main(String[] args) throws Exception { Inflater inf = new Inflater(false); File f = new File("resources/content_2_0.ufd"); FileInputStream fis = new FileInputStream(f); ByteArrayOutputStream baos = new ByteArrayOutputStream(); IOUtils.copy(fis, baos); IOUtils.closeQuietly(fis); IOUtils.closeQuietly(baos); byte[] buf = baos.toByteArray(); inf.setInput(buf); byte[] res = new byte[buf.length]; int size = inf.inflate(res); String s = new String(res, 0, size, "utf8"); System.err.println(s); } // /** // * decode a byte buffer in Flate format. // * <p> // * Flate is a built-in Java algorithm. It's part of the java.util.zip // * package. // * // * @param buf the deflated input buffer // * @param params parameters to the decoder (unused) // * @return the decoded (inflated) bytes // */ // public static ByteBuffer decodeFlat(PDFObject dict, ByteBuffer buf, // PDFObject params) throws IOException { // Inflater inf = new Inflater(false); // // int bufSize = buf.remaining(); // // // copy the data, since the array() method is not supported // // on raf-based ByteBuffers // byte[] data = new byte[bufSize]; // buf.get(data); // // // set the input to the inflater // inf.setInput(data); // // // output to a byte-array output stream, since we don't // // know how big the output will be // ByteArrayOutputStream baos = new ByteArrayOutputStream(); // byte[] decomp = new byte[bufSize]; // int loc = 0; // int read = 0; // // try { // while (!inf.finished()) { // read = inf.inflate(decomp); // if (read <= 0) { // // System.out.println("Read = " + read + "! Params: " + params); // if (inf.needsDictionary()) { // throw new PDFParseException( // "Don't know how to ask for a dictionary in FlateDecode"); // } else { // // System.out.println("Inflate data length=" + buf.remaining()); // return ByteBuffer.allocate(0); // // throw new // PDFParseException("Inflater wants more data... but it's already here!"); // } // } // baos.write(decomp, 0, read); // } // } catch (DataFormatException dfe) { // throw new PDFParseException("Data format exception:" // + dfe.getMessage()); // } // // // return the output as a byte buffer // ByteBuffer outBytes = ByteBuffer.wrap(baos.toByteArray()); // // // undo a predictor algorithm, if any was used // if (params != null // && params.getDictionary().containsKey("Predictor")) { // Predictor predictor = Predictor.getPredictor(params); // if (predictor != null) { // outBytes = predictor.unpredict(outBytes); // } // } // // return outBytes; // } }