You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/02/20 07:31:05 UTC
svn commit: r1570086 [1/7] - in /pdfbox/trunk:
examples/src/main/java/org/apache/pdfbox/examples/pdmodel/
examples/src/main/java/org/apache/pdfbox/examples/util/
pdfbox/src/main/java/org/apache/pdfbox/cos/
pdfbox/src/main/java/org/apache/pdfbox/filter/...
Author: jahewson
Date: Thu Feb 20 06:31:01 2014
New Revision: 1570086
URL: http://svn.apache.org/r1570086
Log:
PDFBOX-1893: Refactor color spaces
Added:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/UnmodifiableCOSDictionary.java (with props)
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java
- copied, changed from r1563990, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/MissingImageReaderException.java (with props)
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDPostScriptXObject.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDXObject.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCIEBasedColorSpace.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceColorSpace.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceNProcess.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDJPXColorSpace.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSpecialColorSpace.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java
- copied, changed from r1568222, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectForm.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/package.html
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactory.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ImageFactory.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImage.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/TIFFInputStream.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/package.html
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingDeviceCMYKColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingDeviceGrayColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingDeviceRGBColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingDeviceCMYKColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingDeviceGrayColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingDeviceRGBColor.java
Removed:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/ColorSpaceCalRGB.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/ColorSpaceLab.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpaceFactory.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageParameters.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingCMYKColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingCalRGBColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingDeviceN.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingGrayColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingICCBasedColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingIndexed.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingLabColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingPattern.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingRGBColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingSeparation.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingCMYKColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingCalRGBColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingDeviceN.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingGrayColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingICCBasedColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingIndexed.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingLabColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingPattern.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingRGBColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingSeparation.java
pdfbox/trunk/pdfbox/src/main/resources/org/apache/pdfbox/resources/PDDeviceCMYK.properties
pdfbox/trunk/pdfbox/src/main/resources/org/apache/pdfbox/resources/icc/
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/color/
Modified:
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/PrintImageLocations.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/ContentStreamWriter.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunction.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType2.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType3.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType4.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDObjectReference.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureNode.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/markedcontent/PDMarkedContent.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/edit/PDPageContentStream.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDGraphicsState.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDShading.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalGray.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalRGB.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceNAttributes.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDGamma.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDLab.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDOutputIntent.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDPattern.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDTristimulus.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDPatternResources.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDShadingPatternResources.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPatternResources.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingResources.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingPaint.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingPaint.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingPaint.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceCharacteristicsDictionary.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateBuilder.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateCreator.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateStructure.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigBuilder.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSignDesigner.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/LayerUtility.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMarkedContentExtractor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFOperator.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/RenderUtil.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/Invoke.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingColorSpace.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingColor.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingColorSpace.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/BeginInlineImage.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/Invoke.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/SetLineDashPattern.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/StrokePath.java
pdfbox/trunk/pdfbox/src/main/resources/org/apache/pdfbox/resources/PageDrawer.properties
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/filter/TestFilters.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/TestPDFunctionType4.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/edit/TestPDPageContentStream.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestLayerUtility.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/annotation/AnnotationValidator.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/ContentStreamEngine.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/ContentStreamWrapper.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PDFAType3StreamParser.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/graphic/DeviceColorSpaceHelper.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/graphic/StandardColorSpaceHelper.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/GraphicObjectPageValidationProcess.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/ResourcesValidationProcess.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/SinglePageValidationProcess.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/xobject/XObjFormValidator.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/xobject/XObjImageValidator.java
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/ExtractImages.java
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java Thu Feb 20 06:31:01 2014
@@ -28,10 +28,9 @@ import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDCcitt;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
-
+import org.apache.pdfbox.pdmodel.graphics.image.CCITTFactory;
+import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory;
+import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
/**
* This is an example that creates a reads a document and adds an image to it..
@@ -43,7 +42,6 @@ import org.apache.pdfbox.pdmodel.graphic
*/
public class AddImageToPDF
{
-
/**
* Add an image to an existing PDF document.
*
@@ -66,14 +64,14 @@ public class AddImageToPDF
//we will add the image to the first page.
PDPage page = (PDPage)doc.getDocumentCatalog().getAllPages().get( 0 );
- PDXObjectImage ximage = null;
+ PDImageXObject ximage;
if( image.toLowerCase().endsWith( ".jpg" ) )
{
- ximage = new PDJpeg(doc, new FileInputStream( image ) );
+ ximage = JPEGFactory.createFromStream(doc, new FileInputStream(image));
}
else if (image.toLowerCase().endsWith(".tif") || image.toLowerCase().endsWith(".tiff"))
{
- ximage = new PDCcitt(doc, new RandomAccessFile(new File(image),"r"));
+ ximage = CCITTFactory.createFromRandomAccess(doc, new RandomAccessFile(new File(image),"r"));
}
else
{
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java Thu Feb 20 06:31:01 2014
@@ -32,8 +32,8 @@ import org.apache.pdfbox.pdmodel.font.PD
import org.apache.pdfbox.pdmodel.font.PDFontDescriptorDictionary;
import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObject;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectForm;
+import org.apache.pdfbox.pdmodel.graphics.PDXObject;
+import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
/**
* This will extract all true type-fonts of a pdf.
@@ -204,9 +204,9 @@ public class ExtractTTFFonts
{
String key = xobjectIter.next();
PDXObject xobject = xobjects.get(key);
- if (xobject instanceof PDXObjectForm)
+ if (xobject instanceof PDFormXObject)
{
- PDXObjectForm xObjectForm = (PDXObjectForm) xobject;
+ PDFormXObject xObjectForm = (PDFormXObject) xobject;
PDResources formResources = xObjectForm.getResources();
processResources(formResources, prefix, addKey);
}
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java Thu Feb 20 06:31:01 2014
@@ -28,10 +28,9 @@ import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDCcitt;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
-
+import org.apache.pdfbox.pdmodel.graphics.image.CCITTFactory;
+import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory;
+import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
/**
* This is an example that creates a simple document.
@@ -43,7 +42,6 @@ import org.apache.pdfbox.pdmodel.graphic
*/
public class ImageToPDF
{
-
/**
* create the second sample document from the PDF file format specification.
*
@@ -64,14 +62,14 @@ public class ImageToPDF
PDPage page = new PDPage();
doc.addPage( page );
- PDXObjectImage ximage = null;
+ PDImageXObject pdImage;
if( image.toLowerCase().endsWith( ".jpg" ) )
{
- ximage = new PDJpeg(doc, new FileInputStream( image ) );
+ pdImage = JPEGFactory.createFromStream(doc, new FileInputStream(image));
}
else if (image.toLowerCase().endsWith(".tif") || image.toLowerCase().endsWith(".tiff"))
{
- ximage = new PDCcitt(doc, new RandomAccessFile(new File(image),"r"));
+ pdImage = CCITTFactory.createFromRandomAccess(doc, new RandomAccessFile(new File(image),"r"));
}
else
{
@@ -81,7 +79,7 @@ public class ImageToPDF
}
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
- contentStream.drawImage( ximage, 20, 20 );
+ contentStream.drawImage( pdImage, 20, 20 );
contentStream.close();
doc.save( file );
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java Thu Feb 20 06:31:01 2014
@@ -23,9 +23,9 @@ import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.common.PDStream;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectForm;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
+import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
+import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory;
+import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationRubberStamp;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream;
@@ -91,7 +91,7 @@ public class RubberStampWithImage
// Create a PDXObjectImage with the given jpg
FileInputStream fin = new FileInputStream( args[2] );
- PDJpeg mypic = new PDJpeg(document,fin);
+ PDImageXObject mypic = JPEGFactory.createFromStream(document, fin);
//Define and set the target rectangle
PDRectangle myrect = new PDRectangle();
@@ -100,10 +100,10 @@ public class RubberStampWithImage
myrect.setLowerLeftX(250);
myrect.setLowerLeftY(550);
- // Create a PDXObjectForm
+ // Create a PDFormXObject
PDStream formstream = new PDStream(document);
OutputStream os = formstream.createOutputStream();
- PDXObjectForm form = new PDXObjectForm(formstream);
+ PDFormXObject form = new PDFormXObject(formstream);
form.setResources(new PDResources());
form.setBBox(myrect);
form.setFormType(1);
@@ -138,7 +138,7 @@ public class RubberStampWithImage
}
}
- private void drawXObject( PDXObjectImage xobject, PDResources resources, OutputStream os,
+ private void drawXObject( PDImageXObject xobject, PDResources resources, OutputStream os,
float x, float y, float width, float height ) throws IOException
{
// This is similar to PDPageContentStream.drawXObject()
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/PrintImageLocations.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/PrintImageLocations.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/PrintImageLocations.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/PrintImageLocations.java Thu Feb 20 06:31:01 2014
@@ -24,9 +24,9 @@ import org.apache.pdfbox.pdmodel.PDDocum
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.PDGraphicsState;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObject;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectForm;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
+import org.apache.pdfbox.pdmodel.graphics.PDXObject;
+import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
+import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.util.Matrix;
import org.apache.pdfbox.util.PDFOperator;
import org.apache.pdfbox.util.PDFStreamEngine;
@@ -128,9 +128,9 @@ public class PrintImageLocations extends
COSName objectName = (COSName)arguments.get( 0 );
Map<String, PDXObject> xobjects = getResources().getXObjects();
PDXObject xobject = (PDXObject)xobjects.get( objectName.getName() );
- if( xobject instanceof PDXObjectImage )
+ if( xobject instanceof PDImageXObject)
{
- PDXObjectImage image = (PDXObjectImage)xobject;
+ PDImageXObject image = (PDImageXObject)xobject;
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
System.out.println("*******************************************************************");
@@ -159,12 +159,12 @@ public class PrintImageLocations extends
System.out.println("size = " + imageXScale + "mm, " + imageYScale + "mm");
System.out.println();
}
- else if(xobject instanceof PDXObjectForm)
+ else if(xobject instanceof PDFormXObject)
{
// save the graphics state
getGraphicsStack().push( (PDGraphicsState)getGraphicsState().clone() );
- PDXObjectForm form = (PDXObjectForm)xobject;
+ PDFormXObject form = (PDFormXObject)xobject;
COSStream invoke = (COSStream)form.getCOSObject();
PDResources pdResources = form.getResources();
// if there is an optional form matrix, we have to map the form space to the user space
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java Thu Feb 20 06:31:01 2014
@@ -43,8 +43,7 @@ public class COSDictionary extends COSBa
* The name-value pairs of this dictionary. The pairs are kept in the
* order they were added to the dictionary.
*/
- protected final Map<COSName, COSBase> items =
- new LinkedHashMap<COSName, COSBase>();
+ protected Map<COSName, COSBase> items = new LinkedHashMap<COSName, COSBase>();
/**
* Constructor.
@@ -1434,6 +1433,15 @@ public class COSDictionary extends COSBa
return retval;
}
+ /**
+ * Returns an unmodifiable view of this dictionary.
+ * @return
+ */
+ public COSDictionary asUnmodifiableDictionary()
+ {
+ return new UnmodifiableCOSDictionary(this);
+ }
+
/**
* {@inheritDoc}
*/
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java Thu Feb 20 06:31:01 2014
@@ -292,6 +292,10 @@ public final class COSName extends COSBa
/**
* A common COSName value.
*/
+ public static final COSName PROCESS = new COSName("Process");
+ /**
+ * A common COSName value.
+ */
public static final COSName COLORS = new COSName("Colors");
/**
* A common COSName value.
@@ -312,6 +316,10 @@ public final class COSName extends COSBa
/**
* A common COSName value.
*/
+ public static final COSName COMPONENTS = new COSName("Components");
+ /**
+ * A common COSName value.
+ */
public static final COSName COORDS = new COSName("Coords");
/**
* A common COSName value.
@@ -328,6 +336,10 @@ public final class COSName extends COSBa
/**
* A common COSName value.
*/
+ public static final COSName CMYK = new COSName("CMYK");
+ /**
+ * A common COSName value.
+ */
public static final COSName CREATION_DATE = new COSName("CreationDate");
/**
* A common COSName value.
@@ -710,13 +722,18 @@ public final class COSName extends COSBa
/**
* A common COSName value.
*/
+ public static final COSName G = new COSName("G");
+ /**
+ * A common COSName value.
+ */
public static final COSName GAMMA = new COSName("Gamma");
-
/**
* A common COSName value.
*/
public static final COSName GTS_PDFA1 = new COSName("GTS_PDFA1");
-
+ /**
+ * A common COSName value.
+ */
public static final COSName H = new COSName("H");
/**
* A common COSName value.
@@ -766,6 +783,12 @@ public final class COSName extends COSBa
* A common COSName value.
*/
public static final COSName IMAGE = new COSName("Image");
+
+ /**
+ * A common COSName value.
+ */
+ public static final COSName IM = new COSName("IM");
+
/**
* A common COSName value.
*/
@@ -968,12 +991,10 @@ public final class COSName extends COSBa
* A common COSName value.
*/
public static final COSName NAME = new COSName("Name");
-
/**
* A common COSName value.
*/
public static final COSName NAMES = new COSName("Names");
-
/**
* A common COSName value.
*/
@@ -1148,6 +1169,10 @@ public final class COSName extends COSBa
/**
* A common COSName value.
*/
+ public static final COSName PS = new COSName("PS");
+ /**
+ * A common COSName value.
+ */
public static final COSName PREDICTOR = new COSName("Predictor");
/**
* A common COSName value.
@@ -1219,7 +1244,6 @@ public final class COSName extends COSBa
* A common COSName value.
*/
public static final COSName REGISTRY_NAME = new COSName("RegistryName");
-
/**
* A common COSName value.
*/
@@ -1227,6 +1251,10 @@ public final class COSName extends COSBa
/**
* A common COSName value.
*/
+ public static final COSName RGB = new COSName("RGB");
+ /**
+ * A common COSName value.
+ */
public static final COSName RI = new COSName("RI");
/**
* A common COSName value.
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java Thu Feb 20 06:31:01 2014
@@ -175,7 +175,7 @@ public class COSStream extends COSDictio
*
* @throws IOException when encoding/decoding causes an exception
*/
- public InputStream getUnfilteredStream() throws IOException
+ public InputStream getUnfilteredStream() throws IOException
{
InputStream retval = null;
if( unFilteredStream == null )
@@ -305,7 +305,8 @@ public class COSStream extends COSDictio
new RandomAccessFileInputStream( file, position, length ), BUFFER_SIZE );
IOUtils.closeQuietly(unFilteredStream);
unFilteredStream = new RandomAccessFileOutputStream( file );
- filter.decode( input, unFilteredStream, this, filterIndex );
+ filter.decode( input, unFilteredStream, this.asUnmodifiableDictionary(),
+ filterIndex );
done = true;
}
catch( IOException io )
@@ -333,7 +334,8 @@ public class COSStream extends COSDictio
new RandomAccessFileInputStream( file, position, length ), BUFFER_SIZE );
IOUtils.closeQuietly(unFilteredStream);
unFilteredStream = new RandomAccessFileOutputStream( file );
- filter.decode( input, unFilteredStream, this, filterIndex );
+ filter.decode( input, unFilteredStream, this.asUnmodifiableDictionary(),
+ filterIndex );
done = true;
}
catch( IOException io )
Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/UnmodifiableCOSDictionary.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/UnmodifiableCOSDictionary.java?rev=1570086&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/UnmodifiableCOSDictionary.java (added)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/UnmodifiableCOSDictionary.java Thu Feb 20 06:31:01 2014
@@ -0,0 +1,262 @@
+/*
+ * 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.cos;
+
+import java.util.Calendar;
+
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
+
+/**
+ * An unmodifiable COSDictionary.
+ *
+ * @author John Hewson
+ */
+final class UnmodifiableCOSDictionary extends COSDictionary
+{
+ /**
+ * @inheritDoc
+ */
+ public UnmodifiableCOSDictionary(COSDictionary dict)
+ {
+ super();
+ items = dict.items;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void clear()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setItem(COSName key, COSBase value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setItem(COSName key, COSObjectable value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setItem(String key, COSObjectable value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setBoolean(String key, boolean value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setBoolean(COSName key, boolean value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setItem(String key, COSBase value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setName(String key, String value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setName(COSName key, String value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setDate(String key, Calendar date)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setDate(COSName key, Calendar date)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setEmbeddedDate(String embedded, String key, Calendar date)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setEmbeddedDate(String embedded, COSName key, Calendar date)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setString(String key, String value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setString(COSName key, String value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setEmbeddedString(String embedded, String key, String value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setEmbeddedString(String embedded, COSName key, String value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setInt(String key, int value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setInt(COSName key, int value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setLong(String key, long value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setLong(COSName key, long value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setEmbeddedInt(String embeddedDictionary, String key, int value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setEmbeddedInt(String embeddedDictionary, COSName key, int value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setFloat(String key, float value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void setFloat(COSName key, float value)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void removeItem(COSName key)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void addAll(COSDictionary dic)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void mergeInto(COSDictionary dic)
+ {
+ throw new UnsupportedOperationException();
+ }
+}
Propchange: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/UnmodifiableCOSDictionary.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java (from r1563990, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java?p2=pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java&p1=pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java&r1=1563990&r2=1570086&rev=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java Thu Feb 20 06:31:01 2014
@@ -16,6 +16,7 @@
*/
package org.apache.pdfbox.filter;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -31,34 +32,31 @@ import org.apache.pdfbox.io.ccitt.CCITTF
import org.apache.pdfbox.io.ccitt.FillOrderChangeInputStream;
/**
- * This is a filter for the CCITTFax Decoder.
+ * Decodes image data that has been encoded using either Group 3 or Group 4
+ * CCITT facsimile (fax) encoding.
*
- * @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
+ * @author Ben Litchfield
* @author Marcel Kammer
* @author Paul King
- * @version $Revision: 1.13 $
*/
-public class CCITTFaxDecodeFilter implements Filter
+public final class CCITTFaxFilter implements Filter
{
- /**
- * Log instance.
- */
- private static final Log log = LogFactory.getLog(CCITTFaxDecodeFilter.class);
+ private static final Log log = LogFactory.getLog(CCITTFaxFilter.class);
/**
* Constructor.
*/
- public CCITTFaxDecodeFilter()
+ public CCITTFaxFilter()
{
}
/**
* {@inheritDoc}
*/
- public void decode(InputStream compressedData, OutputStream result, COSDictionary options, int filterIndex)
- throws IOException
+ public void decode(InputStream compressedData, OutputStream result, COSDictionary options,
+ int filterIndex) throws IOException
{
-
+ // get decode parameters
COSBase decodeP = options.getDictionaryObject(COSName.DECODE_PARMS, COSName.DP);
COSDictionary decodeParms = null;
if (decodeP instanceof COSDictionary)
@@ -69,6 +67,8 @@ public class CCITTFaxDecodeFilter implem
{
decodeParms = (COSDictionary)((COSArray)decodeP).getObject(filterIndex);
}
+
+ // get compressed data
int length = options.getInt(COSName.LENGTH, -1);
byte[] compressed = null;
if (length != -1)
@@ -88,6 +88,8 @@ public class CCITTFaxDecodeFilter implem
// the streams inline images are stored in are mostly small ones
compressed = IOUtils.toByteArray(compressedData);
}
+
+ // parse dimensions
int cols = decodeParms.getInt(COSName.COLUMNS, 1728);
int rows = decodeParms.getInt(COSName.ROWS, 0);
int height = options.getInt(COSName.HEIGHT, COSName.H, 0);
@@ -101,38 +103,60 @@ public class CCITTFaxDecodeFilter implem
// at least one of the values has to have a valid value
rows = Math.max(rows, height);
}
+
+ // decompress data
int k = decodeParms.getInt(COSName.K, 0);
int arraySize = (cols + 7) / 8 * rows;
TIFFFaxDecoder faxDecoder = new TIFFFaxDecoder(1, cols, rows);
// TODO possible options??
long tiffOptions = 0;
+ byte[] decompressed = null;
if (k == 0)
{
InputStream in = new CCITTFaxG31DDecodeInputStream(
- new java.io.ByteArrayInputStream(compressed), cols);
+ new ByteArrayInputStream(compressed), cols);
in = new FillOrderChangeInputStream(in); //Decorate to change fill order
- IOUtils.copy(in, result);
+ decompressed = IOUtils.toByteArray(in);
in.close();
}
else if (k > 0)
{
- byte[] decompressed = new byte[arraySize];
+ decompressed = new byte[arraySize];
faxDecoder.decode2D(decompressed, compressed, 0, rows, tiffOptions);
- result.write(decompressed);
}
else if (k < 0)
{
- byte[] decompressed = new byte[arraySize];
+ decompressed = new byte[arraySize];
faxDecoder.decodeT6(decompressed, compressed, 0, rows, tiffOptions);
- result.write(decompressed);
+ }
+
+ // invert bitmap
+ boolean blackIsOne = decodeParms.getBoolean(COSName.BLACK_IS_1, false);
+ if (!blackIsOne)
+ {
+ // Inverting the bitmap
+ // Note the previous approach with starting from an IndexColorModel didn't work
+ // reliably. In some cases the image wouldn't be painted for some reason.
+ // So a safe but slower approach was taken.
+ invertBitmap(decompressed);
+ }
+
+ result.write(decompressed);
+ }
+
+ private void invertBitmap(byte[] bufferData)
+ {
+ for (int i = 0, c = bufferData.length; i < c; i++)
+ {
+ bufferData[i] = (byte) (~bufferData[i] & 0xFF);
}
}
/**
* {@inheritDoc}
*/
- public void encode(InputStream rawData, OutputStream result, COSDictionary options, int filterIndex )
- throws IOException
+ public void encode(InputStream rawData, OutputStream result, COSDictionary options,
+ int filterIndex) throws IOException
{
log.warn("CCITTFaxDecode.encode is not implemented yet, skipping this stream.");
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java Thu Feb 20 06:31:01 2014
@@ -16,43 +16,156 @@
*/
package org.apache.pdfbox.filter;
+import java.awt.image.DataBufferByte;
+import java.awt.image.Raster;
+import java.awt.image.WritableRaster;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.Iterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.pdfbox.cos.COSDictionary;
+import org.w3c.dom.Element;
+
+import javax.imageio.IIOException;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageReader;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.stream.ImageInputStream;
/**
- * This is the used for the DCTDecode filter.
+ * Decompresses data encoded using a DCT (discrete cosine transform)
+ * technique based on the JPEG standard.
+ *
+ * This filter is called {@code DCTDecode} in the PDF Reference.
*
- * @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
- * @version $Revision: 1.10 $
+ * @author John Hewson
*/
-public class DCTFilter implements Filter
+public final class DCTFilter implements Filter
{
+ private static final Log LOG = LogFactory.getLog(DCTFilter.class);
+
+ public void decode(InputStream input, OutputStream output,
+ COSDictionary options, int filterIndex) throws IOException
+ {
+ // find suitable image reader
+ Iterator readers = ImageIO.getImageReadersByFormatName("JPEG");
+ ImageReader reader = null;
+ while(readers.hasNext()) {
+ reader = (ImageReader)readers.next();
+ if(reader.canReadRaster()) {
+ break;
+ }
+ }
+
+ if (reader == null)
+ {
+ throw new MissingImageReaderException("Cannot read JPEG image: " +
+ "a suitable JAI I/O image filter is not installed");
+ }
+
+ ImageInputStream iis = ImageIO.createImageInputStream(input);
+ reader.setInput(iis);
+ Raster raster = reader.readRaster(0, null);
+
+ // special handling for 4-component images
+ if (raster.getNumBands() == 4)
+ {
+ // get APP14 marker
+ Integer transform;
+ try
+ {
+ transform = getAdobeTransform(reader.getImageMetadata(0));
+ }
+ catch (IIOException e)
+ {
+ // catches the error "Inconsistent metadata read from stream"
+ // which seems to be present indicate a YCCK image, but who knows?
+ LOG.warn("Inconsistent metadata read from JPEG stream");
+ transform = 2; // YCCK
+ }
+ int colorTransform = transform != null ? transform : 0;
+
+ // 0 = Unknown (RGB or CMYK), 1 = YCbCr, 2 = YCCK
+ switch (colorTransform)
+ {
+ case 0: break; // already CMYK
+ case 1: LOG.warn("YCbCr JPEGs not implemented"); break; // TODO YCbCr
+ case 2: raster = fromYCCKtoCMYK(raster); break;
+ }
+ }
+
+ DataBufferByte dataBuffer = (DataBufferByte)raster.getDataBuffer();
+ output.write(dataBuffer.getData());
+ }
+
+ public void encode(InputStream rawData, OutputStream result,
+ COSDictionary options, int filterIndex) throws IOException
+ {
+ LOG.warn("DCTFilter#encode is not implemented yet, skipping this stream.");
+ }
- /**
- * Log instance.
- */
- private static final Log log = LogFactory.getLog(DCTFilter.class);
-
- /**
- * {@inheritDoc}
- */
- public void decode( InputStream compressedData, OutputStream result, COSDictionary options, int filterIndex )
- throws IOException
+ // reads the APP14 Adobe transform tag
+ private Integer getAdobeTransform(IIOMetadata metadata)
{
- log.warn( "DCTFilter.decode is not implemented yet, skipping this stream." );
+ Element tree = (Element)metadata.getAsTree("javax_imageio_jpeg_image_1.0");
+ Element markerSequence = (Element)tree.getElementsByTagName("markerSequence").item(0);
+
+ if (markerSequence.getElementsByTagName("app14Adobe") != null)
+ {
+ Element adobe = (Element)markerSequence.getElementsByTagName("app14Adobe").item(0);
+ return Integer.parseInt(adobe.getAttribute("transform"));
+ }
+ return 0; // Unknown
+ }
+
+ // converts YCCK image to CMYK. YCCK is an equivalent encoding for
+ // CMYK data, so no color management code is needed here, nor does the
+ // PDF color space have to be consulted
+ private WritableRaster fromYCCKtoCMYK(Raster raster) throws IOException
+ {
+ WritableRaster writableRaster = raster.createCompatibleWritableRaster();
+ writableRaster.setRect(raster);
+
+ int[] value = new int[4];
+ for (int y = 0, height = raster.getHeight(); y < height; y++)
+ {
+ for (int x = 0, width = raster.getWidth(); x < width; x++)
+ {
+ raster.getPixel(x, y, value);
+
+ // 4-channels 0..255
+ float Y = value[0];
+ float Cb = value[1];
+ float Cr = value[2];
+ float K = value[3];
+
+ // YCCK to RGB, see http://software.intel.com/en-us/node/442744
+ int r = clamp(Y + 1.402f * Cr - 179.456f);
+ int g = clamp(Y - 0.34414f * Cb - 0.71414f * Cr + 135.45984f);
+ int b = clamp(Y + 1.772f * Cb - 226.816f);
+
+ // naive RGB to CMYK
+ int cyan = 255 - r;
+ int magenta = 255 - g;
+ int yellow = 255 - b;
+
+ // update raster in-place
+ value[0] = cyan;
+ value[1] = magenta;
+ value[2] = yellow;
+ value[3] = (int)K;
+ writableRaster.setPixel(x, y, value);
+ }
+ }
+ return writableRaster;
}
- /**
- * {@inheritDoc}
- */
- public void encode( InputStream rawData, OutputStream result, COSDictionary options, int filterIndex )
- throws IOException
+ // clamps value to 0-255 range
+ private int clamp(float value)
{
- log.warn( "DCTFilter.encode is not implemented yet, skipping this stream." );
+ return (int)((value < 0) ? 0 : ((value > 255) ? 255 : value));
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java Thu Feb 20 06:31:01 2014
@@ -41,7 +41,7 @@ public class FilterManager
{
Filter flateFilter = new FlateFilter();
Filter dctFilter = new DCTFilter();
- Filter ccittFaxFilter = new CCITTFaxDecodeFilter();
+ Filter ccittFaxFilter = new CCITTFaxFilter();
Filter lzwFilter = new LZWFilter();
Filter asciiHexFilter = new ASCIIHexFilter();
Filter ascii85Filter = new ASCII85Filter();
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java Thu Feb 20 06:31:01 2014
@@ -28,7 +28,6 @@ import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
-import javax.imageio.stream.ImageInputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -38,87 +37,78 @@ import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSStream;
/**
- * Modeled on the JBIG2Decode filter.
+ * Decompresses data encoded using the JBIG2 standard, reproducing the original
+ * monochrome (1 bit per pixel) image data (or an approximation of that data).
*
- * thanks to Timo Boehme <ti...@ontochem.com>
+ * Requires a JBIG2 plugin for Java Image I/O to be installed. A known working
+ * plug-in is <a href="http://code.google.com/p/jbig2-imageio/">jbig2-imageio</a>
+ * which is available under the GPL v3 license.
+ *
+ * @author Timo Boehme
*/
-
public class JBIG2Filter implements Filter
{
-
- /** Log instance. */
private static final Log LOG = LogFactory.getLog(JBIG2Filter.class);
/**
* Decode JBIG2 data using Java ImageIO library.
*
* {@inheritDoc}
- *
*/
@Override
- public void decode(InputStream compressedData, OutputStream result, COSDictionary options, int filterIndex)
- throws IOException
+ public void decode(InputStream compressedData, OutputStream result, COSDictionary options,
+ int filterIndex) throws IOException
{
- /**
- * A working JBIG2 ImageIO plugin is needed to decode JBIG2 encoded streams.
- * The following is known to be working. It can't be bundled with PDFBox because of an incompatible license.
- * http://code.google.com/p/jbig2-imageio/
- */
- Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("JBIG2");
- if (!readers.hasNext())
+ COSInteger bits = (COSInteger) options.getDictionaryObject(COSName.BITS_PER_COMPONENT);
+ COSDictionary params = (COSDictionary) options.getDictionaryObject(COSName.DECODE_PARMS);
+
+ COSStream globals = null;
+ if (params != null)
{
- LOG.error("Can't find an ImageIO plugin to decode the JBIG2 encoded datastream.");
- return;
+ globals = (COSStream) params.getDictionaryObject(COSName.JBIG2_GLOBALS);
}
- ImageReader reader = readers.next();
- COSDictionary decodeP = (COSDictionary) options.getDictionaryObject(COSName.DECODE_PARMS);
- COSInteger bits = (COSInteger) options.getDictionaryObject(COSName.BITS_PER_COMPONENT);
- COSStream st = null;
- if (decodeP != null)
+
+ BufferedImage image;
+ if (globals != null)
{
- st = (COSStream) decodeP.getDictionaryObject(COSName.JBIG2_GLOBALS);
+ image = ImageIO.read(new SequenceInputStream(globals.getFilteredStream(),
+ compressedData));
}
- if (st != null)
+ else
{
- compressedData = new SequenceInputStream(st.getFilteredStream(),
- compressedData);
- }
- ImageInputStream iis = ImageIO.createImageInputStream(compressedData);
- reader.setInput(iis);
- BufferedImage bi = reader.read(0);
- iis.close();
- reader.dispose();
- if (bi != null)
- {
- // I am assuming since JBIG2 is always black and white
- // depending on your renderer this might or might be needed
- if (bi.getColorModel().getPixelSize() != bits.intValue())
- {
- if (bits.intValue() != 1)
- {
- LOG.error("Do not know how to deal with JBIG2 with more than 1 bit");
- return;
- }
- BufferedImage packedImage = new BufferedImage(bi.getWidth(), bi.getHeight(),
- BufferedImage.TYPE_BYTE_BINARY);
- Graphics graphics = packedImage.getGraphics();
- graphics.drawImage(bi, 0, 0, null);
- graphics.dispose();
- bi = packedImage;
- }
- DataBuffer dBuf = bi.getData().getDataBuffer();
- if (dBuf.getDataType() == DataBuffer.TYPE_BYTE)
- {
- result.write(((DataBufferByte) dBuf).getData());
- }
- else
+ image = ImageIO.read(compressedData);
+ }
+
+ if (image == null)
+ {
+ throw new MissingImageReaderException("Cannot read JBIG2 image: " +
+ "jbig2-imageio is not installed");
+ }
+
+ // I am assuming since JBIG2 is always black and white
+ // depending on your renderer this might or might be needed
+ if (image.getColorModel().getPixelSize() != bits.intValue())
+ {
+ if (bits.intValue() != 1)
{
- LOG.error("Image data buffer not of type byte but type " + dBuf.getDataType());
+ LOG.warn("Attempting to handle a JBIG2 with more than 1-bit depth");
}
+ BufferedImage packedImage = new BufferedImage(image.getWidth(), image.getHeight(),
+ BufferedImage.TYPE_BYTE_BINARY);
+ Graphics graphics = packedImage.getGraphics();
+ graphics.drawImage(image, 0, 0, null);
+ graphics.dispose();
+ image = packedImage;
+ }
+
+ DataBuffer dBuf = image.getData().getDataBuffer();
+ if (dBuf.getDataType() == DataBuffer.TYPE_BYTE)
+ {
+ result.write(((DataBufferByte) dBuf).getData());
}
else
{
- LOG.error("Something went wrong when decoding the JBIG2 encoded datastream.");
+ throw new IOException("Unexpected image buffer type");
}
}
@@ -126,10 +116,9 @@ public class JBIG2Filter implements Filt
* {@inheritDoc}
*/
@Override
- public void encode(InputStream rawData, OutputStream result, COSDictionary options, int filterIndex)
- throws IOException
+ public void encode(InputStream rawData, OutputStream result, COSDictionary options,
+ int filterIndex) throws IOException
{
- System.err.println("Warning: JBIG2.encode is not implemented yet, skipping this stream.");
+ throw new UnsupportedOperationException("JBIG2 encoding not implemented");
}
-
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java Thu Feb 20 06:31:01 2014
@@ -17,73 +17,87 @@
package org.apache.pdfbox.filter;
import java.awt.image.BufferedImage;
-import java.awt.image.ColorModel;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
+import java.awt.image.WritableRaster;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.apache.pdfbox.cos.COSDictionary;
-import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpaceFactory;
+import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
+import org.apache.pdfbox.pdmodel.graphics.color.PDJPXColorSpace;
/**
- * This is used for the JPXDecode filter.
+ * Decompress data encoded using the wavelet-based JPEG 2000 standard,
+ * reproducing the original data.
*
- * @author <a href="mailto:timo.boehme@ontochem.com">Timo Boehme</a>
+ * Requires the Java Advanced Imaging (JAI) Image I/O Tools to be installed from java.net, see
+ * <a href="http://download.java.net/media/jai-imageio/builds/release/1.1/">jai-imageio</a>.
+ * Alternatively you can build from the source available in the
+ * <a href="https://java.net/projects/jai-imageio-core/">jai-imageio-core svn repo</a>.
*
+ * Mac OS X users should download the tar.gz file for linux and unpack it to obtain the
+ * required jar files. The .so file can be safely ignored.
+ *
+ * @author John Hewson
+ * @author Timo Boehme
*/
public class JPXFilter implements Filter
{
-
- /** Log instance. */
- private static final Log LOG = LogFactory.getLog(JPXFilter.class);
-
/**
- * Decode JPEG2000 data using Java ImageIO library.
+ * Decode JPEG 2000 data using Java ImageIO library.
*
* {@inheritDoc}
- *
*/
- public void decode(InputStream compressedData, OutputStream result, COSDictionary options, int filterIndex)
- throws IOException
+ public void decode(InputStream compressedData, OutputStream result, COSDictionary options,
+ int filterIndex) throws IOException
{
- BufferedImage bi = ImageIO.read(compressedData);
- if (bi != null)
+ BufferedImage image = readJPX(compressedData);
+
+ WritableRaster raster = image.getRaster();
+ if (raster.getDataBuffer().getDataType() != DataBuffer.TYPE_BYTE)
{
- DataBuffer dBuf = bi.getData().getDataBuffer();
- if (dBuf.getDataType() == DataBuffer.TYPE_BYTE)
- {
- // maybe some wrong/missing values have to be revised/added
- ColorModel colorModel = bi.getColorModel();
- if (options.getItem(COSName.COLORSPACE) == null)
- {
- options.setItem(COSName.COLORSPACE,
- PDColorSpaceFactory.createColorSpace(null, colorModel.getColorSpace()));
- }
- options.setInt(COSName.BITS_PER_COMPONENT, colorModel.getPixelSize() / colorModel.getNumComponents());
- options.setInt(COSName.HEIGHT, bi.getHeight());
- options.setInt(COSName.WIDTH, bi.getWidth());
- result.write(((DataBufferByte) dBuf).getData());
- }
- else
- {
- LOG.error("Image data buffer not of type byte but type " + dBuf.getDataType());
- }
+ throw new IOException("Not implemented: greater than 8-bit depth");
}
+ DataBufferByte buffer = (DataBufferByte)raster.getDataBuffer();
+ result.write(buffer.getData());
+ }
+
+ private static BufferedImage readJPX(InputStream input) throws IOException
+ {
+ // try to read using JAI Image I/O
+ ImageIO.setUseCache(false);
+ BufferedImage image = ImageIO.read(input);
+
+ if (image == null)
+ {
+ throw new MissingImageReaderException("Cannot read JPEG 2000 (JPX) image: " +
+ "Java Advanced Imaging (JAI) Image I/O Tools are not installed");
+ }
+
+ return image;
+ }
+
+ /**
+ * Returns the embedded color space from a JPX file.
+ * @param input The JPX input stream
+ */
+ // TODO this method is something of a hack, we'd rather be able to return info from decode(...)
+ public static PDColorSpace getColorSpace(InputStream input) throws IOException
+ {
+ BufferedImage image = readJPX(input);
+ return new PDJPXColorSpace(image.getColorModel().getColorSpace());
}
/**
* {@inheritDoc}
*/
- public void encode(InputStream rawData, OutputStream result, COSDictionary options, int filterIndex)
- throws IOException
+ public void encode(InputStream rawData, OutputStream result, COSDictionary options,
+ int filterIndex) throws IOException
{
- LOG.error("Warning: JPXFilter.encode is not implemented yet, skipping this stream.");
+ throw new UnsupportedOperationException("JPX encoding not implemented");
}
}
Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/MissingImageReaderException.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/MissingImageReaderException.java?rev=1570086&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/MissingImageReaderException.java (added)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/MissingImageReaderException.java Thu Feb 20 06:31:01 2014
@@ -0,0 +1,32 @@
+/*
+ * 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.filter;
+
+import java.io.IOException;
+
+/**
+ * Thrown when a required JAI ImageReader is missing.
+ *
+ * @author John Hewson
+ */
+public class MissingImageReaderException extends IOException
+{
+ public MissingImageReaderException(String message)
+ {
+ super(message);
+ }
+}
Propchange: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/MissingImageReaderException.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java Thu Feb 20 06:31:01 2014
@@ -34,7 +34,6 @@ import org.apache.pdfbox.cos.COSObject;
import org.apache.pdfbox.cos.COSStream;
import org.apache.pdfbox.io.RandomAccess;
import org.apache.pdfbox.pdmodel.common.PDStream;
-import org.apache.pdfbox.util.ImageParameters;
import org.apache.pdfbox.util.PDFOperator;
/**
@@ -360,7 +359,7 @@ public class PDFStreamParser extends Bas
{
PDFOperator beginImageOP = (PDFOperator)retval;
COSDictionary imageParams = new COSDictionary();
- beginImageOP.setImageParameters( new ImageParameters( imageParams ) );
+ beginImageOP.setImageParameters( imageParams );
Object nextToken = null;
while( (nextToken = parseNextToken()) instanceof COSName )
{
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java Thu Feb 20 06:31:01 2014
@@ -66,6 +66,8 @@ import org.apache.pdfbox.pdmodel.font.PD
import org.apache.pdfbox.pdmodel.font.PDType3Font;
import org.apache.pdfbox.pdmodel.graphics.PDGraphicsState;
import org.apache.pdfbox.pdmodel.graphics.PDShading;
+import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
+import org.apache.pdfbox.pdmodel.graphics.color.PDPattern;
import org.apache.pdfbox.pdmodel.graphics.shading.AxialShadingPaint;
import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingResources;
import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType2;
@@ -82,9 +84,9 @@ import org.apache.pdfbox.util.TextPositi
/**
* This will paint a page in a PDF document to a graphics context.
- *
+ *
* @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
- *
+ *
*/
public class PageDrawer extends PDFStreamEngine
{
@@ -183,12 +185,12 @@ public class PageDrawer extends PDFStrea
/**
* This will draw the page to the requested context.
- *
+ *
* @param g The graphics context to draw onto.
* @param stream The stream to be used.
* @param resources resources to be used when drawing the stream
* @param pageDimension The size of the page to draw.
- *
+ *
* @throws IOException If there is an IO error while drawing the page.
*/
public void drawStream(Graphics g, COSStream stream, PDResources resources, PDRectangle pageDimension)
@@ -240,25 +242,16 @@ public class PageDrawer extends PDFStrea
{
case PDTextState.RENDERING_MODE_FILL_TEXT:
composite = graphicsState.getNonStrokeJavaComposite();
- paint = graphicsState.getNonStrokingColor().getJavaColor();
- if (paint == null)
- {
- paint = graphicsState.getNonStrokingColor().getPaint(pageHeight);
- }
+ paint = getNonStrokingPaint();
break;
case PDTextState.RENDERING_MODE_STROKE_TEXT:
composite = graphicsState.getStrokeJavaComposite();
- paint = graphicsState.getStrokingColor().getJavaColor();
- if (paint == null)
- {
- paint = graphicsState.getStrokingColor().getPaint(pageHeight);
- }
+ paint = getStrokingPaint();
break;
case PDTextState.RENDERING_MODE_NEITHER_FILL_NOR_STROKE_TEXT:
// basic support for text rendering mode "invisible"
- Color nsc = graphicsState.getStrokingColor().getJavaColor();
- float[] components = { Color.black.getRed(), Color.black.getGreen(), Color.black.getBlue() };
- paint = new Color(nsc.getColorSpace(), components, 0f);
+ // TODO why are we drawing anything at all?
+ paint = Color.BLACK;
composite = graphicsState.getStrokeJavaComposite();
break;
default:
@@ -267,7 +260,7 @@ public class PageDrawer extends PDFStrea
+ " in PageDrawer.processTextPosition()." + " Using RenderingMode "
+ PDTextState.RENDERING_MODE_FILL_TEXT + " instead");
composite = graphicsState.getNonStrokeJavaComposite();
- paint = graphicsState.getNonStrokingColor().getJavaColor();
+ paint = getNonStrokingPaint();
}
graphics.setComposite(composite);
graphics.setPaint(paint);
@@ -378,8 +371,9 @@ public class PageDrawer extends PDFStrea
ctm.setFromAffineTransform(at);
getGraphicsState().setCurrentTransformationMatrix(ctm);
processSubStream(font.getType3Resources(), stream);
+
// restore the saved graphics state
- setGraphicsState((PDGraphicsState) getGraphicsStack().pop());
+ setGraphicsState(getGraphicsStack().pop());
}
else
{
@@ -431,7 +425,6 @@ public class PageDrawer extends PDFStrea
* @return the corresponding AWT font
* @throws IOException if something went wrong
*/
-
private Font createAWTFont(PDSimpleFont font) throws IOException
{
Font awtFont = null;
@@ -482,7 +475,7 @@ public class PageDrawer extends PDFStrea
{
// Fallback: we can't find anything, so we have to use the standard font
awtFont = FontManager.getStandardFont();
- LOG.info("Using font " + awtFont.getName() + " instead");
+ LOG.info("Using font " + awtFont.getName() + " instead of " + font.getBaseFont());
font.setIsFontSubstituted(true);
}
awtFonts.put(font, awtFont);
@@ -627,15 +620,11 @@ public class PageDrawer extends PDFStrea
public void fillPath(int windingRule) throws IOException
{
graphics.setComposite(getGraphicsState().getNonStrokeJavaComposite());
- Paint nonStrokingPaint = getGraphicsState().getNonStrokingColor().getJavaColor();
+ Paint nonStrokingPaint = getNonStrokingPaint();
if (nonStrokingPaint == null)
{
- nonStrokingPaint = getGraphicsState().getNonStrokingColor().getPaint(pageHeight);
- }
- if (nonStrokingPaint == null)
- {
- LOG.info("ColorSpace " + getGraphicsState().getNonStrokingColor().getColorSpace().getName()
- + " doesn't provide a non-stroking color, using white instead!");
+ LOG.info("ColorSpace " + getGraphicsState().getNonStrokingColorSpace().getName() +
+ " doesn't provide a non-stroking color, using white instead!");
nonStrokingPaint = Color.WHITE;
}
graphics.setPaint(nonStrokingPaint);
@@ -646,6 +635,20 @@ public class PageDrawer extends PDFStrea
getLinePath().reset();
}
+ // returns the stroking AWT Paint.
+ private Paint getStrokingPaint() throws IOException
+ {
+ return getGraphicsState().getStrokingColorSpace()
+ .toPaint(getGraphicsState().getStrokingColor(), pageHeight);
+ }
+
+ // returns the non-stroking AWT Paint.
+ private Paint getNonStrokingPaint() throws IOException
+ {
+ return getGraphicsState().getNonStrokingColorSpace()
+ .toPaint(getGraphicsState().getNonStrokingColor(), pageHeight);
+ }
+
/**
* This will set the current stroke.
*
@@ -676,15 +679,11 @@ public class PageDrawer extends PDFStrea
public void strokePath() throws IOException
{
graphics.setComposite(getGraphicsState().getStrokeJavaComposite());
- Paint strokingPaint = getGraphicsState().getStrokingColor().getJavaColor();
- if (strokingPaint == null)
- {
- strokingPaint = getGraphicsState().getStrokingColor().getPaint(pageHeight);
- }
+ Paint strokingPaint = getStrokingPaint();
if (strokingPaint == null)
{
- LOG.info("ColorSpace " + getGraphicsState().getStrokingColor().getColorSpace().getName()
- + " doesn't provide a stroking color, using white instead!");
+ LOG.info("ColorSpace " + getGraphicsState().getStrokingColorSpace().getName() +
+ " doesn't provide a stroking color, using white instead!");
strokingPaint = Color.WHITE;
}
graphics.setPaint(strokingPaint);
@@ -695,22 +694,10 @@ public class PageDrawer extends PDFStrea
path.reset();
}
- /**
- * Called when the color changed.
- *
- * @param bStroking true for the stroking color, false for the non-stroking color
- * @throws IOException if an I/O error occurs
- */
- @Deprecated
- public void colorChanged(boolean bStroking) throws IOException
- {
- // logger().info("changing " + (bStroking ? "" : "non") + "stroking color");
- }
-
// This code generalizes the code Jim Lynch wrote for AppendRectangleToPath
/**
* use the current transformation matrix to transform a single point.
- *
+ *
* @param x x-coordinate of the point to be transform
* @param y y-coordinate of the point to be transform
* @return the transformed coordinates as Point2D.Double
@@ -798,24 +785,11 @@ public class PageDrawer extends PDFStrea
/**
* Fill with Shading. Called by SHFill operator.
*
- * @param ShadingName The name of the Shading Dictionary to use for this fill instruction.
- *
- * @throws IOException If there is an IO error while shade-filling the path/clipping area.
- *
- * @deprecated use {@link #shFill(COSName)} instead.
- */
- public void SHFill(COSName ShadingName) throws IOException
- {
- shFill(ShadingName);
- }
-
- /**
- * Fill with Shading. Called by SHFill operator.
- *
* @param shadingName The name of the Shading Dictionary to use for this fill instruction.
*
* @throws IOException If there is an IO error while shade-filling the clipping area.
*/
+ // TODO would this now be better off using PDPattern?
public void shFill(COSName shadingName) throws IOException
{
PDShadingResources shading = getResources().getShadings().get(shadingName.getName());
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/ContentStreamWriter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/ContentStreamWriter.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/ContentStreamWriter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/ContentStreamWriter.java Thu Feb 20 06:31:01 2014
@@ -19,7 +19,6 @@ package org.apache.pdfbox.pdfwriter;
import java.io.IOException;
import java.io.OutputStream;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -32,7 +31,6 @@ import org.apache.pdfbox.cos.COSInteger;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSString;
-import org.apache.pdfbox.util.ImageParameters;
import org.apache.pdfbox.util.PDFOperator;
/**
@@ -141,8 +139,7 @@ public class ContentStreamWriter
if( op.getOperation().equals( "BI" ) )
{
output.write( "BI".getBytes("ISO-8859-1") );
- ImageParameters params = op.getImageParameters();
- COSDictionary dic = params.getDictionary();
+ COSDictionary dic = op.getImageParameters();
for( COSName key : dic.keySet() )
{
Object value = dic.getDictionaryObject( key );
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java Thu Feb 20 06:31:01 2014
@@ -32,11 +32,10 @@ import org.apache.pdfbox.pdmodel.font.PD
import org.apache.pdfbox.pdmodel.font.PDFontFactory;
import org.apache.pdfbox.pdmodel.graphics.PDExtendedGraphicsState;
import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
-import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpaceFactory;
import org.apache.pdfbox.pdmodel.graphics.pattern.PDPatternResources;
import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingResources;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObject;
-import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
+import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
+import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.markedcontent.PDPropertyList;
import org.apache.pdfbox.util.MapUtil;
@@ -44,7 +43,6 @@ import org.apache.pdfbox.util.MapUtil;
* This represents a set of resources available at the page/pages/stream level.
*
* @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
- * @author By BM
*
*/
public class PDResources implements COSObjectable
@@ -55,7 +53,7 @@ public class PDResources implements COSO
private Map<String, PDColorSpace> colorspaces = null;
private Map<String, PDXObject> xobjects = null;
private Map<PDXObject, String> xobjectMappings = null;
- private HashMap<String, PDXObjectImage> images = null;
+ private HashMap<String, PDImageXObject> images = null;
private Map<String, PDExtendedGraphicsState> graphicsStates = null;
private Map<String, PDPatternResources> patterns = null;
private Map<String, PDShadingResources> shadings = null;
@@ -232,21 +230,24 @@ public class PDResources implements COSO
// at least an empty map will be returned
// TODO we should return null instead of an empty map
xobjects = new HashMap<String, PDXObject>();
- COSDictionary xobjectsDictionary = (COSDictionary) resources.getDictionaryObject(COSName.XOBJECT);
- if (xobjectsDictionary == null)
+
+ COSDictionary dict = (COSDictionary) resources.getDictionaryObject(COSName.XOBJECT);
+
+ if (dict == null)
{
- xobjectsDictionary = new COSDictionary();
- resources.setItem(COSName.XOBJECT, xobjectsDictionary);
+ dict = new COSDictionary();
+ resources.setItem(COSName.XOBJECT, dict);
}
else
{
xobjects = new HashMap<String, PDXObject>();
- for (COSName objName : xobjectsDictionary.keySet())
+ for (COSName objName : dict.keySet())
{
PDXObject xobject = null;
try
{
- xobject = PDXObject.createXObject(xobjectsDictionary.getDictionaryObject(objName));
+ xobject = PDXObject.createXObject(dict.getDictionaryObject(objName),
+ objName.getName(), this);
}
catch (IOException exception)
{
@@ -266,24 +267,24 @@ public class PDResources implements COSO
/**
* This will get the map of images. An empty map will be returned if there are no underlying images. So far the keys
* are COSName of the image and the value is the corresponding PDXObjectImage.
- *
+ *
* @return The map of images.
* @throws IOException If there is an error writing the picture.
*
* @deprecated use {@link #getXObjects()} instead, as the images map isn't synchronized with the XObjects map.
*/
- public Map<String, PDXObjectImage> getImages() throws IOException
+ public Map<String, PDImageXObject> getImages() throws IOException
{
if (images == null)
{
Map<String, PDXObject> allXObjects = getXObjects();
- images = new HashMap<String, PDXObjectImage>();
+ images = new HashMap<String, PDImageXObject>();
for (Map.Entry<String, PDXObject> entry : allXObjects.entrySet())
{
PDXObject xobject = entry.getValue();
- if (xobject instanceof PDXObjectImage)
+ if (xobject instanceof PDImageXObject)
{
- images.put(entry.getKey(), (PDXObjectImage) xobject);
+ images.put(entry.getKey(), (PDImageXObject) xobject);
}
}
}
@@ -350,7 +351,7 @@ public class PDResources implements COSO
PDColorSpace colorspace = null;
try
{
- colorspace = PDColorSpaceFactory.createColorSpace(cs);
+ colorspace = PDColorSpace.create(cs, null, getPatterns());
}
catch (IOException exception)
{
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunction.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunction.java?rev=1570086&r1=1570085&r2=1570086&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunction.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunction.java Thu Feb 20 06:31:01 2014
@@ -248,23 +248,11 @@ public abstract class PDFunction impleme
getDictionary().setItem(COSName.DOMAIN, domainValues);
}
-
/**
- * Evaluates the function at the given input.
- * ReturnValue = f(input)
- *
- * @param input The COSArray of input values for the function.
- * In many cases will be an array of a single value, but not always.
- *
- * @return The of outputs the function returns based on those inputs.
- * In many cases will be an COSArray of a single value, but not always.
- *
- * @throws IOException an IOExcpetion is thrown if something went wrong processing the function.
- *
+ * @deprecated Replaced by {@link #eval(float[] input)}
*/
public COSArray eval(COSArray input) throws IOException
{
- // TODO should we mark this method as deprecated?
float[] outputValues = eval(input.toFloatArray());
COSArray array = new COSArray();
array.setFloatArray(outputValues);
@@ -371,4 +359,11 @@ public abstract class PDFunction impleme
return yRangeMin + ((x - xRangeMin) * (yRangeMax - yRangeMin)/(xRangeMax - xRangeMin));
}
+ /**
+ * {@inheritDoc}
+ */
+ public String toString()
+ {
+ return "FunctionType" + getFunctionType();
+ }
}