* 仕様書

[REFS[
- [12] '''[CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#print-media>'''
- [15] '''[CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#printing>'''
- [17] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#window>
- [31] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#event-handlers-on-elements,-document-objects,-and-window-objects>
- [34] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#the-end>
]REFS]

* 物理形

[13] [[利用者エージェント]]は[[利用者]]に対して[DFN[[RUBYB[[[物理形を得る]]]@en[obtain a physical form]]]]
(または物理形の[RUBYB[表現]@en[representation]]を得る) 機会を要求できるようにすることが[[期待されています]] [SRC[>>12]]。
ここで「物理形を得る」とは例えば[[印刷]]のことを、
「物理形の表現を得る」とは例えば [[PDF]] への変換のことをいいます
[SRC[>>15]]。

[19] [[利用者]]が[[物理形を得る]] (または表現を得る) 機会を要求した時には、 [[printing steps]]
を走らせる[['''べきです''']] [SRC[>>15]]。

;; [30] 「物理形を得る」が >>19 と >>26 で異なる意味で使われているように見えます。

[14] 実際に[[物理形を得る]] (または表現を得る) 際には、当該 [CODE(DOMi)@en[[[Document]]]] 
の[[印刷]][[媒体]]用の新しい[[レンダリング]]を作成することが[[期待されています]] [SRC[>>12]]。

-*-*-

[58] 
多くの
[[Webブラウザー]]には、
「[[印刷]]」
や
「[[印刷プレビュー]]」
の機能が備わっています。
一部の
[[Webブラウザー]]には、
[[PDF]]
出力機能が備わっています。
これらの機能が[[物理形を得る]]操作を呼び出します。

* [CODE(JS)@en[window.print]] (DOM)

[16] [CODE(DOMi)@en[[[Window]]]] [[インターフェイス]]の [DFN[[CODE(DOMm)@en[[[print]]]]]]
は、
次のようにします。
[SRC[>>15]]

[FIG(steps)[
= [53] 
[VAR[文書]]を、[[文脈オブジェクト]]の[F[文書]]に設定します。
= 
[18] 
[VAR[文書]]の
[F[ready for post-load tasks]] 
が[[真]]の場合、
== [50] [[printing steps]] を実行します。
= [51] 
それ以外の場合、
== 
[52] 
[VAR[文書]]の 
[F[print when loaded]]
を、
[[真]]に設定します。
]FIG]

[54] [[文書]]は、
[DFN[[F[print when loaded]]]]
フラグを持ちます。
初期値は[[偽]]です。

[33] [[print when loaded]] フラグが設定されると、後に [[stop parsing]] 手順が [[HTML構文解析器]]または
[[XML構文解析器]]によって実行される際に、 [[printing steps]] が呼び出されます [SRC[>>34]]。

;; [37] つまり、 [CODE(DOMe)@en[[[load]]]] ([[stops parsing]]) まで[[printing steps]]の実行は遅延されます。

[44] [[Chrome]] は [CODE[execCommand]] の[[命令]] [DFN[[CODE[print]]]]
でも同じように動作します。
[TIME[2016-12-07T01:01:05.300Z]]

* printing steps

[20] [DFN[[[printing steps]]]] とは、次の手順です [SRC[>>15]]。
[FIG(steps)[
= [21] [[利用者]]にメッセージを表示するか、ここで終わるか、あるいはその両方を実行して構いません。
=- [22] 例えば[[キオスクモード]]では黙って無視して構いません。
=- [23] 例えば[[モバイル機器]]の[[ブラウザー]]で印刷機がないときはメッセージを出してから「[[PDF]] で保存」
オプションを提示しても構いません。
= [40] [[文脈オブジェクト]]の[F[文書]]の[F[活性砂箱化フラグ集合]]の
[F[sandboxed modals flag]] が設定されていれば、
== [43] ここで停止します。
= [24] 印刷される[[文書]]とその[[子供閲覧文脈]]の [CODE(DOMi)@en[[[Window]]]] で
[DFN[[CODE(DOMe)@en[[[beforeprint]]]]]] [[単純イベントを発火]]します。
= [26] [[物理形を得る]] (または表現を得る) 機会を提供する[['''べきです''']]。
=- [27] [[利用者]]がこれを受け付けるか断るかするまで待って[['''構いません''']]。待つ場合は [[pause]] しなければ[['''なりません''']]。
=- [28] 待たない場合であっても、この時点での[[文書]]の状態を使わなければ[['''なりません''']]。
= [29] 印刷される[[文書]]とその[[子供閲覧文脈]]の [CODE(DOMi)@en[[[Window]]]] で
[DFN[[CODE(DOMe)@en[[[afterprint]]]]]] [[単純イベントを発火]]します。
]FIG]

[39] [[物理形を得る]]機会を提供するとは、具体的には[[プラットフォーム]]または[[アプリケーション]]の[[印刷]]オプションを表す[[モーダルダイアログ]]を表示することを指しています。
[[利用者]]はその[[ダイアログ]]上での操作により、実際に[[印刷]]を行うことを指示したり、
[[ダイアログ]]を閉じて処理を継続することを指示したりできます。

[45] [[プラットフォーム]]が提供する[[印刷]]ダイアログを表示する
[[Webブラウザー]]が多いですが、 [[Chrome]] は独自のダイアログを持っています。
[[プラットフォーム]]に登録された[[プリンター]]の他に、 [[PDF]] として保存するオプションが用意されています。
[TIME[2017-02-22T04:07:04.00Z]]

* [CODE(DOMa)@en[onbeforeprint]] 属性、 [CODE(DOMa)@en[onafterprint]] 属性

[32] [CODE(DOMi)@en[[[Window]]]] [[オブジェクト]]、 [CODE(HTMLe)@en[[[body]]]] [[要素]]、
[CODE(HTMLe)@en[[[frameset]]]] [[要素]]の [DFN[[CODE(DOMa)@en[[[onbeforeprint]]]]]] [[属性]]、
[DFN[[CODE(DOMa)@en[[[onafterprint]]]]]] [[属性]]は、それぞれ [CODE(DOMi)@en[[[Window]]]]
[[オブジェクト]]の[[イベント型]]
[CODE(DOMe)@en[[[beforeprint]]]]、[CODE(DOMe)@en[[[afterprint]]]] の[[イベントハンドラー]]です [SRC[>>31]]。

* 媒体型 [CODE(CSS)@en[print]]

[3] [[媒体型]] [DFN[[CODE(CSS)@en[[[print]]]]]] は、[[印刷]]用の表示モードを表します。

* 印刷プレビュー

[35] 多くの [[Webブラウザー]]は、[[印刷]]機能と[[印刷プレビュー]]モードを実装しています。

[36] [[印刷プレビュー]]モードでは、実際に[[印刷]]する場合と同じ形で画面上に[[レンダリング]]されます。

* 拡縮

[62] 
どうやら [[Chrome]] は[[要素]]がページに収まりきらないとき、おそらくページサイズよりそこまで大きすぎはしないとき、
勝手に縮小してページに収まるようにするみたいです。
便利機能なのかもしれませんが、
なんのことわりもなく勝手に実施され、
[[著者]]も[[利用者]]も制御不能なのが困ったところです。
[TIME[2024-11-14T11:50:38.300Z]]


* 関連

[SEE[ [[スクリーンショット (Web)]] ]]

* 歴史

[60] 
[CITE[HTML Layout Extensions]], [TIME[1996-05-03T20:19:47.000Z]], [TIME[2024-09-07T08:11:24.311Z]] <https://www.w3.org/Printing/fmtext.html>


[1]
[CITE[Printing the Web: Solutions and Techniques | Smashing Magazine]] ([CODE[2007-02-24 00:44:42 +09:00]] 版) <http://www.smashingmagazine.com/2007/02/21/printing-the-web-solutions-and-techniques/>
([[名無しさん]] [WEAK[2007-02-23 16:09:40 +00:00]])

[2]
[CITE[TRANS - 印刷用CSSをもっとよくするための4つのTips。]] ([CODE[2007-04-22 03:28:49 +09:00]] 版) <http://d.hatena.ne.jp/aratako0/20070421/p1>
([[名無しさん]] [WEAK[2007-04-23 01:23:19 +00:00]])

[4]
[CITE@de[W3C Print Symposium 2006]] ([CODE[2006-10-23 20:51:46 +09:00]] 版) <http://www.w3c.de/Events/2006/PrintSymposium_en.html>

[5] [CITE[CSS Print Profile]]
( ([TIME[2013-03-14 20:50:03 +09:00]] 版))
<http://www.w3.org/TR/2013/NOTE-css-print-20130314/#section-mediatypes>

[6] [CITE@en[The New Publishing - A W3C Workshop on the Open Web Platform and the Traditional Print Publishing Industry]]
( ([TIME[2013-10-04 08:21:37 +09:00]] 版))
<http://www.w3.org/2012/12/global-publisher/report.html>

[7] [CITE['''['''whatwg''']''' window.print() when printing is not supported]]
([TIME[2010-03-23 11:24:14 +09:00]] 版)
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2010-March/025597.html>

[8] [CODE(HTMLa)@en[[[onload]]]] で [CODE(JS)@en[[[window]].[[print]]()]]
する頁がありました。うざいですね。
[CODE(JS)@en[[[window]].[[open]]()]]
と同じで制限するべきではないでしょうか。
([[名無しさん]] [WEAK[2007-07-01 12:42:56 +00:00]])

[REFS[
- [9] [CITE[Bug 43658 – Calling window.print() before the page is loaded results in a blank printed page]]
( ([TIME[2011-01-22 02:20:14 +09:00]] 版))
<https://bugs.webkit.org/show_bug.cgi?id=43658>
- [10] [CITE[''''''[''''''whatwg'''''']'''''' Browsers delay window.print() action until page load finishes]]
( ([TIME[2011-08-03 08:57:12 +09:00]] 版))
<http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-August/032775.html>
- [11] [CITE@ja[はてなブックマーク - コメントなし - 2009年12月24日]]
([TIME[2010-01-01 12:19:17 +09:00]] 版)
<http://b.hatena.ne.jp/edvakf/20091224#bookmark-18107939>
- [38] [CITE@en[Block modal dialogs by default in sandboxed documents · whatwg/html@bbccfc9]] ([TIME[2015-09-10 00:20:23 +09:00]] 版) <https://github.com/whatwg/html/commit/bbccfc976754def0c187ac8ce5891d2fb20dfc15>
]REFS]

[25] [CITE@en[Remove the storage mutex due to lack of implementation · whatwg/html@1b918cf]] ([TIME[2015-12-16 14:38:10 +09:00]] 版) <https://github.com/whatwg/html/commit/1b918cf72fcbba011f83b92ab5d1f483fb1cafa3>

[41] [CITE@en[Issue 173 - chromium - Missing a Print Preview option - Monorail]]
( ([TIME[2016-06-18 01:20:17 +09:00]]))
<https://bugs.chromium.org/p/chromium/issues/detail?id=173>

[42] [CITE@en[Use the Window's associated Document for allow-modals sandbox checks]]
([[domenic]]著, [TIME[2016-07-14 06:37:56 +09:00]])
<https://github.com/whatwg/html/commit/29ebd5b6e8c4ba4006115a784c5c6c87dc151489>

[46] [CITE@en[22698 – <canvas>: API to make <canvas> prettier when printing]]
([TIME[2017-07-23 14:21:13 +09:00]])
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=22698>

[47] [CITE@en[user prompts: drop mention of window.print]]
([[andreastt]]著, [TIME[2017-09-11 18:13:07 +09:00]])
<https://github.com/w3c/webdriver/commit/cbd6c0b5c9503f41a9249174385be988b9727f07>

[48] [CITE@en[Make clear that window.print user prompt · Issue #1090 · w3c/webdriver]]
([TIME[2017-09-12 11:44:54 +09:00]])
<https://github.com/w3c/webdriver/issues/1090>

[49] [CITE@en[user prompts: drop mention of window.print by andreastt · Pull Request #1091 · w3c/webdriver]]
([TIME[2017-09-12 11:45:17 +09:00]])
<https://github.com/w3c/webdriver/pull/1091>

[55] [CITE@en[Make print() run synchronously]]
([[TimothyGu]]著, [TIME[2019-06-24 20:22:45 +09:00]])
<https://github.com/whatwg/html/commit/d89b68a1006d1e211a33e266aa3c3207abafd715>

[56] [CITE@en["Printing steps" should not run in parallel · Issue #4686 · whatwg/html]]
([TIME[2020-07-13 14:13:00 +09:00]])
<https://github.com/whatwg/html/issues/4686>

[57] [CITE@en[Make print() run synchronously by TimothyGu · Pull Request #4690 · whatwg/html]]
([TIME[2020-07-13 14:13:35 +09:00]])
<https://github.com/whatwg/html/pull/4690>

[59] [CITE@en[Editorial: nested browsing context is a member, not a type]]
([[annevk]], [TIME[2019-11-27 02:46:03 +09:00]], [TIME[2022-01-18T10:01:38.000Z]])
<https://github.com/whatwg/html/commit/6b737bbc428facf34ec3728c0912cf9e172d0ea4>

[61] [CITE@en[Printed length of html element greater than defined in the css size of element. '''['''40329050''']''' - Chromium]], [TIME[2024-11-14T06:17:03.000Z]] <https://issues.chromium.org/issues/40329050>

