たとえば、MS WordのA4サイズのページのようにHTMLページを動作させることはできますか?
基本的に、ブラウザーでHTMLページを表示し、A4サイズのページのサイズでコンテンツの輪郭を描けるようにしたいと考えています。
簡単にするために、HTMLページにはテキストのみが含まれ(画像などは含まれず)、<br>
たとえばタグはないと想定しています。
また、HTMLページを印刷すると、A4サイズの紙ページになります。
たとえば、MS WordのA4サイズのページのようにHTMLページを動作させることはできますか?
基本的に、ブラウザーでHTMLページを表示し、A4サイズのページのサイズでコンテンツの輪郭を描けるようにしたいと考えています。
簡単にするために、HTMLページにはテキストのみが含まれ(画像などは含まれず)、<br>
たとえばタグはないと想定しています。
また、HTMLページを印刷すると、A4サイズの紙ページになります。
回答:
何年も前の2005年11月、AlistApart.comは、HTMLとCSSだけを使用して本を出版する方法についての記事を発表しました。参照:http : //alistapart.com/article/boom
これがその記事の抜粋です。
CSS2には、連続メディア(スクロールバーなど)とは対照的に、ページングメディア(紙など)の概念があります。スタイルシートは、ページのサイズとそのマージンを設定できます。ページテンプレートには名前を付けることができ、要素には印刷する名前付きページを指定できます。また、ソースドキュメントの要素によって強制的に改ページが行われる場合があります。以下は、使用したスタイルシートのスニペットです。
@page { size: 7in 9.25in; margin: 27mm 16mm 27mm 16mm; }
米国に拠点を置く出版社がいるため、ページサイズはインチで指定されていました。私たちはヨーロッパ人なので、メートル法の測定を続けました。CSSは両方を受け入れます。
ページサイズとマージンを設定した後、適切な場所に改ページがあることを確認する必要がありました。次の抜粋は、章と付録の後に改ページが生成される方法を示しています。
div.chapter, div.appendix { page-break-after: always; }
また、CSS2を使用して名前付きページを宣言しました。
div.titlepage { page: blank; }
つまり、タイトルページは「空白」という名前のページに印刷されます。CSS2は名前付きページの概念を記述しましたが、それらの値はヘッダーとフッターが利用可能な場合にのみ明らかになります。
とにかく…
A4を印刷したいので、もちろん異なる寸法が必要になります。
@page {
size: 21cm 29.7cm;
margin: 30mm 45mm 30mm 45mm;
/* change the margins as you want them to be. */
}
記事では改ページの設定などについて詳しく説明しているので、完全に読みたいと思うかもしれません。
あなたの場合、トリックは最初に印刷CSSを作成することです。最近のほとんどのブラウザー(> 2005)はズームをサポートしており、印刷CSSに基づいてWebサイトを表示できます。
ここで、Web表示を少し違ったものにして、ほとんどのブラウザー(古いものを含む)にも適合するようにデザイン全体を適応させる必要があります。そのためには、Web CSSファイルを作成するか、印刷CSSの一部をオーバーライドする必要があります。Webディスプレイ用のCSSを作成するときは、ブラウザーのサイズはどのようなものでもかまいません(「モバイル」から「大画面TV」まで考えてください)。意味:Web CSSの場合、ページ幅と画像幅は、可変幅(%)を使用して設定し、できるだけ多くのディスプレイデバイスとWebブラウジングクライアントをサポートするのが最適です。
編集(26-02-2015)
今日、たまたまSmashingMagazineで、HTMLとCSSを使用した印刷用のデザインに飛び込んでいる別のより最近の記事に偶然遭遇しました。
編集(30-10-2018)
これはsize
有効なCSS3ではないという点で注目されました。これは確かに正しいです。記事に記載されているコードを繰り返しただけです(上記のように)古き良きCSS2でした(記事を見て、この回答は最初に公開されました)。とにかく、コピーと貼り付けに便利なCSS3コードを次に示します。
@media print {
body{
width: 21cm;
height: 29.7cm;
margin: 30mm 45mm 30mm 45mm;
/* change the margins as you want them to be. */
}
}
本当にピクセルが必要だと思う場合(実際にはピクセルの使用を避ける必要があります)、印刷用の正しいDPIを選択するように注意する必要があります。
しかし、私は面倒を避け、使用するクライアントに応じて発生する可能性のあるグリッチのレンダリングを回避するため、サイズ設定にcm
(cm)またはmm
(mm)を使用します。
cm
et al と呼ばれるこれらの明白な測定単位をサポートするのはこのためです。リンクされた記事および/または少なくとも私の答えを読むことをお勧めします。そうすることで、質問が実際には意味をなさないことにすぐに気付くでしょう。また、不明な点がある場合は、質問を新しい質問として投稿することもできます。これはフォーラムではなく、Q&Aサイトです。\ o /
A4と同じピクセル寸法のページをWebブラウザーに強制的に表示させるのはかなり簡単です。ただし、物事がレンダリングされるときにいくつかの癖があるかもしれません。
モニターが72 dpiを表示すると仮定すると、次のようなものを追加できます。
<!DOCTYPE html>
<html>
<head>
<style>
body {
height: 842px;
width: 595px;
/* to centre page on screen*/
margin-left: auto;
margin-right: auto;
}
</style>
</head>
<body>
</body>
</html>
body { height:297mm; width:210mm; margin-left:auto; margin-right:auto; }
各ページでセクションを作成し、以下のコードを使用してマージン、高さ、幅を調整します。
A4サイズで印刷する場合。
次にユーザー
Size : 8.27in and 11.69 inches
@page Section1 {
size: 8.27in 11.69in;
margin: .5in .5in .5in .5in;
mso-header-margin: .5in;
mso-footer-margin: .5in;
mso-paper-source: 0;
}
div.Section1 {
page: Section1;
}
次に、すべてのコンテンツを含むdivを作成します。
<div class="Section1">
type your content here...
</div>
または
@media print {
.page-break {
height: 0;
page-break-before: always;
margin: 0;
border-top: none;
}
}
body, p, a,
span, td {
font-size: 9pt;
font-family: Arial, Helvetica, sans-serif;
}
body {
margin-left: 2em;
margin-right: 2em;
}
.page {
height: 947px;
padding-top: 5px;
page-break-after: always;
font-family: Arial, Helvetica, sans-serif;
position: relative;
border-bottom: 1px solid #000;
}
@page Section1
Chrome 41.0.2272.77で作業できません。あなたは本当にあなたの答えが機能することを確信していますか?たとえばdata:text/html,<style>@page x{size:100pt 200pt}</style><div style="page:x">x</div>
、印刷プレビューにアクセスして開いてみてください。それとに違いはありませんdata:text/html,x
。で置き換える@page x
と@page
機能しますが、ページ固有のセレクタではありません。
私はグーグルで検索した後、このソリューションを見ました、「A4 CSSページテンプレート」(codepen.io)を検索してください。<page>タグを使用して、ブラウザにA4(A3、A5、同じく縦長)サイズの領域を表示します。このタグの内部にはコンテンツが表示されますが、絶対的な位置は依然としてブラウザー領域に対してです。
body {
background: rgb(204,204,204);
}
page {
background: white;
display: block;
margin: 0 auto;
margin-bottom: 0.5cm;
box-shadow: 0 0 0.5cm rgba(0,0,0,0.5);
}
page[size="A4"] {
width: 21cm;
height: 29.7cm;
}
page[size="A4"][layout="portrait"] {
width: 29.7cm;
height: 21cm;
}
@media print {
body, page {
margin: 0;
box-shadow: 0;
}
}
<page size="A4">A4</page>
<page size="A4" layout="portrait">A4 portrait</page>
これは、他のcss / js-libraryを含めなくても機能します。現在のブラウザー(IE、FF、Chrome)で動作します。
box-shadow: none;
PPIとDPIは、ドキュメントがブラウザから印刷される方法にまったく違いをもたらしません。プリンタは、画面のドットピッチや画像のDPIなどの情報を取得しません。画像を印刷する場合、画像の表示方法に比例したサイズで印刷されます。ブラウザのプリントプロセッサは、画像のDPIを72dpiなどのかなり低いものから、ドキュメントの残りのDPIに増やします。画像がページ幅の半分として表示され、物理的には約4インチの幅で表示されるとします。画像のピクセル幅は、ブラウザで正しく表示するには約300pxになります。公称300DPIで印刷するまでに、プロセッサはピクセルを追加しますそして、画像は約1200pxに成長し、300 DPIで4インチになります。
テキストなどのベクターまたは非ピクセルベースの要素の場合、プリンターは独自のDPIをドライバーから選択します。これは、画面のドットピッチやブラウザーの幅などとは関係ありません。ブラウザーの幅が3000pxの場合、プリントプロセッサーは適切にテキストを折り返します。
印刷表示の作成が難しい理由は次のとおりです。各ブラウザとプリンタは、テキストサイズ(pt、em、px)と間隔を独自の方法で解釈します。使用するプリンター、ブラウザー、さらにはOSによっても、ページごとに異なる行数と文字数が得られます。そのため、ブラウザーとプリンターを使用してコンピューターでテストし、640x900pxのボックスにテキストを表示して、完全に印刷できることがわかったとしても、次に印刷しようとする人は、別の方法で印刷する可能性があります。実際には、各プリンターとブラウザーに毎回同じものを強制する方法はありません。
ピクセルを忘れ、さらにDPIも忘れます。ピクセルを使用できるのは、プリンターの印刷可能領域の幅をシミュレートするテーブルの幅を設定することだけです。その場合、幅640pxが近いことがわかりました。
同様の問題を探して私はこれを見つけました-http://www.indigorose.com/forums/archive/index.php/t-13334.html
A4はドキュメント形式であり、画像解像度に依存する画面イメージです。たとえば、A4ドキュメントは次のようにサイズ変更されます。
このテーマはかなり古いことは知っていますが、そのトピックについての私の経験を共有したいと思います。実際、毎日のレポートに役立つモジュールを探していました。ドキュメントとレポートをHTML + CSS(Word、Latex、OOなどの代わりに)で作成しています。目的は、それらをA4用紙に印刷して友人と共有することです...検索する代わりに、「ページ」、ページ番号、要約、ヘッダーを処理できる単純なlibを実装するための小さな面白いコーディングセッションを行うことにしました。 、フッター、...最後に、私は~~ 2時間でそれを実行しましたが、それが今までで最高のツールではないことはわかっていますが、私の目的にはほとんど問題ありません。私のリポジトリでこのプロジェクトを見て、アイデアを共有することをためらわないでください。100%で探しているものではないかもしれませんが、このモジュールが役立つと思います。
基本的には「幅200mm」のボディのページを作成しています。そして高さの容器:290mm(A4より小さい)。次に、改ページ後:常に使用しました。したがって、ブラウザの「印刷」オプションは、ページを分割するタイミングを認識します。
リポジトリ:https : //github.com/kursion/jsprint
技術的には可能ですが、すべてのブラウザで画面に表示されているとおりにページを印刷するには、多くの作業が必要になります。また、ほとんどのブラウザーは、URL、印刷日付、およびページ番号を強制的に印刷しますが、これは必ずしも望ましいことではありません。これを変更したり無効にしたりすることはできません。
代わりに、画面のコンテンツに基づいてPDFを作成し、そのPDFをダウンロードや印刷用に提供することをお勧めします。が最も可能なPDFライブラリが支払われる、いくつかある無料の代替案の基本的なPDFファイルを作成するために利用できるが。
私は1998年以来A4ページに印刷するために商用レポートで680pxを使用しています。700pxはマージンのサイズによっては正しく収まりませんでした。最近のブラウザはページを縮小してプリンタのページに合わせることができますが、680ピクセルを使用すると、ほとんどすべてのブラウザで正しく印刷されます。
これは、実行コードスニペットを実行して結果を確認するためのHTMLです。
window.print();
<table width=680 border=1 cellpadding=20 cellspacing=0>
<tr><th>#</th><th>name</th></tr>
<tr align=center><td>1</td><td>DONALD TRUMP</td></tr>
<tr align=center><td>2</td><td>BARACK OBAMA</td></tr>
</table>
JSFiddle:
行うための多くの方法:
html,body{
height:297mm;
width:210mm;
}
html,body{
height:29.7cm;
width:21cm;
}
html,body{
height: 842px;
width: 595px;
}
a4ページの縦横比を想定してレイアウトを設定することは完全に可能です。それに応じて幅と高さを設定するだけで済みます(おそらくwindow.innerHeight
、window.innerWidth
それが信頼できる場合、私はわからないが)。
トリッキーな部分はA4の印刷です。たとえばJavaScriptは、window.print
メソッドを使用した基本的なページの印刷のみをサポートしてい ます。@Prutswonderが提案したように、WebページからPDFを作成することは、おそらくこれを行う最も洗練された方法です(そもそもPDFドキュメントを提供すること以外)。ただし、これは思ったほど簡単ではありません。HTMLからPDFを作成するためのすべてのオープンソースJavaクラスの説明があるリンクは次のとおりです:http : //www.javaworld.com/javaworld/jw-04-2006/jw-0410-html.html。
A4プロポーションでPDFを作成すると、ページのA4プリントがきれいになります。それが時間の投資に値するかどうかは別の問題です。