[OpenJDK 2D-Dev] [9] RFR: JDK-6966350:Empty pages when printing on Lexmark E352dn PS3 with "1200 IQ" setting
Jayathirth D V
jayathirth.d.v at oracle.com
Fri Jun 17 11:02:36 UTC 2016
Hi Prasanta,
Changes are fine.
Thanks,
Jay
From: prasanta sadhukhan
Sent: Friday, June 17, 2016 3:37 PM
To: Jayathirth D V
Cc: 2d-dev at openjdk.java.net
Subject: Re: [OpenJDK 2D-Dev] [9] RFR: JDK-6966350:Empty pages when printing on Lexmark E352dn PS3 with "1200 IQ" setting
Hi Jay,
I have modified the testcase to select the proper printable, description (it seems for dell 5310 it is Properties->Print Quality whereas for lexmark it is as you mentioned) is changed to include both printers,
increased timeout, removed unused imports and rectified indents.
http://cr.openjdk.java.net/~psadhukhan/6966350/webrev.02/
Regards
Prasanta
On 6/17/2016 2:47 PM, Jayathirth D V wrote:
Hi Prasanta,
One more thing I missed, there are many unneeded imports in test case. Please remove them also.
Thanks,
Jay
From: Jayathirth D V
Sent: Friday, June 17, 2016 2:45 PM
To: Prasanta Sadhukhan
Cc: HYPERLINK "mailto:2d-dev at openjdk.java.net"2d-dev at openjdk.java.net
Subject: Re: [OpenJDK 2D-Dev] [9] RFR: JDK-6966350:Empty pages when printing on Lexmark E352dn PS3 with "1200 IQ" setting
Hi Prasanta,
I tried to run the test but it looks like you are not creating object for proper class in test case :
88 pj.setPrintable(new PrintableDemo(), pf);
I think it should be test class name :
88 pj.setPrintable(new PrintTestLexmarkIQ(), pf);
After we change it to test class name it is working fine.
In the description of test JTextArea, I found Print quality setting under Properties -> Advanced -> Graphic -> Print Quality. Please verify the same.
Also please increase timeout for test case as I was looking for Print Quality setting and it came out.
In test case jtreg multiline comment are not indented properly.
Regarding code change, if we can be sure that in future image quality setting will not increase more than 6000IQ then changes are fine. Also in comments related to code change we can make it multiline comment instead of multiple single line comments.
Thanks,
Jay
From: Philip Race
Sent: Thursday, June 16, 2016 5:05 AM
To: prasanta sadhukhan
Cc: HYPERLINK "mailto:2d-dev at openjdk.java.net"2d-dev at openjdk.java.net
Subject: Re: [OpenJDK 2D-Dev] [9] RFR: JDK-6966350:Empty pages when printing on Lexmark E352dn PS3 with "1200 IQ" setting
On 6/14/16, 10:09 PM, prasanta sadhukhan wrote:
Hi Phil,
On 6/15/2016 12:21 AM, Phil Race wrote:
This sound fishy. "2" does not sound like a valid value per the Microsoft spec
but this driver is apparently considering it as something like a multiplier although
presumably not to the actual resolution.
I see that we are checking that the DM_YRESOLUTION bit of the dmFields member is set :
1002 int xRes = devmode->dmPrintQuality;
1003 int yRes = (devmode->dmFields & DM_YRESOLUTION) ?
1004 devmode->dmYResolution : devmode->dmPrintQuality;
1005
1006 // For some printers, printer quality can specify 1200IQ
1007 // In this case, dmPrintQuality comes out 600 and
1008 // dmYResolution comes out 2 which is not a valid resolution
1009 // so for IQ setting, we specify yresolution same as xRes
1010 if (yRes < 10) yRes = xRes;
.. so really they ought to return a DPI value as the spec says. I can't
find anything that grants the apparent latitude being taken here.
Note that your change here looks like it may break "quality" - where
the pre-defined values are negative - as you will overwrite "-1" (for example) with 10.
Actual breakage depends on whether we bother to read yRes in the case that
xRes is negative but it still should not be over-written.
If "quality" or dmPrintQuality is pre-defined negative value (like DMRES_HIGH, DMRES_MEDIUM, DMRES_LOW, DMRES_DRAFT)
then it will be handled in the "if" block
and my modification is in "else" .
Not following that but in any case ...
At a minimum you need to fix the code to look like :-
int yRes = (devmode->dmFields & DM_YRESOLUTION) && (devmode->dmYResolution < 10)
? devmode->dmYResolution : devmode->dmPrintQuality;
I guess you mean
devmode->dmYResolution > 10
.. yes
Anyways, I have updated webrev to accomodate your comment.
HYPERLINK "http://cr.openjdk.java.net/%7Epsadhukhan/6966350/webrev.01/"http://cr.openjdk.java.net/~psadhukhan/6966350/webrev.01/
approved since we have a comment explaining the "logic" but still puzzled.
-phil.
But I find it a little unsatisfactory to have to make this kind of workaround
and wonder what we are missing ...
I could not find anything but this will help in getting printing to be working in those printers. If we find anything in near future, we will update this code .
Regards
Prasanta
-phil.
On 06/09/2016 04:35 AM, prasanta sadhukhan wrote:
Hi All,
Bug: https://bugs.openjdk.java.net/browse/JDK-6966350
The issue was if we select 1200IQ Normal (default) setting in Lexmark E352dn PS3 or Dell 5310n printer, it does not print the output and we get empty pages.
It was because DEVMODE windows structure returns 600 for "dmPrintQuality" and 2 for "dmYResolution". For 2400IQ, it returns 600 dmPrintQuality and 4 as dmYResolution
so awt_printControl.cpp#AwtPrintControl::UpdateAttributes() calls WPrinterJob#setResolutionDPI(xres=600, yres=2) and RasterPrinterJob#print() gets 0.027 as yscale(=getYRes()/72 and yres = 2)
so devicetransform for normal 1200IQ dpi becomes [8.33, 0.0, -108.0][0.0, 0.027, -108.0] so WPathGraphics#drawString() gets devPos x= 725.33, y = -105.22.
so nothing gets printed.
I tried finding the significance of 1200IQ setting which just says it enhances the images sent to the printer.
>From http://www.smallbusinesscomputing.com/testdrive/article.php/1585581/Lexmark-T420d-Printer-Review-Both-Sides-Now.htm (although it's not the same printer)
says "To be fair, the LaserJet offers sharper resolution — 1,200 by 1,200 dpi, while the T420d is a 600 by 600 dpi printer with what Lexmark calls "1,200 Image Quality" dot placement for photos"
I modified the code to set yres to xres value if yres is less than 10 . Although it seems to be a workaround, it prints the output.
webrev: HYPERLINK "http://cr.openjdk.java.net/%7Epsadhukhan/6966350/webrev.00/"http://cr.openjdk.java.net/~psadhukhan/6966350/webrev.00/
Regards
Prasanta
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20160617/8a410295/attachment.html>
More information about the 2d-dev
mailing list