Search in sources :

Example 1 with PDTilingPattern

use of org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern in project pdfbox by apache.

the class RemoveAllText method processResources.

private static void processResources(PDResources resources) throws IOException {
    for (COSName name : resources.getXObjectNames()) {
        PDXObject xobject = resources.getXObject(name);
        if (xobject instanceof PDFormXObject) {
            PDFormXObject formXObject = (PDFormXObject) xobject;
            writeTokensToStream(formXObject.getContentStream(), createTokensWithoutText(formXObject));
            processResources(formXObject.getResources());
        }
    }
    for (COSName name : resources.getPatternNames()) {
        PDAbstractPattern pattern = resources.getPattern(name);
        if (pattern instanceof PDTilingPattern) {
            PDTilingPattern tilingPattern = (PDTilingPattern) pattern;
            writeTokensToStream(tilingPattern.getContentStream(), createTokensWithoutText(tilingPattern));
            processResources(tilingPattern.getResources());
        }
    }
}
Also used : PDAbstractPattern(org.apache.pdfbox.pdmodel.graphics.pattern.PDAbstractPattern) PDTilingPattern(org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern) COSName(org.apache.pdfbox.cos.COSName) PDFormXObject(org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject) PDXObject(org.apache.pdfbox.pdmodel.graphics.PDXObject)

Example 2 with PDTilingPattern

use of org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern in project pdfbox by apache.

the class CreatePatternsPDF method main.

public static void main(String[] args) throws IOException {
    try (PDDocument doc = new PDDocument()) {
        PDPage page = new PDPage();
        doc.addPage(page);
        page.setResources(new PDResources());
        // Colored pattern, i.e. the pattern content stream will set its own color(s)
        try (PDPageContentStream pcs = new PDPageContentStream(doc, page)) {
            // Colored pattern, i.e. the pattern content stream will set its own color(s)
            PDColorSpace patternCS1 = new PDPattern(null, PDDeviceRGB.INSTANCE);
            // Table 75 spec
            PDTilingPattern tilingPattern1 = new PDTilingPattern();
            tilingPattern1.setBBox(new PDRectangle(0, 0, 10, 10));
            tilingPattern1.setPaintType(PDTilingPattern.PAINT_COLORED);
            tilingPattern1.setTilingType(PDTilingPattern.TILING_CONSTANT_SPACING);
            tilingPattern1.setXStep(10);
            tilingPattern1.setYStep(10);
            COSName patternName1 = page.getResources().add(tilingPattern1);
            try (PDPatternContentStream cs1 = new PDPatternContentStream(tilingPattern1)) {
                // Set color, draw diagonal line + 2 more diagonals so that corners look good
                cs1.setStrokingColor(Color.red);
                cs1.moveTo(0, 0);
                cs1.lineTo(10, 10);
                cs1.moveTo(-1, 9);
                cs1.lineTo(1, 11);
                cs1.moveTo(9, -1);
                cs1.lineTo(11, 1);
                cs1.stroke();
            }
            PDColor patternColor1 = new PDColor(patternName1, patternCS1);
            pcs.addRect(50, 500, 200, 200);
            pcs.setNonStrokingColor(patternColor1);
            pcs.fill();
            // Uncolored pattern - the color is passed later
            PDTilingPattern tilingPattern2 = new PDTilingPattern();
            tilingPattern2.setBBox(new PDRectangle(0, 0, 10, 10));
            tilingPattern2.setPaintType(PDTilingPattern.PAINT_UNCOLORED);
            tilingPattern2.setTilingType(PDTilingPattern.TILING_NO_DISTORTION);
            tilingPattern2.setXStep(10);
            tilingPattern2.setYStep(10);
            COSName patternName2 = page.getResources().add(tilingPattern2);
            try (PDPatternContentStream cs2 = new PDPatternContentStream(tilingPattern2)) {
                // draw a cross
                cs2.moveTo(0, 5);
                cs2.lineTo(10, 5);
                cs2.moveTo(5, 0);
                cs2.lineTo(5, 10);
                cs2.stroke();
            }
            // Uncolored pattern colorspace needs to know the colorspace
            // for the color values that will be passed when painting the fill
            PDColorSpace patternCS2 = new PDPattern(null, PDDeviceRGB.INSTANCE);
            PDColor patternColor2green = new PDColor(new float[] { 0, 1, 0 }, patternName2, patternCS2);
            pcs.addRect(300, 500, 100, 100);
            pcs.setNonStrokingColor(patternColor2green);
            pcs.fill();
            // same pattern again but with different color + different pattern start position
            PDColor patternColor2blue = new PDColor(new float[] { 0, 0, 1 }, patternName2, patternCS2);
            pcs.addRect(455, 505, 100, 100);
            pcs.setNonStrokingColor(patternColor2blue);
            pcs.fill();
        }
        doc.save("patterns.pdf");
    }
}
Also used : PDTilingPattern(org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern) PDPage(org.apache.pdfbox.pdmodel.PDPage) COSName(org.apache.pdfbox.cos.COSName) PDDocument(org.apache.pdfbox.pdmodel.PDDocument) PDPatternContentStream(org.apache.pdfbox.pdmodel.PDPatternContentStream) PDPattern(org.apache.pdfbox.pdmodel.graphics.color.PDPattern) PDResources(org.apache.pdfbox.pdmodel.PDResources) PDPageContentStream(org.apache.pdfbox.pdmodel.PDPageContentStream) PDRectangle(org.apache.pdfbox.pdmodel.common.PDRectangle) PDColorSpace(org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace) PDColor(org.apache.pdfbox.pdmodel.graphics.color.PDColor)

Example 3 with PDTilingPattern

use of org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern in project pdfbox-graphics2d by rototor.

the class PdfBoxGraphics2DPaintApplier method applyTexturePaint.

private void applyTexturePaint(TexturePaint texturePaint, PaintApplierState state) throws IOException {
    Rectangle2D anchorRect = texturePaint.getAnchorRect();
    PDTilingPattern pattern = new PDTilingPattern();
    pattern.setPaintType(PDTilingPattern.PAINT_COLORED);
    pattern.setTilingType(PDTilingPattern.TILING_CONSTANT_SPACING_FASTER_TILING);
    pattern.setBBox(new PDRectangle((float) anchorRect.getX(), (float) anchorRect.getY(), (float) anchorRect.getWidth(), (float) anchorRect.getHeight()));
    pattern.setXStep((float) anchorRect.getWidth());
    pattern.setYStep((float) anchorRect.getHeight());
    AffineTransform patternTransform = new AffineTransform();
    patternTransform.translate(0, anchorRect.getHeight());
    patternTransform.scale(1f, -1f);
    pattern.setMatrix(patternTransform);
    PDAppearanceStream appearance = new PDAppearanceStream(state.document);
    appearance.setResources(pattern.getResources());
    appearance.setBBox(pattern.getBBox());
    PDPageContentStream imageContentStream = new PDPageContentStream(state.document, appearance, ((COSStream) pattern.getCOSObject()).createOutputStream());
    BufferedImage texturePaintImage = texturePaint.getImage();
    PDImageXObject imageXObject = state.imageEncoder.encodeImage(state.document, imageContentStream, texturePaintImage);
    float ratioW = (float) ((anchorRect.getWidth()) / texturePaintImage.getWidth());
    float ratioH = (float) ((anchorRect.getHeight()) / texturePaintImage.getHeight());
    float paintHeight = (texturePaintImage.getHeight()) * ratioH;
    imageContentStream.drawImage(imageXObject, (float) anchorRect.getX(), (float) (paintHeight + anchorRect.getY()), texturePaintImage.getWidth() * ratioW, -paintHeight);
    imageContentStream.close();
    PDColorSpace patternCS1 = new PDPattern(null, imageXObject.getColorSpace());
    COSName tilingPatternName = state.resources.add(pattern);
    PDColor patternColor = new PDColor(tilingPatternName, patternCS1);
    state.contentStream.setNonStrokingColor(patternColor);
    state.contentStream.setStrokingColor(patternColor);
}
Also used : PDAppearanceStream(org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream) Rectangle2D(java.awt.geom.Rectangle2D) BufferedImage(java.awt.image.BufferedImage) PDColor(org.apache.pdfbox.pdmodel.graphics.color.PDColor) PDImageXObject(org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject) PDTilingPattern(org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern) PDPattern(org.apache.pdfbox.pdmodel.graphics.color.PDPattern) AffineTransform(java.awt.geom.AffineTransform) PDRectangle(org.apache.pdfbox.pdmodel.common.PDRectangle) PDPageContentStream(org.apache.pdfbox.pdmodel.PDPageContentStream) PDColorSpace(org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)

Example 4 with PDTilingPattern

use of org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern in project pdfbox-graphics2d by rototor.

the class PdfBoxGraphics2DPaintApplier method applyPatternPaint.

/*
	 * Batik SVG Pattern Paint
	 */
private void applyPatternPaint(Paint paint, PaintApplierState state) throws IOException {
    Rectangle2D anchorRect = getPropertyValue(paint, "getPatternRect");
    AffineTransform paintPatternTransform = getPropertyValue(paint, "getPatternTransform");
    PDTilingPattern pattern = new PDTilingPattern();
    pattern.setPaintType(PDTilingPattern.PAINT_COLORED);
    pattern.setTilingType(PDTilingPattern.TILING_CONSTANT_SPACING_FASTER_TILING);
    pattern.setBBox(new PDRectangle((float) anchorRect.getX(), (float) anchorRect.getY(), (float) anchorRect.getWidth(), (float) anchorRect.getHeight()));
    pattern.setXStep((float) anchorRect.getWidth());
    pattern.setYStep((float) anchorRect.getHeight());
    AffineTransform patternTransform = new AffineTransform();
    if (paintPatternTransform != null) {
        paintPatternTransform = new AffineTransform(paintPatternTransform);
        paintPatternTransform.preConcatenate(state.tf);
        patternTransform.concatenate(paintPatternTransform);
    } else
        patternTransform.concatenate(state.tf);
    patternTransform.scale(1f, -1f);
    pattern.setMatrix(patternTransform);
    PDAppearanceStream appearance = new PDAppearanceStream(state.document);
    appearance.setResources(pattern.getResources());
    appearance.setBBox(pattern.getBBox());
    Object graphicsNode = getPropertyValue(paint, "getGraphicsNode");
    PdfBoxGraphics2D pdfBoxGraphics2D = new PdfBoxGraphics2D(state.document, pattern.getBBox(), state.env.getGraphics2D());
    try {
        Method paintMethod = graphicsNode.getClass().getMethod("paint", Graphics2D.class);
        paintMethod.invoke(graphicsNode, pdfBoxGraphics2D);
    } catch (Exception e) {
        System.err.println("PdfBoxGraphics2DPaintApplier error while drawing Batik PatternPaint");
        e.printStackTrace();
        return;
    }
    pdfBoxGraphics2D.dispose();
    PDFormXObject xFormObject = pdfBoxGraphics2D.getXFormObject();
    PDPageContentStream imageContentStream = new PDPageContentStream(state.document, appearance, ((COSStream) pattern.getCOSObject()).createOutputStream());
    imageContentStream.drawForm(xFormObject);
    imageContentStream.close();
    PDColorSpace patternCS1 = new PDPattern(null);
    COSName tilingPatternName = state.resources.add(pattern);
    PDColor patternColor = new PDColor(tilingPatternName, patternCS1);
    state.contentStream.setNonStrokingColor(patternColor);
    state.contentStream.setStrokingColor(patternColor);
}
Also used : PDAppearanceStream(org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream) Rectangle2D(java.awt.geom.Rectangle2D) Method(java.lang.reflect.Method) IOException(java.io.IOException) PDColor(org.apache.pdfbox.pdmodel.graphics.color.PDColor) PDTilingPattern(org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern) PDPattern(org.apache.pdfbox.pdmodel.graphics.color.PDPattern) AffineTransform(java.awt.geom.AffineTransform) PDFormXObject(org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject) PDRectangle(org.apache.pdfbox.pdmodel.common.PDRectangle) PDImageXObject(org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject) PDFormXObject(org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject) PDPageContentStream(org.apache.pdfbox.pdmodel.PDPageContentStream) PDColorSpace(org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)

Example 5 with PDTilingPattern

use of org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern in project pdfbox-graphics2d by rototor.

the class PdfBoxGraphics2D method applyShadingAsColor.

private void applyShadingAsColor(PDShading shading) throws IOException {
    /*
		 * If the paint has a shading we must create a tiling pattern and set that as
		 * stroke color...
		 */
    PDTilingPattern pattern = new PDTilingPattern();
    pattern.setPaintType(PDTilingPattern.PAINT_COLORED);
    pattern.setTilingType(PDTilingPattern.TILING_CONSTANT_SPACING_FASTER_TILING);
    PDRectangle anchorRect = bbox;
    pattern.setBBox(anchorRect);
    pattern.setXStep(anchorRect.getWidth());
    pattern.setYStep(anchorRect.getHeight());
    PDAppearanceStream appearance = new PDAppearanceStream(this.document);
    appearance.setResources(pattern.getResources());
    appearance.setBBox(pattern.getBBox());
    PDPageContentStream imageContentStream = new PDPageContentStream(document, appearance, ((COSStream) pattern.getCOSObject()).createOutputStream());
    imageContentStream.addRect(0, 0, anchorRect.getWidth(), anchorRect.getHeight());
    imageContentStream.clip();
    imageContentStream.shadingFill(shading);
    imageContentStream.close();
    PDColorSpace patternCS1 = new PDPattern(null);
    COSName tilingPatternName = xFormObject.getResources().add(pattern);
    PDColor patternColor = new PDColor(tilingPatternName, patternCS1);
    contentStream.setNonStrokingColor(patternColor);
    contentStream.setStrokingColor(patternColor);
}
Also used : PDTilingPattern(org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern) COSName(org.apache.pdfbox.cos.COSName) PDAppearanceStream(org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream) PDPattern(org.apache.pdfbox.pdmodel.graphics.color.PDPattern) PDRectangle(org.apache.pdfbox.pdmodel.common.PDRectangle) PDPageContentStream(org.apache.pdfbox.pdmodel.PDPageContentStream) PDColorSpace(org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace) PDColor(org.apache.pdfbox.pdmodel.graphics.color.PDColor)

Aggregations

PDTilingPattern (org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern)6 PDColor (org.apache.pdfbox.pdmodel.graphics.color.PDColor)5 PDColorSpace (org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)5 PDPattern (org.apache.pdfbox.pdmodel.graphics.color.PDPattern)5 PDPageContentStream (org.apache.pdfbox.pdmodel.PDPageContentStream)4 PDRectangle (org.apache.pdfbox.pdmodel.common.PDRectangle)4 COSName (org.apache.pdfbox.cos.COSName)3 PDAppearanceStream (org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream)3 AffineTransform (java.awt.geom.AffineTransform)2 Rectangle2D (java.awt.geom.Rectangle2D)2 PDFormXObject (org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject)2 PDImageXObject (org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject)2 PDAbstractPattern (org.apache.pdfbox.pdmodel.graphics.pattern.PDAbstractPattern)2 Color (java.awt.Color)1 BufferedImage (java.awt.image.BufferedImage)1 IOException (java.io.IOException)1 Method (java.lang.reflect.Method)1 PDDocument (org.apache.pdfbox.pdmodel.PDDocument)1 PDPage (org.apache.pdfbox.pdmodel.PDPage)1 PDPatternContentStream (org.apache.pdfbox.pdmodel.PDPatternContentStream)1