[OpenJDK 2D-Dev] JDK-7107175 - Paper tray handling
Patrick Reinhart
patrick at reini.net
Mon Nov 25 14:48:28 UTC 2013
On 22.11.2013 00:15, Phil Race wrote:
> The other problem you mention is largely if not entirely because IPP
> lumped
>>> trays along with papers as being "Media".
>>>
>>> See http://tools.ietf.org/html/rfc2566#section-4.2.11
>>>
>>> If a Printer object supports a medium name as a value of this
>>> attribute, such a medium name implicitly selects an input-tray that
>>> contains the specified medium. If a Printer object supports a
>>> medium
>>> size as a value of this attribute, such a medium size implicitly
>>> selects a medium name that in turn implicitly selects an input-tray
>>> that contains the medium with the specified size. If a Printer
>>> object supports an input-tray as the value of this attribute,
>>> such an
>>> input-tray implicitly selects the medium that is in that input-tray
>>> at the time the job prints.
>>>
>> If I understand this correct, that means it should be possible to
>> just define a MediaTray without a MediaSizeName then right? But in my
>> environment the default MediaSizeName is set to Letter even though
>> the current PrintService would define A4 as the default.
>
> I see a line in RasterPrinterJob.java which might cause that to happen
> if you specify
> a tray and no paper but that seems like its a bug. It should always be
> the default for the current
> printer unless I'm forgetting something we had to do for backwards
> compatibility.
>
Do you mean this lines starting at 562:
Media media = (Media)attSet.get(Media.class);
if (media == null) {
media =
(Media)service.getDefaultAttributeValue(Media.class);
}
if (!(media instanceof MediaSizeName)) {
media = MediaSizeName.NA_LETTER;
}
This would replace a set MediaTray from the attribute set with the
MediaSizeName.NA_LETTER right? A would sugest to change the lines to
something like this:
Media media = (Media)attSet.get(Media.class);
if (media == null) {
media =
(Media)service.getDefaultAttributeValue(Media.class);
if (media == null) {
media = MediaSizeName.NA_LETTER;
}
}
This would fall back to letter in case of a non default definition of a
media size name and no such is defined within the request attributes...
>> If I compare the basic behavior in comparison to the Windows
>> implementation. The are some differences in setting the default
>> MediaSize and MediaSizeName. Those will be not initialized in the
>> Windows world and taken from the current PrintService in case it's
>> not set via PrintRequestAttributeSet.
>>
>>
>>> I can see no way around this other than defining an new attribute
>>> class that doesn't
>>> subclass Media and duplicates MediaTray .. but then you'd also need
>>> to say what happens
>>> if someone specifies two different trays, one by each means.
>>>
>> I do not completely understand what you mean. Do you mean the use
>> case if one specifies A4,Tray2 but Tray2 contains Letter?
>
> I meant that if we provided a new class "MediaSource" you could
> specify MediaSource.TRAY1
> whilst still specifying for "Media" an instance of the subclass
> MediaTray that corresponded
> to TRAY2. That's an API solution that doesn't seem likely any time soon.
I always thought that the MediaTray does specify the source already as
it says in the JavaDoc:
"*IPP Compatibility:* MediaTray is a representation class for values of
the IPP "media" attribute which name paper trays. "
In newer Printer there is also the possibility to specify the output
tray as well but for this there is no specific definition within the spec.
Cheers
Patrick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20131125/f3eed92d/attachment.html>
More information about the 2d-dev
mailing list