com.sun.pdfview.decode.CCITTFaxDecode Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pdf-renderer Show documentation
Show all versions of pdf-renderer Show documentation
PDF renderer implementation supporting the subset of PDF 1.4 specification.
The newest version!
package com.sun.pdfview.decode;
import java.io.IOException;
import java.nio.ByteBuffer;
import com.sun.pdfview.PDFObject;
public class CCITTFaxDecode {
protected static ByteBuffer decode(PDFObject dict, ByteBuffer buf,
PDFObject params) throws IOException {
byte[] bytes = new byte[buf.remaining()];
buf.get(bytes, 0, bytes.length);
return ByteBuffer.wrap(decode(dict, bytes));
}
protected static byte[] decode(PDFObject dict, byte[] source) throws IOException {
int width = 1728;
PDFObject widthDef = dict.getDictRef("Width");
if (widthDef == null) {
widthDef = dict.getDictRef("W");
}
if (widthDef != null) {
width = widthDef.getIntValue();
}
int height = 0;
PDFObject heightDef = dict.getDictRef("Height");
if (heightDef == null) {
heightDef = dict.getDictRef("H");
}
if (heightDef != null) {
height = heightDef.getIntValue();
}
//
int columns = getOptionFieldInt(dict, "Columns", width);
int rows = getOptionFieldInt(dict, "Rows", height);
int k = getOptionFieldInt(dict, "K", 0);
int size = rows * ((columns + 7) >> 3);
byte[] destination = new byte[size];
boolean align = getOptionFieldBoolean(dict, "EncodedByteAlign", false);
CCITTFaxDecoder decoder = new CCITTFaxDecoder(1, columns, rows);
decoder.setAlign(align);
if (k == 0) {
decoder.decodeT41D(destination, source, 0, rows);
} else if (k > 0) {
decoder.decodeT42D(destination, source, 0, rows);
} else if (k < 0) {
decoder.decodeT6(destination, source, 0, rows);
}
if (!getOptionFieldBoolean(dict, "BlackIs1", false)) {
for (int i = 0; i < destination.length; i++) {
// bitwise not
destination[i] = (byte) ~destination[i];
}
}
return destination;
}
public static int getOptionFieldInt(PDFObject dict, String name, int defaultValue) throws IOException {
PDFObject dictParams = dict.getDictRef("DecodeParms");
if (dictParams == null) {
return defaultValue;
}
PDFObject value = dictParams.getDictRef(name);
if (value == null) {
return defaultValue;
}
return value.getIntValue();
}
public static boolean getOptionFieldBoolean(PDFObject dict, String name, boolean defaultValue) throws IOException {
PDFObject dictParams = dict.getDictRef("DecodeParms");
if (dictParams == null) {
return defaultValue;
}
PDFObject value = dictParams.getDictRef(name);
if (value == null) {
return defaultValue;
}
return value.getBooleanValue();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy