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