Hi Tilman,

on OSX I get the output.png with a barcode like image but the printed page is 
blank. In additon the following error message is generated (Java 1.8)

I could do another test on linux if you like.

BR
Maruan

2017-11-14 22:00:16.289 java[3293:185106] Cocoa AWT: Not running on AppKit 
thread 0 when expected. (
        0   libosxapp.dylib                     0x000000011f2ff702 
+[ThreadUtilities getJNIEnv] + 38
        1   libawt_lwawt.dylib                  0x000000011f273e69 
syncFromJavaPixels + 1842
        2   libawt_lwawt.dylib                  0x000000011f2742ff LockImage + 
75
        3   libawt_lwawt.dylib                  0x000000011f286c4c 
Java_sun_java2d_CRenderer_doImage + 170
        4   ???                                 0x000000010adfe394 0x0 + 
4477412244
)
2017-11-14 22:00:16.290 java[3293:185106]       Please file a bug report at 
http://java.net/jira/browse/MACOSX_PORT with this message and a reproducible 
test case.
2017-11-14 22:00:16.478 java[3293:185106] java.lang.StackOverflowError
        at sun.java2d.CRenderer.doImage(Native Method)
        at sun.java2d.OSXSurfaceData.blitImage(OSXSurfaceData.java:1027)
        at sun.java2d.CRenderer.blitImage(CRenderer.java:461)
        at sun.java2d.CRenderer.scaleImage(CRenderer.java:455)
        at sun.java2d.CRenderer.transformImage(CRenderer.java:508)
        at sun.java2d.CRenderer.transformImage(CRenderer.java:582)
        at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:3461)
        at sun.print.ProxyGraphics2D.drawImage(ProxyGraphics2D.java:1315)
        at PDFBox4010$Renderer.renderStuff(PDFBox4010.java:71)
        at PDFBox4010$MyPageable$1.print(PDFBox4010.java:121)
        at sun.lwawt.macosx.CPrinterJob$4.run(CPrinterJob.java:657)
        at 
sun.lwawt.macosx.CPrinterJob.printToPathGraphics(CPrinterJob.java:671)
        at sun.lwawt.macosx.CPrinterJob.printLoop(Native Method)
        at sun.lwawt.macosx.CPrinterJob.print(CPrinterJob.java:307)
        at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1331)
        at PDFBox4010.doStuff(PDFBox4010.java:45)
        at PDFBox4010.main(PDFBox4010.java:27)



> Am 14.11.2017 um 21:56 schrieb Tilman Hausherr <[email protected]>:
> 
> import java.awt.Color;
> import java.awt.Graphics;
> import java.awt.Graphics2D;
> import java.awt.geom.AffineTransform;
> import java.awt.image.BufferedImage;
> import java.awt.print.PageFormat;
> import java.awt.print.Pageable;
> import java.awt.print.Paper;
> import java.awt.print.Printable;
> import java.awt.print.PrinterException;
> import java.awt.print.PrinterJob;
> import java.io.File;
> import java.io.IOException;
> import javax.imageio.ImageIO;
> 
> /**
>  *
>  * @author Tilman Hausherr
>  */
> public class PDFBox4010
> {
>     int width = 284;
>     int height = 420;
> 
>     public static void main(String[] args) throws IOException, 
> PrinterException
>     {
>         new PDFBox4010().doStuff();
>     }
> 
>     void doStuff() throws IOException, PrinterException
>     {
>         BufferedImage targetImage = new BufferedImage(width, height, 
> BufferedImage.TYPE_INT_RGB);
>         Graphics2D g = (Graphics2D) targetImage.getGraphics();
> 
>         new Renderer().renderStuff(g, targetImage.getWidth(), 
> targetImage.getHeight());
> 
>         g.dispose();
> 
>         ImageIO.write(targetImage, "png", new File("output.png"));
> 
>         PrinterJob job = PrinterJob.getPrinterJob();
>         job.setPageable(new MyPageable(new Renderer(), width, height));
>         if (job.printDialog())
>         {
>             job.print();
>         }
>     }
> 
>     class Renderer
>     {
>         public void renderStuff(Graphics2D g, int width, int height)
>         {
>             // background
>             g.setColor(Color.white);
>             g.fillRect(0, 0, width, height);
> 
>             BufferedImage img = new BufferedImage(303, 1, 
> BufferedImage.TYPE_BYTE_BINARY);
> 
>             // barcode-like pattern on single pixel line
>             for (int i = 0; i < img.getWidth(); ++i)
>             {
>                 img.setRGB(i, 0, (i / 2 % 3) == 0 ? 0 : 0xFFFFFF);
>             }
> 
>             AffineTransform at = new AffineTransform(0, -1, 1, 0, 100, 300);
>             at.concatenate(new AffineTransform(109.08, 0, 0, 63, 0, 0));
>             at.scale(1.0 / img.getWidth(), -1 / img.getHeight());
>             at.translate(0, -img.getHeight());
> 
>             // draw our "barcode"
>             g.drawImage(img, at, null);
>         }
>     }
> 
>     class MyPageable implements Pageable
>     {
>         private final Renderer renderer;
>         private final int width;
>         private final int height;
> 
>         MyPageable(Renderer renderer, int width, int height)
>         {
>             this.renderer = renderer;
>             this.width = width;
>             this.height = height;
>         }
> 
>         @Override
>         public int getNumberOfPages()
>         {
>             return 1;
>         }
> 
>         @Override
>         public PageFormat getPageFormat(int pageIndex) throws 
> IndexOutOfBoundsException
>         {
>             PageFormat format = new PageFormat();
>             Paper paper = new Paper();
>             paper.setSize(width, height);
>             format.setPaper(paper);
>             format.setOrientation(PageFormat.PORTRAIT);
>             return format;
>         }
> 
>         @Override
>         public Printable getPrintable(int pageIndex) throws 
> IndexOutOfBoundsException
>         {
>             if (pageIndex > 1)
>             {
>                 throw new IndexOutOfBoundsException();
>             }
>             return new Printable()
>             {
>                 @Override
>                 public int print(Graphics graphics, PageFormat pageFormat, 
> int pageIndex) throws PrinterException
>                 {
>                     if (pageIndex < 0 || pageIndex > 1)
>                     {
>                         return NO_SUCH_PAGE;
>                     }
>                     renderer.renderStuff((Graphics2D) graphics, (int) 
> pageFormat.getWidth(), (int) pageFormat.getHeight());
>                     return PAGE_EXISTS;
>                 }
>             };
>         }
>     }
> }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to