Search in sources :

Example 1 with PdfNumber

use of com.itextpdf.kernel.pdf.PdfNumber in project i7j-pdfsweep by itext.

the class PdfCleanUpTool method parseDAParam.

private Map<String, List> parseDAParam(PdfString DA) throws IOException {
    Map<String, List> commandArguments = new HashMap<String, List>();
    PdfTokenizer tokeniser = new PdfTokenizer(new RandomAccessFileOrArray(new RandomAccessSourceFactory().createSource(DA.toUnicodeString().getBytes(StandardCharsets.UTF_8))));
    List currentArguments = new ArrayList();
    while (tokeniser.nextToken()) {
        if (tokeniser.getTokenType() == PdfTokenizer.TokenType.Other) {
            String key = tokeniser.getStringValue();
            if ("RG".equals(key) || "G".equals(key) || "K".equals(key)) {
                key = "StrokeColor";
            } else if ("rg".equals(key) || "g".equals(key) || "k".equals(key)) {
                key = "FillColor";
            }
            commandArguments.put(key, currentArguments);
            currentArguments = new ArrayList();
        } else {
            switch(tokeniser.getTokenType()) {
                case Number:
                    currentArguments.add(new PdfNumber(new Float(tokeniser.getStringValue())));
                    break;
                case Name:
                    currentArguments.add(new PdfName(tokeniser.getStringValue()));
                    break;
                default:
                    currentArguments.add(tokeniser.getStringValue());
            }
        }
    }
    return commandArguments;
}
Also used : PdfTokenizer(com.itextpdf.io.source.PdfTokenizer) RandomAccessFileOrArray(com.itextpdf.io.source.RandomAccessFileOrArray) PdfName(com.itextpdf.kernel.pdf.PdfName) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ArrayList(java.util.ArrayList) RandomAccessSourceFactory(com.itextpdf.io.source.RandomAccessSourceFactory) ArrayList(java.util.ArrayList) List(java.util.List) PdfNumber(com.itextpdf.kernel.pdf.PdfNumber) PdfString(com.itextpdf.kernel.pdf.PdfString)

Example 2 with PdfNumber

use of com.itextpdf.kernel.pdf.PdfNumber in project i7j-pdfsweep by itext.

the class CleanUpCsCompareUtilTest method imageReadExceptionTest.

@Test
@LogMessages(messages = @LogMessage(messageTemplate = CleanUpLogMessageConstant.CANNOT_OBTAIN_IMAGE_INFO_AFTER_FILTERING))
public void imageReadExceptionTest() {
    PdfStream stream1 = new PdfStream();
    stream1.put(PdfName.BitsPerComponent, new PdfNumber(8));
    stream1.put(PdfName.ColorSpace, PdfName.DeviceCMYK);
    PdfImageXObject image1 = new PdfImageXObject(stream1);
    stream1 = new PdfStream();
    stream1.put(PdfName.BitsPerComponent, new PdfNumber(8));
    stream1.put(PdfName.ColorSpace, PdfName.DeviceCMYK);
    PdfImageXObject image2 = new PdfImageXObject(stream1);
    Assert.assertFalse(CleanUpCsCompareUtil.isOriginalCsCompatible(image1, image2));
}
Also used : PdfImageXObject(com.itextpdf.kernel.pdf.xobject.PdfImageXObject) PdfNumber(com.itextpdf.kernel.pdf.PdfNumber) PdfStream(com.itextpdf.kernel.pdf.PdfStream) IntegrationTest(com.itextpdf.test.annotations.type.IntegrationTest) ExtendedITextTest(com.itextpdf.test.ExtendedITextTest) Test(org.junit.Test) LogMessages(com.itextpdf.test.annotations.LogMessages)

Example 3 with PdfNumber

use of com.itextpdf.kernel.pdf.PdfNumber in project i7j-pdfsweep by itext.

the class PdfCleanUpFilter method processImageDirectly.

/**
 * Filters image content using direct manipulation over PDF image samples stream. Implemented according to ISO 32000-2,
 * "8.9.3 Sample representation".
 *
 * @param image image XObject which will be filtered
 * @param imageAreasToBeCleaned list of rectangle areas for clean up with coordinates in (0,1)x(0,1) space
 * @return raw bytes of the PDF image samples stream which is already cleaned.
 */
private static byte[] processImageDirectly(PdfImageXObject image, List<Rectangle> imageAreasToBeCleaned) {
    int X = 0;
    int Y = 1;
    int W = 2;
    int H = 3;
    byte[] originalImageBytes = image.getPdfObject().getBytes();
    PdfNumber bpcVal = image.getPdfObject().getAsNumber(PdfName.BitsPerComponent);
    if (bpcVal == null) {
        throw new IllegalArgumentException("/BitsPerComponent entry is required for image dictionaries.");
    }
    int bpc = bpcVal.intValue();
    if (bpc != 1 && bpc != 2 && bpc != 4 && bpc != 8 && bpc != 16) {
        throw new IllegalArgumentException("/BitsPerComponent only allowed values are: 1, 2, 4, 8 and 16.");
    }
    double bytesInComponent = (double) bpc / 8;
    int firstComponentInByte = 0;
    if (bpc < 16) {
        for (int i = 0; i < bpc; ++i) {
            firstComponentInByte += (int) Math.pow(2, 7 - i);
        }
    }
    double width = image.getWidth();
    double height = image.getHeight();
    int rowPadding = 0;
    if ((width * bpc) % 8 > 0) {
        rowPadding = (int) (8 - (width * bpc) % 8);
    }
    for (Rectangle rect : imageAreasToBeCleaned) {
        int[] cleanImgRect = CleanUpHelperUtil.getImageRectToClean(rect, (int) width, (int) height);
        for (int j = cleanImgRect[Y]; j < cleanImgRect[Y] + cleanImgRect[H]; ++j) {
            for (int i = cleanImgRect[X]; i < cleanImgRect[X] + cleanImgRect[W]; ++i) {
                // based on assumption that numOfComponents always equals 1, because this method is only for monochrome and grayscale images
                double pixelPos = j * ((width * bpc + rowPadding) / 8) + i * bytesInComponent;
                int pixelByteInd = (int) pixelPos;
                byte byteWithSample = originalImageBytes[pixelByteInd];
                if (bpc == 16) {
                    originalImageBytes[pixelByteInd] = 0;
                    originalImageBytes[pixelByteInd + 1] = 0;
                } else {
                    int reset = ~(firstComponentInByte >> (int) ((pixelPos - pixelByteInd) * 8)) & 0xFF;
                    originalImageBytes[pixelByteInd] = (byte) (byteWithSample & reset);
                }
            }
        }
    }
    return originalImageBytes;
}
Also used : Rectangle(com.itextpdf.kernel.geom.Rectangle) PdfNumber(com.itextpdf.kernel.pdf.PdfNumber) Point(com.itextpdf.kernel.geom.Point)

Example 4 with PdfNumber

use of com.itextpdf.kernel.pdf.PdfNumber in project i7j-pdfsweep by itext.

the class PdfCleanUpProcessorUnitTest method areColorSpacesDifferentForPdfArraysWithDifferentSizeValuesTest.

@Test
public void areColorSpacesDifferentForPdfArraysWithDifferentSizeValuesTest() {
    PdfArray pdfFirstArray = createPdfArray(PdfName.Separation, new PdfNumber(1), new PdfBoolean(true));
    PdfArray pdfSecondArray = createPdfArray(PdfName.Separation, new PdfNumber(1));
    Assert.assertTrue(createAndCompareImages(pdfFirstArray, pdfSecondArray));
}
Also used : PdfArray(com.itextpdf.kernel.pdf.PdfArray) PdfNumber(com.itextpdf.kernel.pdf.PdfNumber) PdfBoolean(com.itextpdf.kernel.pdf.PdfBoolean) ExtendedITextTest(com.itextpdf.test.ExtendedITextTest) Test(org.junit.Test) UnitTest(com.itextpdf.test.annotations.type.UnitTest)

Example 5 with PdfNumber

use of com.itextpdf.kernel.pdf.PdfNumber in project i7j-pdfsweep by itext.

the class PdfCleanUpProcessorUnitTest method areColorSpacesDifferentForTheSamePdfArraysValuesTest.

@Test
public void areColorSpacesDifferentForTheSamePdfArraysValuesTest() {
    PdfArray pdfFirstArray = createPdfArray(PdfName.Separation, new PdfNumber(1), new PdfStream());
    Assert.assertFalse(createAndCompareImages(pdfFirstArray, pdfFirstArray));
}
Also used : PdfArray(com.itextpdf.kernel.pdf.PdfArray) PdfNumber(com.itextpdf.kernel.pdf.PdfNumber) PdfStream(com.itextpdf.kernel.pdf.PdfStream) ExtendedITextTest(com.itextpdf.test.ExtendedITextTest) Test(org.junit.Test) UnitTest(com.itextpdf.test.annotations.type.UnitTest)

Aggregations

PdfNumber (com.itextpdf.kernel.pdf.PdfNumber)12 ExtendedITextTest (com.itextpdf.test.ExtendedITextTest)7 Test (org.junit.Test)7 PdfArray (com.itextpdf.kernel.pdf.PdfArray)6 PdfStream (com.itextpdf.kernel.pdf.PdfStream)6 UnitTest (com.itextpdf.test.annotations.type.UnitTest)6 Point (com.itextpdf.kernel.geom.Point)2 Rectangle (com.itextpdf.kernel.geom.Rectangle)2 PdfBoolean (com.itextpdf.kernel.pdf.PdfBoolean)2 PdfImageXObject (com.itextpdf.kernel.pdf.xobject.PdfImageXObject)2 PdfTokenizer (com.itextpdf.io.source.PdfTokenizer)1 RandomAccessFileOrArray (com.itextpdf.io.source.RandomAccessFileOrArray)1 RandomAccessSourceFactory (com.itextpdf.io.source.RandomAccessSourceFactory)1 PdfName (com.itextpdf.kernel.pdf.PdfName)1 PdfNull (com.itextpdf.kernel.pdf.PdfNull)1 PdfString (com.itextpdf.kernel.pdf.PdfString)1 PdfTextArray (com.itextpdf.kernel.pdf.PdfTextArray)1 CanvasGraphicsState (com.itextpdf.kernel.pdf.canvas.CanvasGraphicsState)1 LogMessages (com.itextpdf.test.annotations.LogMessages)1 IntegrationTest (com.itextpdf.test.annotations.type.IntegrationTest)1