Am 14.11.2017 um 22:05 schrieb Maruan Sahyoun:
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.

Yes please do.

I thought that the "Not running on AppKit thread 0" bug had been solved ( https://issues.apache.org/jira/browse/PDFBOX-2682 )

Tilman


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]



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

Reply via email to