[OpenJDK 2D-Dev] Clarification regarding PageFormat and Paper getImageable* functions orientation consideration
alexey.ivanov at oracle.com
Tue Mar 23 13:36:40 UTC 2021
I agree with Phil.
Both PageFormat  and Paper  have getImageable*() methods. The spec
for each of these methods in PageFormat states, “This method takes into
account the orientation of the page.” The implementation confirms this
Yet the spec for Paper does not have this statement.
The test case in JDK-8203395  gets the margins from Paper object and
it gets the same results, irrespective of the page orientation. This is
*expected* because Paper does not take into account the orientation.
As you noticed, getting the margins from PageFormat object directly
produces the expected result: the margins are different in portrait
(default) and landscape orientation.
Thus both classes — PageFormat and Paper — behave exactly as specified.
As for the question:
> My question is that should Paper getImageable* functions also need
> take into account orientation as per spec ?, or is the current
> behavior of them not considering orientation correct and why ?
The Paper object doesn't have orientation. So I believe the current
behaviour is correct.
On 22/03/2021 21:54, Philip Race wrote:
> There's no bug here from what I am being shown.
> >"PageFormat showing wrong printer margins in LANDSCAPE orientation” .
> Really ? But I don't see anywhere the PageFormat is queried for this.
> Instead the test case digs inside the PageFormat and retrieves the
> Paper and asks for *its* margins
> I see a comment in the bug :
> > All getImageable methodes javadoc say "This method takes into
> account the orientation of the page" but It's not true before printing.
> The methods that say that, are the ones on PageFormat, not the ones on
> Paper. So wrong.
> On 3/22/21 1:55 PM, Rajat Mahajan wrote:
>> Hi all,
>> I am working on https://bugs.openjdk.java.net/browse/JDK-8203395
>> <https://bugs.openjdk.java.net/browse/JDK-8203395> and this bug is
>> about *“PageFormat showing wrong printer margins in LANDSCAPE
>> orientation” .*
>> *Application code it trying to print in Landscape and Portrait but
>> both show same margins:*
>> Margins default : 12,12,17,17
>> Margins OrientationRequested.LANDSCAPE : 12,12,17,17
>> *The code of the application uses Paper object for getting margins :*
>> PageFormat pf = printerJob.getPageFormat(aset);
>> Paper paper = pf.getPaper();
>> long paperTopMargin = Math.round(paper.getImageableY());
>> long paperLeftMargin = Math.round(paper.getImageableX());
>> long paperRightMargin = Math.round(paper.getWidth() -
>> paper.getImageableWidth() - paperLeftMargin);
>> long paperBottomMargin = Math.round(paper.getHeight() -
>> paper.getImageableHeight() - paperTopMargin);
>> When I looked at the latest JDK code, PageFormat getImageable
>> functions are taking into account Orientation and Paper getImageable
>> functions are not , and hence we see the same output.
>> Using Page format object instead of Paper shows the correct output:
>> Margins default : 12,12,17,17
>> Margins OrientationRequested.LANDSCAPE : 17,17,12,12
>> My question is that should Paper getImageable* functions also need
>> take into account orientation as per spec ?, or is the current
>> behavior of them not considering orientation correct and why ?
More information about the 2d-dev