This document is also available in these non-normative formats: PostScript version, PDF version, ZIP archive, and Gzip'd TAR archive.
Copyright © 2003 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.
XHTML-Print is member of the family of XHTML languages defined by the Modularization of XHTML [XHTMLMOD]. It is designed to be appropriate for printing from mobile devices to low-cost printers that might not have a full-page buffer and that generally print from top-to-bottom and left-to-right with the paper in a portrait orientation. XHTML-Print is also targeted at printing in environments where it is not feasible or desirable to install a printer-specific driver and where some variability in the formatting of the output is acceptable.
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.
All sections of this document are normative unless noted as informative.
This document contains the XHTML™-Print W3C Working Draft of 29 July 2003 and is a Last Call Working Draft for review by W3C Members and other interested parties. This document is in the Last Call review period, which ends on 7 September 2003. Comments are to be sent to www-html-editor@w3.org (archive). This specification is based, in large part, on a work by the same name, XHTML™-Print [XHTMLPRINT] from the Printer Working Group (PWG), a program of the IEEE Industry Standard and Technology Organization.
This document has been produced by the W3C HTML Working Group (Members only) as part of the W3C HTML Activity and is released as a Last Call Working Draft with the consensus of the group. The goals of the HTML Working Group are discussed in the HTML Working Group charter. Patent disclosures relevant to this specification can be found on the Working Group's patent disclosure page.
Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than 'work in progress.'
img
and object
ElementsAll sections of this document are normative unless noted as informative.
This section is informative.
This document specifies a simple XHTML based data stream suitable for printing as well as display. It is based on XHTML Basic [XHTMLBASIC] with the addition of Cascading Style Sheets (CSS) from CSS Print Profile [CSSPP]. Its targeted usage is for printing in environments where it is not feasible or desirable to install a printer-specific driver and where some variability in the formatting of the output is acceptable. Throughout this document this data stream is called "XHTML-Print."
XHTML-Print is designed to be appropriate for low-cost printers that might not have a full-page buffer and that generally print from top-to-bottom and left-to-right with the paper in a portrait orientation. For other printers (i.e., those that print in another direction or orientation) a full-page buffer could be needed.
XHTML-Print is not appropriate when strict layout consistency and repeatability across printers are needed. The design objective of XHTML-Print is to provide a relatively simple, broadly supportable page description format where content preservation and reproduction are the goal, i.e. "Content is King." Traditional printer page description formats such as PostScript or PCL are more suitable when strict layout control is needed. XHTML-Print does not utilize bi-directional communications with the printer either for capabilities or status inquiries.
This document creates a set of conformance criteria for XHTML-Print. It references style sheet constructs drawn from CSS2 [CSS2] and proposed for CSS3 Paged Media [PAGEMEDIA] as defined in the CSS Print Profile [CSSPP] to provide a strong basis for rich printing results without a detailed understanding of each individual printer's characteristics.
It also defines an extension set that provides stronger layout control for the printing of mixed text and images, tables and image collections.
The document type definition for XHTML-Print is implemented based on the XHTML modules defined in Modularization of XHTML [XHTMLMOD].
The keywords "MUST", "SHALL", "MUST NOT", "SHALL NOT", "REQUIRED", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" when used in this document are to be interpreted as described in RFC 2119 [RFC2119]. However, for readability, these words do not appear in all uppercase letters in this specification.
This section explains why certain HTML features are not part of XHTML-Print and any special circumstances concerning a module and printing.
Scripts, as programs that are executed in conjunction with a document, are not relevant to the printed page. However, documents can provide information as an alternative to a script. Therefore,
the script module is part of XHTML-Print since the content of the script
element MUST treated as if its display property were
set to the value "none" and the content of the noscript
element printed.
Events are not applicable to static, printed versions of a document. Therefore, the Intrinsic Events module is not part of XHTML-Print.
Many simple printers cannot print a wider variety of fonts than generic serif, sans serif and monospace. It is RECOMMENDED that style sheets be used to create a presentation that is appropriate for a particular category of printer. How printers are categorized, what those categories are, how a printer identifies itself as a member of a category, and how style sheets are selectively applied based on category, is outside the scope of this document.
The Presentation module ([XHTMLMOD], section 5.4.1) is supported to allow very simple printers to support basic font variants and rules without the need to implement support for CSS as REQUIRED by CSS Print Profile [CSSPP]. However, printers SHOULD provide support for CSS within the limits of their device.
Basic XHTML forms ([XHTMLMOD], section 5.5.1) are supported. Content developers SHOULD keep in mind that users might not be able to input many characters from some devices (e.g. from a mobile phone). Furthermore, developers are cautioned that a printer prints a static version of a form, and the visual appearance of a form depends heavily on the implementation.
Basic XHTML tables ([XHTMLMOD], section 5.6.1) are supported, but tables can be difficult to format on very low resource devices. Furthermore, content developers are cautioned that in the Basic Tables Module, nesting of tables is prohibited.
Frames are not supported. Frames depend on a screen interface and therefore are not applicable to printers.
XHTML-Print is a member of the family of XHTML languages defined by Modularization of XHTML [XHTMLMOD]. Therefore, the elements and attributes in the modules that make up XHTML-Print are all valid constructs of the language. However, not all the attributes are applicable to a rendering of an XHTML-Print document in a printed media, especially those that are integral to a dynamic display of the document in a browser and the submission of a form. Furthermore, special attention is given to simple printers and some attributes are deemed too complex for a such a printer to render. These attributes are treated as discretionary in that a conforming printer is not REQUIRED to support them, but if a printer wishes to provide that support, there are requirements stated for consistency in the implementation of extensions.
A conforming XHTML-Print document is a document that requires only the facilities described as mandatory in this specification. Such a document SHALL meet all of the following criteria:
<html>
.http://www.w3.org/1999/xhtml
.The MIME type used to refer to a conforming XHTML-Print document SHALL be either "application/xhtml+xml" or "application/vnd.pwg-xhtml-print+xml". However, the MIME Type "application/vnd.pwg-xhtml-print+xml" is deprecated in favor of "application/xhtml+xml". Required support for the MIME Type "application/vnd.pwg-xhtml-print+xml" MAY be removed from future releases of this specification. An OPTIONAL "charset" parameter MAY be provided with the MIME type. Invalid values MUST be ignored and the result be as if the value were "utf-8". Usage of the OPTIONAL "charset" parameter is as described in section 3.2 of RFC3023 - XML Media Types [RFC3023].
A printer MUST conform to the XHTML Family User Agent Conformance section of the Modularization of XHTML specification ([XHTMLMOD], section 3.5) with the following exceptions and additions:
height
and width
attributes by optionally drawing a box around this space of the size specified
for the image.height
and width
attributes are absent and no alternate content is provided, the image MAY be omitted and no space reserved.height
and width
attributes were omitted, the printer MAY choose to
omit the image from the page.xml:lang
attribute are not REQUIRED to adhere to the rules for language specific white
space handling.To further support print applications requiring more exacting page layout (e.g., photo album pages), the style sheet properties of the Enhanced Layout Extension of the CSS Print Profile ([CSSPP] section 2.1) and image processing (Appendix A.3) SHALL be supported in an OPTIONAL, discoverable (via some means outside the scope of this document) Enhanced Layout Extension.
The following is an informative example using absolute positioning with image data:
The XHTML-Print document type is defined as a set of XHTML modules. All XHTML modules are defined in the Modularization of XHTML specification [XHTMLMOD].
XHTML-Print consists of the following XHTML modules:
body, head, html, title
abbr, acronym, address, blockquote, br, cite, code, dfn, div, em, h1, h2, h3, h4, h5, h6, kbd, p, pre, q, samp, span, strong, var
a
dl, dt, dd, ol, ul, li
b, big, hr, i, small, sub, sup, tt
form, input, label, select, option, textarea
caption, table, td, th, tr
img
object, param
meta
noscript
, script
style
style
attributelink
base
(*) = This module is a REQUIRED XHTML
Host Language module.
(**) = These modules are not a part of XHTML Basic but are REQUIRED for XHTML-Print.
An XML 1.0 DTD is available in Appendix C.
Some of the attributes defined in the Modularization of XHTML [XHTMLMOD] are not applicable to the printed page or are not relevant due to the exclusion of their module from XHTML-Print. Other attributes have equivalent CSS properties that when present take precedence over the attribute. Other attributes are not REQUIRED but if supported by a printer, support SHOULD be provided in the RECOMMENDED manner.
Each attribute in the following sections is annotated to indicate the processing REQUIRED of a conforming printer:
Key | Description |
---|---|
MUST | Support is mandatory; a conforming printer MUST implement this attribute |
SHOULD | The attribute is concerned with functionality that SHOULD be implemented but MAY be beyond the capability of a conforming printer. For example, a monochrome printer can only render a gray scale equivalent of color images. A conforming printer MUST not treat this attribute as an error. |
MAY | The attribute's functionality is considered too complex, either in processing or memory requirements, for a conforming printer. For example, determining vertical alignment within the cells of a row that spans multiple pages could exceed a low cost printer's available memory, therefore, it is not REQUIRED of a conforming printer. A conforming printer MUST NOT treat this attribute as an error. |
N/A | The attribute does Not Apply to the printed page; a conforming printer MAY ignore this attribute for one of the following reasons, but
cannot treat it as an error:
|
The Modularization of XHTML ([XHTMLMOD], section 5.1) contains a set of attribute collections for ease of presentation. This specification continues this practice with the same conditions, that is, that the collections below are informative and their contents normative.
Collection Name | Attributes in Collection | REQUIRED Processing |
---|---|---|
Core | class (NMTOKENS† ) | MUST |
Core | id (ID† ) | MUST |
Core | title (CDATA† ) | N/A |
I18N | xml:lang (NMTOKEN† ) | MAY |
Style | style (CDATA† ) | SHOULD |
Common | Core + I18N + Style | See Collections |
Table Note:
† See Modularization of XHTML ( [XHTMLMOD], section 4.3 )
Note that the title
attribute of the Core collection is not applicable to the printed page since there is no place to display such supplementary information.
A printer MAY support special processing based on the natural language of the document, such as the use of guillemets for quotation marks
in French text. If a printer implements processing based on the natural language of the document, that processing SHALL be controlled by the
xml:lang
attribute.
A printer SHOULD support CSS style sheets, as noted in section 1.3.2 Presentation, within the limits of its capabilities.
Elements | Attributes | REQUIRED Processing |
---|---|---|
body | Common | See Collection |
head | I18N, | See Collection |
head | profile (URI† ) | MAY |
html | I18N, | See Collection |
html | version (CDATA† ), | N/A |
html | xmlns (URI† = "http://www.w3.org/1999/xhtml") | MUST |
title | I18N | See Collection |
Table Note:
† See Modularization of XHTML ( [XHTMLMOD], section 4.3 )
If a printer implements support for meta data then it MUST support the profile
attribute of the head
element.
The version
attribute is not applicable for printing since it was deprecated in the HTML 4.01 Specification [HTML4] in favor of version
information within the DTD.
A printer can ignore the content of the title
element since it is not part of the document's body.
Elements | Attributes | REQUIRED Processing |
---|---|---|
abbr, acronym, address | Common | See Collection |
blockquote | Common, | See Collection |
blockquote | cite (URI† ) | N/A |
br | Core | See Collection |
cite, code, dfn, div, em, h1, h2, h3, h4, h5, h6, kbd, p | Common | See Collection |
pre | Common, | See Collection |
pre | xml:space="preserve" | MUST |
q | Common, | See Collection |
q | cite (URI† ) | N/A |
samp, span, strong, var | Common | See Collection |
Table Note:
† See Modularization of XHTML ( [XHTMLMOD], section 4.3 )
xml:space="preserve"
is the default for all elements in XHTML, and is a mechanism for specifying that space is preserved on input of the document. To specify that space is also
preserved on output, the CSS property whitespace
is used. In the absence of any CSS rules to the contrary, the <pre>
element MUST be rendered as if it has a value for the CSS whitespace
property of pre
.
Element | Attributes | REQUIRED Processing |
---|---|---|
a | Common, | See Collection |
a | accesskey (Character† ), | N/A |
a | charset (Charset† ), | N/A |
a | href (URI† ), | N/A |
a | hreflang (LanguageCode† ), | N/A |
a | rel (LinkTypes† ), | N/A |
a | rev (LinkTypes† ), | N/A |
a | tabindex (Number† ), | N/A |
a | type (ContentType† ) | N/A |
Table Note:
† See Modularization of XHTML ( [XHTMLMOD], section 4.3 )
Elements | Attributes | REQUIRED Processing |
---|---|---|
dl, dt, dd, ol, ul, li | Common | See Collection |
Elements | Attributes | REQUIRED Processing |
---|---|---|
b, big, hr, i, small, sub, sup, tt | Common | See Collection |
Elements | Attributes | REQUIRED Processing |
---|---|---|
form | Common, | See Collection |
form | action* (URI† ), | N/A |
form | method ("get"** | "post"), | N/A |
form | enctype (ContentType† ) | N/A |
input | Common, | See Collection |
input | accesskey (Character† ), | N/A |
input | checked ("checked"), | MUST |
input | maxlength (Number† ), | N/A |
input | name (CDATA† ), | N/A |
input | size (Number† ), | MUST |
input | src (URI† ), | N/A |
input | tabindex (Number† ), | N/A |
input | type("text"** ) | MUST |
input | type("password" ) | MUST |
input | type("checkbox" ) | MUST |
input | type("radio" ) | MUST |
input | type("submit") | MUST |
input | type("reset" ) | MUST |
input | type("hidden" ) | MUST |
input | value (CDATA† ) | MUST |
label | Common, | See Collection |
label | accesskey (Character† ), | N/A |
label | for (IDREF† ) | N/A |
select | Common, | See Collection |
select | multiple ("multiple"), | N/A |
select | name (CDATA† ), | N/A |
select | size (Number† ), | MUST |
select | tabindex (Number† ) | N/A |
option | Common, | See Collection |
option | selected ("selected"), | MUST |
option | value (CDATA† ) | MUST |
textarea | Common, | See Collection |
textarea | accesskey (Character† ), | N/A |
textarea | cols* (Number† ), | MUST |
textarea | name (CDATA† ), | N/A |
textarea | rows* (Number† ), | MUST |
textarea | tabindex (Number† ) | N/A |
Table Notes:
† See Modularization of XHTML ( [XHTMLMOD], section 4.3 )
* The attribute MUST be present.
** The value is the default.
The src
attribute of the input
element is not supported since the image
type is not part of basic forms.
The hidden
type for the input
element MUST be supported even though nothing is printed, so that a printer can
correctly recognize and ignore the element.
Elements | Attributes | REQUIRED Processing |
---|---|---|
caption | Common | See Collection |
table | Common, | See Collection |
table | summary ( Text† ) | N/A |
td, th | Common, | See Collection |
td, th | abbr (Text† ), | MAY |
td, th | align ("left" | "center" | "right"), | MUST |
td, th | axis (CDATA† ), | N/A |
td, th | colspan (Number† ), | MUST |
td, th | headers (IDREFS† ), | N/A |
td, th | rowspan (Number† ), | MUST |
td, th | scope ("row" | "col"), | N/A |
td, th | valign ("top" | "middle" | "bottom") | MUST |
tr | Common, | See Collection |
tr | align ("left" | "center" | "right"), | MUST |
tr | valign ("top" | "middle" | "bottom") | MUST |
Table Note:
† See Modularization of XHTML ( [XHTMLMOD], section 4.3 )
If a printer implements a feature to truncate the contents of a cell because of space constraints, it MUST support the abbr
attribute and print the value of the abbr
attribute (if present) instead of the cell's content.
A printer MUST support the values left
, right
, and center
for the align
attribute of
the td
, th
, and tr
elements, other values are OPTIONAL. If the align
attribute is
missing or has an unsupported value a printer MUST act as if the align
attribute has the value left
.
A printer MUST support the values top
, middle
, and bottom
for the valign
attribute of
the td
, th
, and tr
elements, other values are OPTIONAL. If the valign
attribute is
missing or has unrecognized value, a printer SHOULD act as if the valign
attribute has the value middle
. Vertical
alignment is undefined across page boundaries.
Elements | Attributes | REQUIRED Processing |
---|---|---|
img | Common, | See Collection |
img | alt* (Text† ), | MUST |
img | height (Length† ), | MUST |
img | longdesc (URI† ), | N/A |
img | src* (URI† ), | MUST |
img | width (Length† ) | MUST |
Table Notes:
† See Modularization of XHTML ( [XHTMLMOD], section 4.3 )
* The attribute MUST be present.
Printers MUST support the cid [RFC2392] and http [RFC2616] schemes of a URI [RFC2396]. Support for other schemes is OPTIONAL.
Conforming documents SHOULD specify the width and height of the image using the width
and height
attributes,
since a printer MAY ignore images that are missing these attributes. (2.3.1 Formatting/Rendering Rules).
Elements | Attributes | REQUIRED Processing |
---|---|---|
object | Common, | See Collections |
object | archive (URIs† ), | N/A |
object | classid (URI† ), | N/A |
object | codebase (URI† ), | MUST |
object | codetype (ContentType† ), | N/A |
object | data (URI† ), | MUST |
object | declare ("declare"), | MAY |
object | height (Length† ), | MUST |
object | name (CDATA† ), | N/A |
object | standby (Text† ), | N/A |
object | tabindex (Number† ), | N/A |
object | type ("image/jpeg"), | MUST |
object | width (Length† ) | MUST |
param | id (ID† ), | N/A |
param | name* (CDATA† ), | N/A |
param | type (ContentType† ), | N/A |
param | value (CDATA† ), | N/A |
param | valuetype ("data"** | "ref" | "object") | N/A |
Table Notes:
† See Modularization of XHTML ( [XHTMLMOD], section 4.3 )
* The attribute MUST be present.
** The value is the default.
Printers MUST support the cid [RFC2392] and http [RFC2616] schemes of a URI [RFC2396]. Support for other schemes is OPTIONAL.
A printer MUST support resources of type "image/jpeg." A printer MAY support
other types of image formats and therefore other values of the type
attribute. A printer MUST process the content of the
object
element when it does not recognize or support the object type referenced by the value of the type
attribute. What processing occurs in this situation is implementation
dependent
Conforming documents SHOULD specify the width and height of the image using the width
and height
attributes,
since some printers MAY ignore such images. (2.3.1 Formatting/Rendering Rules).
The param
element's purpose is to pass data to an application specified in the enclosing object
element. Since only images, which do not need initialization, are
supported in the object
element, the param
element can be completely ignored.
Elements | Attributes | REQUIRED Processing |
---|---|---|
meta | I18N, | See Collection |
meta | content* (CDATA† ), | N/A |
meta | http-equiv (NMTOKEN† ), | N/A |
meta | name (NMTOKEN† ), | N/A |
meta | scheme (CDATA† ) | N/A |
Table Notes:
† See Modularization of XHTML ( [XHTMLMOD], section 4.3 )
* The attribute MUST be present.
A printer MAY implement support for this element and provide implementation specific processing of the meta-information. However, guidelines and/or recommendations for processing a document's meta-information are beyond the scope of this document.
Elements | Attributes | REQUIRED Processing |
---|---|---|
noscript | Common, | See Collections |
script | charset (Charset), | N/A |
script | defer ("defer"), | N/A |
script | src(URI), | N/A |
script | type (ContentType), | N/A |
script | scheme (CDATA) | N/A |
Scripts, as programs that are executed in conjunction with a document, are not relevant to the printed page and SHOULD NOT be
printed. The noscript
element contains alternate content that MUST be printed in place of the content of the script
element.
Elements | Attributes | REQUIRED Processing |
---|---|---|
style | I18N, | See Collection |
style | media (MediaDesc† ), | SHOULD |
style | title (Text† ), | N/A |
style | type* ("type/css"), | SHOULD |
style | xml:space="preserve" | SHOULD |
Table Notes:
† See Modularization of XHTML ( [XHTMLMOD], section 4.3 )
* The attribute MUST be present.
A printer MUST read and process the content of style
elements where the media
attribute has the value
print
or all
. A printer MAY read and process the content of style
elements where the media
attribute has the value projection
. A printer SHOULD ignore the content of style
elements where the
media
attribute has any other value. The absence of the media
attribute MUST be treat as if the media
attribute had the value all
.
A printer MUST read and process the content of style
elements where the value of the type
attribute is
"text/css," all other values MUST cause the content to be ignored. Style elements without a type
attribute will be treated in an
implementation dependent manner.
This module adds the style attribute to the Common attribute collection (section 3.1).
Elements | Attributes | REQUIRED Processing |
---|---|---|
link | Common, | See Collection |
link | charset (Charset† ), | MUST |
link | href (URI† ), | MUST |
link | hreflang (LanguageCode† ), | MAY |
link | media (MediaDesc† ), | MUST |
link | rel ("stylesheet"), | MUST |
link | rev (LinkTypes† ), | N/A |
link | type ("text/css") | MUST |
Table Note:
† See Modularization of XHTML ( [XHTMLMOD], section 4.3 )
Printers MUST support the cid [RFC2392] and http [RFC2616] schemes of a URI [RFC2396]. Support for other schemes is OPTIONAL.
If the printer implements processing based on the natural language of the document, then the hreflang
attribute MUST be
supported.
A printer MUST read and process the content of external style sheets where the media
attribute has the value
print
or all
. A printer MAY read and process the content of external style sheets where the media
attribute
has the value projection
. A printer SHOULD ignore the content of external style sheets where the media
attribute
has any other value. The absence of the media
attribute MUST be treat as if the media
attribute had the value
all
.
A printer SHOULD support the value stylesheet
for the rel
attribute along with the value "text/css" for the
type
attribute, all other values are OPTIONAL.
Elements | Attributes | REQUIRED Processing |
---|---|---|
base | href* (URI† ) | MUST |
Table Notes:
† See Modularization of XHTML( [XHTMLMOD], section 4. 3
* The attribute MUST be present.
Printers MUST support the cid [RFC2392] and http [RFC2616] schemes of a URI [RFC2396]. Support for other schemes is OPTIONAL.
XHTML-Print is in the family of XHTML document types, since it is created by combining XHTML modules. The character entities that are part of XHTML-Print are, therefore, defined in XHTML Character Entities ([XHTMLMOD], Section F.1).
XHTML-Print inherits all the structure, encoding and other basic infrastructure specified by XHTML 1.0 [XHTML1]. The following sections describe and clarify the application and usage restrictions of XHTML-Print.
img
and object
ElementsBecause many printers create the page in a serial manner from top to bottom, it is important for the printer to know the size of images before retrieving the image data itself. This information is
then used to create portions of the page layout.
Therefore, the sender SHOULD include the height
and width
attributes within the img
or the
object
element. Printers MAY omit from the page images that do not include height
and width
w attributes (see
item 2, Images, of section 2.3.1 ). These attributes MAY be expressed as pixels or percentages within the
img
or the object
element. Percentages are relative to the parent element and not the page width or printable area.
This document specifies only one mandatory image format: baseline JPEG as defined in JPEG File Interchange Format [JPEG]. See Appendix A for a description of JPEG decoder requirements. Printers are not REQUIRED to support:
within the JFIF (JPEG File Interchange Format) and EXIF (Exchangeable Image File Format) files.
Conforming XHTML-Print printers SHALL support both in-line and referenced style sheets within the style
element or
link
element in the head
element of a document. Conforming XHTML-Print printers SHALL also support the
style
attribute (i.e. in-line style) when used within other elements as defined by XHTML 1.1[XHTML1.1]. Normal cascading rules apply.
In traditional Web-based applications of XHTML, image data is contained in a separate file on a Web server that the user agent retrieves.
However, there are circumstances where it is desirable to include the image data along with the rest of the print data. For example, some low cost, resource constrained clients might want to include images in their print output but cannot afford to include a server. Furthermore, some printers could require that all the print data be encapsulated in a single file for transportability, avoiding firewall issues, etc. Therefore, conforming XHTML-Print printers MUST support two document formats: a format that contains both a document and its referenced image data and the traditional format that contains only the document.
[Informative] Furthermore, both formats MUST be supported since there is no guaranteed mechanism for the printer to advertise the formats it supports. Lacking the ability to determine a printer's support for one or both formats a sending application MUST be able to depend on support for both formats so that it can chose the format that is best for its circumstances. [ed.]
See Appendix B for discussion of the method that SHALL be used to collect both XHTML-Print and associated image data into a single file or data stream.
Low-cost printers today often have very little memory into which page data can be stored before being printed. As such, they may build and print the page in swaths on the fly from the top of the page to the bottom. To enable the use of XHTML-Print in these low cost printers, some restrictions on the order of images contained in the XHTML-Print data stream must be added.
<img src="http://example.com/example.jpg">
, or by means of a data interleaving scheme such as described in B.2.1 Interleaving Images. (See Appendix B). This allows the printer to get chunks of the image, as it needs it, as it prints down the page. Included image data, as discussed in Appendix
B.3, is discouraged.An HTML form is a dynamic entity when the document is displayed in a browser: data can be entered into text fields, buttons can be pushed, selections made, and options checked. None of this dynamic activity can be rendered on a printed page. However, a printed page can permanently record a particular state of the form. For example, users might wish to print forms that record products ordered or payments made.
The following discussion illustrates the activity involved when interacting with and printing forms. Please refer to Sequence Diagram 1
Sequence Diagram 1. Forms Usage
Steps:
Detailed discussion of Steps:
Here is an example presentation of the above form as the user would see it:
This section is informative.
This specification is based, almost exclusively, on the specification of the same name, XHTML™-Print [XHTMLPRINT], from the Printer Working Group, a program of and through the IEEE Industry Standards and Technology Organization, Inc., and the editor wishes to express his gratitude to all of those who contributed to it.
This appendix describes RECOMMENDED behaviors for JPEG decoders in XHTML-Print devices. Behaviors for both minimal printers and enhanced layout printers are described. Many of the behaviors described in this document follow directly from language already present in the relevant JPEG standards, but are repeated here to emphasize their importance.
The decoder behaviors described in this document are intended to minimize implementation complexity, while retaining maximum compatibility with existing JPEG files. In particular, these recommendations seek to ensure compatibility with both EXIF (Exchangeable Image File Format) and baseline JFIF (JPEG File Interchange Format) i.e., the subset of JFIF files that use only baseline JPEG processes. Support for JPEG streams using non-baseline processes, such as arithmetic coding or progressive coding, is not mandated for XHTML-Print compliance.
This section describes behaviors of JPEG decoders for minimal XHTML-Print implementations.
A JPEG decoder for an XHTML-Print printer SHALL support all baseline JPEG processes as defined in [CCITT], except for 2- and 4-component images. These processes include grayscale and 3-component images, 8-bit/component sample depth, Huffman entropy coding, 444, 422, 411, and 400 subsampling modes, and sequential (i.e. non-progressive) scan.
Baseline decoders MAY ignore application-specific markers, such as the JFIF APP0 marker and the EXIF APP1/APP2 markers. This will cause all images to print in an un-rotated orientation, with image size as specified in the JPEG SOF marker if not overridden by XHTML-Print mark-up. A JPEG decoder for a minimal printer SHALL NOT fail as a consequence of encountering an unsupported APPx marker (i.e. all such markers SHALL be correctly parsed, even if they are ignored).
This section describes a RECOMMENDED color management approach for minimal XHTML-Print printers.
Sample values in a grayscale (single-component) JPEG image SHALL be converted to the sRGB color space by setting
Rout= Gout= Bout= Grayin
Sample values in 3-component JPEG images SHALL be interpreted as YCbCr samples, as would be obtained by applying the matrices described in ITU BT.601 [BT601.5] to sRGB input data.
This section describes behaviors of JPEG decoders for XHTML-Print devices that support the XHTML-Print Enhanced Layout Extension, an OPTIONAL feature block. The behaviors described below SHOULD be interpreted as "in addition to" those described in XHTML-Print Document Type and Printer Conformance (the requirements for minimal XHTML-Print devices).
A JPEG decoder for an XHTML-Print implementation which supports the Enhanced Layout Extension MAY decode the TIFF IFDs embedded in the EXIF APP1 and APP2 markers, as described in Section 2.6.4 of [JEIDA]. The following IFDs MAY be supported. However, any future XHTML elements or CSS properties affecting image orientation SHALL take precedence over these IFDs.
Tag Name | Field Name | Description |
Orientation of Image | Orientation | Sets image orientation in 90-degree increments, and enables transposition. |
The intent of this appendix is to describe the method for including XHTML-Print and associated image data in a single data stream or file. Support for Image Data is REQUIRED. (See Image Data.)
In addition to images, if separate style sheets are to be interleaved with the XHTML-Print data, the same method SHALL be used.
This section includes by reference the entirety of RFC3391 - The MIME Application/Vnd.pwg-multiplexed Content-type, Robert Herriot [MIMEMPX]. All printers MUST support image data using RFC3391[MIMEMPX].
Producers and consumers of Application/Vnd.pwg-multiplexed entities (compound documents), as defined in [MIMEMPX], SHOULD consider each component image message of the compound document as having one and only one reference. The producer of the compound document MUST assume that the consumer of the compound document has limited memory and therefore include a unique image message for each image reference found in the root document. If a ContentID is present in the header of an image message, that ContentID MUST be unique. If a Content-Location is present in the header of an image message, that Content-Location is REQUIRED to be unique except for the special case where a repeated reference to the same image URL causes several messages containing the same image data to be present in the compound document. Consumers MAY release the message data associated with an image reference as the image is rendered, because the Consumer can be confident that another reference to the same image will be accompanied by another message containing the image data. Consumers MAY also substitute image data for a message with a given Content-Location header value with image data from other messages with the same Content-Location header value because Consumers can be confident that messages with identical Content-Location values do in fact contain identical data.
URL references in the root document of the multiplexed document MUST be matched to Content-Location and/or Content-ID fields of the referenced message object according to the rules given by RFC2557 - MIME Encapsulation of Aggregate Documents, such as HTML (MHTML) [RFC2557]. An exception to the rules occurs when a reference is made to a message object named with a Content-Location [RFC2557]. In that special case, multiple instances of that message are REQUIRED in the compound document.
This section is informative.
RFC3391[MIMEMPX] only says that an image should be placed close to its reference in a compound document. However, if an image is placed directly after its reference, the information in the image header is available, when needed, for determining the size of the image's box, where an image header is the data from the beginning of the image up to and including the start of scan marker. Furthermore, the printer will immediately know if the image is present or if its alternate content has to be printed. On the other hand, when several images will be placed on a page, some low-cost printers might not have enough memory to hold the images in memory while rendering the page. One possible solution to this dilemma is to break each image into chunks, and to place each image's header in its own chunk near the image's reference. The remainder of the chunks for each image are placed later in the compound document and could be interleaved to further reduce the memory needed to store the images while printing.
This section is informative.
An alternative method to include image data in XHTML-Print is via the data url scheme [RFC2392]. Because this method normally encodes the binary image data using base64
encoding, a significant increase in the size of the data transmitted will be experienced. This should be avoided over low speed connections. Printers supporting included data can support base64
encoding using the img
or object
element.
This method could be useful for very simple clients that cannot afford a server for image downloading or for some reason cannot utilize the Application/Vnd.pwg-multiplexed MIME type [MIMEMPX]; however, it is not suggested for general use especially if the size of the printer's buffer is unknown.
This section contains the pieces of the XHTML-Print DTD that are unique to XHTML-Print. The remaining entities and modules are as specified in reference [XHTMLMOD].
The following SHOULD be used from Modularization of XHTML [XHTMLMOD]:
Available for download at xhtml-print10.dtd.
<!-- ....................................................................... --> <!-- XHTML-Print 1.0 DTD ................................................... --> <!-- file: xhtml-print10.dtd --> <!-- XHTML-Print 1.0 DTD This is XHTML-Print 1.0, a variant of XHTML Basic for printing. Copyright 1998-2003 World Wide Web Consortium (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University). All Rights Reserved. Permission to use, copy, modify and distribute the XHTML-Print DTD and its accompanying documentation for any purpose and without fee is hereby granted in perpetuity, provided that the above copyright notice and this paragraph appear in all copies. The copyright holders make no representation about the suitability of the DTD for any purpose. It is provided "as is" without expressed or implied warranty. Author: Jun Fujisawa <fujisawa.jun@canon.co.jp> Revision: $Id: Overview.html,v 1.1 2003/10/01 15:42:12 shane Exp $ --> <!-- This is the driver file for version 1.0 of the XHTML-Print DTD. This DTD is identified by the PUBLIC and SYSTEM identifiers: PUBLIC "-//W3C//DTD XHTML-Print 1.0//EN" SYSTEM "http://www.w3c.org/MarkUp/DTD/xhtml-print10.dtd" --> <!ENTITY % XHTML.version "-//W3C//DTD XHTML-Print 1.0//EN" > <!-- Use this URI to identify the default namespace: "http://www.w3.org/1999/xhtml" --> <!ENTITY % NS.prefixed "IGNORE" > <!ENTITY % XHTML.prefix "" > <!-- Reserved for use with the XLink namespace: --> <!ENTITY % XLINK.xmlns "" > <!ENTITY % XLINK.xmlns.attrib "" > <!-- reserved for future use with document profiles --> <!ENTITY % XHTML.profile "" > <!-- Bidirectional Text features This feature-test entity is used to declare elements and attributes used for bidirectional text support. --> <!ENTITY % XHTML.bidi "IGNORE" > <!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --> <!ENTITY % xhtml-events.module "IGNORE" > <!ENTITY % xhtml-bdo.module "%XHTML.bidi;" > <!-- Style Attribute Module ............................ --> <!ENTITY % xhtml-inlstyle.module "INCLUDE" > <![%xhtml-inlstyle.module;[ <!ENTITY % xhtml-inlstyle.mod PUBLIC "-//W3C//ENTITIES XHTML Inline Style 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-inlstyle-1.mod" > %xhtml-inlstyle.mod;]]> <!-- Document Model Module ............................. --> <!ENTITY % xhtml-model.mod PUBLIC "-//W3C//ENTITIES XHTML-Print 1.0 Document Model 1.0//EN" "xhtml-print10-model-1.mod" > <!-- Modular Framework Module (required) ............... --> <!ENTITY % xhtml-framework.mod PUBLIC "-//W3C//ENTITIES XHTML Modular Framework 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-framework-1.mod" > %xhtml-framework.mod; <!-- Text Module (required) ............................ --> <!ENTITY % xhtml-text.mod PUBLIC "-//W3C//ELEMENTS XHTML Text 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-text-1.mod" > %xhtml-text.mod; <!-- Hypertext Module (required) ....................... --> <!ENTITY % xhtml-hypertext.mod PUBLIC "-//W3C//ELEMENTS XHTML Hypertext 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-hypertext-1.mod" > %xhtml-hypertext.mod; <!-- Lists Module (required) ........................... --> <!ENTITY % xhtml-list.mod PUBLIC "-//W3C//ELEMENTS XHTML Lists 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-list-1.mod" > %xhtml-list.mod; <!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --> <!-- Presentation Module ............................... --> <!ENTITY % xhtml-pres.module "INCLUDE" > <![%xhtml-pres.module;[ <!ENTITY % xhtml-pres.mod PUBLIC "-//W3C//ELEMENTS XHTML Presentation 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-pres-1.mod" > %xhtml-pres.mod;]]> <!-- Image Module ...................................... --> <!ENTITY % xhtml-image.module "INCLUDE" > <![%xhtml-image.module;[ <!ENTITY % xhtml-image.mod PUBLIC "-//W3C//ELEMENTS XHTML Images 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-image-1.mod" > %xhtml-image.mod;]]> <!-- Tables Module ..................................... --> <!ENTITY % xhtml-table.module "INCLUDE" > <![%xhtml-table.module;[ <!ENTITY % xhtml-table.mod PUBLIC "-//W3C//ELEMENTS XHTML Basic Tables 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-basic-table-1.mod" > %xhtml-table.mod;]]> <!-- Forms Module ...................................... --> <!ENTITY % xhtml-form.module "INCLUDE" > <![%xhtml-form.module;[ <!ENTITY % xhtml-form.mod PUBLIC "-//W3C//ELEMENTS XHTML Basic Forms 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-basic-form-1.mod" > %xhtml-form.mod;]]> <!-- Style Sheet Module ................................ --> <!ENTITY % xhtml-style.module "INCLUDE" > <![%xhtml-style.module;[ <!ENTITY % xhtml-style.mod PUBLIC "-//W3C//ELEMENTS XHTML Style Sheets 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-style-1.mod" > %xhtml-style.mod;]]> <!-- Link Module ....................................... --> <!ENTITY % xhtml-link.module "INCLUDE" > <![%xhtml-link.module;[ <!ENTITY % xhtml-link.mod PUBLIC "-//W3C//ELEMENTS XHTML Link Element 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-link-1.mod" > %xhtml-link.mod;]]> <!-- Metainformation Module ............................ --> <!ENTITY % xhtml-meta.module "INCLUDE" > <![%xhtml-meta.module;[ <!ENTITY % xhtml-meta.mod PUBLIC "-//W3C//ELEMENTS XHTML Metainformation 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-meta-1.mod" > %xhtml-meta.mod;]]> <!-- Base Module ....................................... --> <!ENTITY % xhtml-base.module "INCLUDE" > <![%xhtml-base.module;[ <!ENTITY % xhtml-base.mod PUBLIC "-//W3C//ELEMENTS XHTML Base Element 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-base-1.mod" > %xhtml-base.mod;]]> <!-- Param Module ...................................... --> <!ENTITY % xhtml-param.module "INCLUDE" > <![%xhtml-param.module;[ <!ENTITY % xhtml-param.mod PUBLIC "-//W3C//ELEMENTS XHTML Param Element 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-param-1.mod" > %xhtml-param.mod;]]> <!-- Object Module ..................................... --> <!ENTITY % xhtml-object.module "INCLUDE" > <![%xhtml-object.module;[ <!ENTITY % xhtml-object.mod PUBLIC "-//W3C//ELEMENTS XHTML Embedded Object 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-object-1.mod" > %xhtml-object.mod;]]> <!-- Structure Module (required) ....................... --> <!ENTITY % xhtml-struct.mod PUBLIC "-//W3C//ELEMENTS XHTML Document Structure 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-struct-1.mod" > %xhtml-struct.mod; <!-- end of XHTML-Print 1.0 DTD ............................................ --> <!-- ....................................................................... -->
Available for download at xhtml-print10-model-1.mod.
<!-- ....................................................................... --> <!-- XHTML-Print 1.0 Document Model Module ................................. --> <!-- file: xhtml-print10-model-1.mod This is XHTML-Print 1.0, a variant of XHTML Basic for printing. Copyright 1998-2003 W3C (MIT, ERCIM, Keio), All Rights Reserved. Revision: $Id: Overview.html,v 1.1 2003/10/01 15:42:12 shane Exp $ This DTD module is identified by the PUBLIC and SYSTEM identifiers: PUBLIC "-//W3C//ENTITIES XHTML-Print 1.0 Document Model 1.0//EN" SYSTEM "http://www.w3c.org/MarkUp/DTD/xhtml-print10-model-1.mod ....................................................................... --> <!-- XHTML-Print 1.0 Document Model This module describes the groupings of elements that make up common content models for XHTML-Print elements. --> <!-- Optional Elements in head ......................... --> <!ENTITY % HeadOpts.mix "( %meta.qname; | %link.qname; | %object.qname; | %style.qname; )*" > <!-- Miscellaneous Elements ............................ --> <!ENTITY % Misc.class "" > <!-- Inline Elements ................................... --> <!ENTITY % InlStruct.class "%br.qname; | %span.qname;" > <!ENTITY % InlPhras.class "| %em.qname; | %strong.qname; | %dfn.qname; | %code.qname; | %samp.qname; | %kbd.qname; | %var.qname; | %cite.qname; | %abbr.qname; | %acronym.qname; | %q.qname;" > <!ENTITY % InlPres.class "| %tt.qname; | %i.qname; | %b.qname; | %big.qname; | %small.qname; | %sub.qname; | %sup.qname; " > <!ENTITY % I18n.class "" > <!ENTITY % Anchor.class "| %a.qname;" > <!ENTITY % InlSpecial.class "| %img.qname; | %object.qname;" > <!ENTITY % InlForm.class "| %input.qname; | %select.qname; | %textarea.qname; | %label.qname;" > <!ENTITY % Inline.extra "" > <!ENTITY % Inline.class "%InlStruct.class; %InlPhras.class; %InlPres.class; %Anchor.class; %InlSpecial.class; %InlForm.class; %Inline.extra;" > <!ENTITY % InlNoAnchor.class "%InlStruct.class; %InlPhras.class; %InlPres.class; %InlSpecial.class; %InlForm.class; %Inline.extra;" > <!ENTITY % InlNoAnchor.mix "%InlNoAnchor.class; %Misc.class;" > <!ENTITY % Inline.mix "%Inline.class; %Misc.class;" > <!-- Block Elements .................................... --> <!ENTITY % Heading.class "%h1.qname; | %h2.qname; | %h3.qname; | %h4.qname; | %h5.qname; | %h6.qname;" > <!ENTITY % List.class "%ul.qname; | %ol.qname; | %dl.qname;" > <!ENTITY % Table.class "| %table.qname;" > <!ENTITY % Form.class "| %form.qname;" > <!ENTITY % BlkStruct.class "%p.qname; | %div.qname;" > <!ENTITY % BlkPhras.class "| %pre.qname; | %blockquote.qname; | %address.qname;" > <!ENTITY % BlkPres.class "| %hr.qname;" > <!ENTITY % BlkSpecial.class "%Table.class; %Form.class;" > <!ENTITY % Block.extra "" > <!ENTITY % Block.class "%BlkStruct.class; %BlkPhras.class; %BlkPres.class; %BlkSpecial.class; %Block.extra;" > <!ENTITY % Block.mix "%Heading.class; | %List.class; | %Block.class; %Misc.class;" > <!-- All Content Elements .............................. --> <!ENTITY % FlowNoTable.mix "%Heading.class; | %List.class; | %BlkStruct.class; %BlkPhras.class; %BlkPres.class; %Form.class; %Block.extra; | %Inline.class; %Misc.class;" > <!ENTITY % Flow.mix "%Heading.class; | %List.class; | %Block.class; | %Inline.class; %Misc.class;" > <!-- end of xhtml-print10-model-1.mod -->