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]