You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@pdfbox.apache.org by Tilman Hausherr <TH...@t-online.de> on 2017/11/14 20:56:24 UTC

print test on non windows system (PDFBOX-4011)

Could somebody a non windows system and a printer please run this code 
that I created for issue PDFBOX-4011, and report what happens ? The code 
should do two things:

- create an image with a barcode-like pattern in the file output.png

- bring a print dialog box and then print the same.

This fails on windows (printed page is blank) but I wonder if this fails 
on other OS as well.

Tilman


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: users-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: users-help@pdfbox.apache.org


Re: print test on non windows system (PDFBOX-4011)

Posted by Tilman Hausherr <TH...@t-online.de>.
Thanks everybody. I have submitted a bug report with a refactored 
version of my code (included in PDFBOX-4011).
Tilman

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: users-help@pdfbox.apache.org


Re: print test on non windows system (PDFBOX-4011)

Posted by Peter Pinnau <pe...@unterbrecher.de>.
Am 14.11.2017 um 21:56 schrieb Tilman Hausherr:
>
> This fails on windows (printed page is blank) but I wonder if this 
> fails on other OS as well.

I tested this under Ubuntu 16.10. with exactly the same result:

- code executes without exception
- output.png contains a barcode-like pattern
- print dialog opens
- printed page is blank


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: users-help@pdfbox.apache.org


Re: print test on non windows system (PDFBOX-4011)

Posted by Tilman Hausherr <TH...@t-online.de>.
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 <TH...@t-online.de>:
>>
>> 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: users-unsubscribe@pdfbox.apache.org
> For additional commands, e-mail: users-help@pdfbox.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: users-help@pdfbox.apache.org


Re: print test on non windows system (PDFBOX-4011)

Posted by Maruan Sahyoun <sa...@fileaffairs.de>.
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 <TH...@t-online.de>:
> 
> 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: users-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: users-help@pdfbox.apache.org