A4用紙サイズのページでHTMLページを作成する方法は?


388

たとえば、MS WordのA4サイズのページのようにHTMLページを動作させることはできますか?

基本的に、ブラウザーでHTMLページを表示し、A4サイズのページのサイズでコンテンツの輪郭を描けるようにしたいと考えています。

簡単にするために、HTMLページにはテキストのみが含まれ(画像などは含まれず)、<br>たとえばタグはないと想定しています。

また、HTMLページを印刷すると、A4サイズの紙ページになります。


12
次のことができます。github.com/delight-im/HTML-Sheets-of-Paper
CAW


1
本当の「印刷のためのHTMLは」 comigです!stackoverflow.com/q/10641667/287948のすべての履歴と、W3CのCSSレベル3フラグメンテーションモジュールをご覧ください。
Peter Krauss、2017

それをする意図は何でしたか?WebテクノロジーのためにMS Officeを離れますか?少なくともそれは私が試していることですが、それでもいくつかの入力方法が必要です。これに答えると、この質問から始まった話は終わります。
ステファン

回答:


318

何年も前の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を選択するように注意する必要があります。

  • 72 dpi(ウェブ)= 595 X 842ピクセル
  • 300 dpi(印刷)= 2480 X 3508ピクセル
  • 600 dpi(高品質印刷)= 4960 X 7016ピクセル

しかし、私は面倒を避け、使用するクライアントに応じて発生する可能性のあるグリッチのレンダリングを回避するため、サイズ設定にcm(cm)またはmm(mm)を使用します。


1
現在の基準に一致するようにこの回答を更新していただきありがとうございます。
jumps4fun

@ A.com DPIに依存するため、pxはありません... CSSがcmet al と呼ばれるこれらの明白な測定単位をサポートするのはこのためです。リンクされた記事および/または少なくとも私の答えを読むことをお勧めします。そうすることで、質問が実際には意味をなさないことにすぐに気付くでしょう。また、不明な点がある場合は、質問を新しい質問として投稿することもできます。これはフォーラムではなく、Q&Aサイトです。\ o /
e-sushi

67

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>

19
ミリメートルを使用したウィルディーンの提案(これは非常に理にかなっています)に従って、ブラウザにピクセルの幅/高さを計算させることができます:body {height:420mm; 幅:297mm; ...}
Tim McNamara

49
A4は実際には210x297 mmです。
Fouronnes

8
それで、最後にポートレートDINA4:body { height:297mm; width:210mm; margin-left:auto; margin-right:auto; }
daVe 2014

1
これでかなりの作業を行いました。210x297の寸法は適切ですが、A4ページに完全に適合するとは見なされません。良いテストは、Chromeから直接印刷-> PDFを行い、プレビューページのサムをスクロールすることです。マージンが設定されていない場合でも、オーバーフローを防ぐために高さ全体を減らす必要があります->偶数ページがすべて空白になります。
cbmtrx 2015年

36

A4サイズは210x297mm

したがって、CSSでこれらのサイズに合うようにHTMLページを設定できます。

html,body{
    height:297mm;
    width:210mm;
}

3〜4ページ以上の動的コンテンツがある場合はどうなりますか?
jazzbpn

24

各ページでセクションを作成し、以下のコードを使用してマージン、高さ、幅を調整します。

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;
}

動作していますか?最新のFirefoxとChromeでは再現できませんでした。
Dan7、2014年

はい、主に私はクロムの開発をしています...
Pir Abdul 14年

3
@page Section1Chrome 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機能しますが、ページ固有のセレクタではありません。
Rob W

ドキュメント作成時にCSSを使用するのに慣れていない場合は、このコードを<style> </ style>タグに挿入してから、divを呼び出します(例:<div class = page> Stuff </ div) > <div class = page>その他のもの</ div>)ここで、「スタッフ」と「その他のもの」は、単一のページに含まれるコンテンツです。
mkingsbu 2017

16

HTMLを使用して、実際の用紙に実際のサイズで正しく印刷されるレポートを生成しました。

CSSファイルの単位としてmmを注意深く使用する場合、少なくとも単一のページでは問題ありません。ただし、ブラウザで印刷ズームを変更することで、失敗する可能性があります。

私がやっていたことはすべて1ページだったのを覚えているようで、ページネーションについて心配する必要はありませんでした。


14

私はグーグルで検索した後、このソリューションを見ました、「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)で動作します。


この例をFF 53.0.3で使用し、2つの横ページを次々に配置することはできません。通常の表示では問題ありませんが、[印刷プレビュー]を選択すると、3ページに拡大されます。
lofihelsinki 2017年

古い牛を塹壕からbox-shadow: none;
引きずり出すつもりは

高さを変更する必要があります
Jomal Johny

3〜4ページ以上の動的コンテンツがある場合はどうなりますか?
jazzbpn

11
<link rel="stylesheet" href="/css/style.css" type="text/css">
<link rel="stylesheet" href="/css/print.css" type="text/css" media="print">

あなたの通常ではstyle.css

table.tableclassname {
  width: 400px;
}

あなたのprint.css

table.tableclassname {
  width: 16 cm;
}

10

PPIとDPIは、ドキュメントがブラウザから印刷される方法にまったく違いをもたらしません。プリンタは、画面のドットピッチや画像のDPIなどの情報を取得しません。画像を印刷する場合、画像の表示方法に比例したサイズで印刷されます。ブラウザのプリントプロセッサは、画像のDPIを72dpiなどのかなり低いものから、ドキュメントの残りのDPIに増やします。画像がページ幅の半分として表示され、物理的には約4インチの幅で表示されるとします。画像のピクセル幅は、ブラウザで正しく表示するには約300pxになります。公称300DPIで印刷するまでに、プロセッサはピクセルを追加しますそして、画像は約1200pxに成長し、300 DPIで4インチになります。

テキストなどのベクターまたは非ピクセルベースの要素の場合、プリンターは独自のDPIをドライバーから選択します。これは、画面のドットピッチやブラウザーの幅などとは関係ありません。ブラウザーの幅が3000pxの場合、プリントプロセッサーは適切にテキストを折り返します。

印刷表示の作成が難しい理由は次のとおりです。各ブラウザとプリンタは、テキストサイズ(pt、em、px)と間隔を独自の方法で解釈します。使用するプリンター、ブラウザー、さらにはOSによっても、ページごとに異なる行数と文字数が得られます。そのため、ブラウザーとプリンターを使用してコンピューターでテストし、640x900pxのボックスにテキストを表示して、完全に印刷できることがわかったとしても、次に印刷しようとする人は、別の方法で印刷する可能性があります。実際には、各プリンターとブラウザーに毎回同じものを強制する方法はありません。

ピクセルを忘れ、さらにDPIも忘れます。ピクセルを使用できるのは、プリンターの印刷可能領域の幅をシミュレートするテーブルの幅を設定することだけです。その場合、幅640pxが近いことがわかりました。


多くのページを読んでください。DPIを大きくすると、印刷時にサイズが小さくなる(3000px / 300dpi = 10インチ)と言われています。しかし、私のクロムブラウザーから印刷する場合、600 DPIと1200 DPIは、用紙上でまったく同じサイズになります。これを読むまでは本当に戸惑いました!
王盛2017

10

同様の問題を探して私はこれを見つけました-http://www.indigorose.com/forums/archive/index.php/t-13334.html

A4はドキュメント形式であり、画像解像度に依存する画面イメージです。たとえば、A4ドキュメントは次のようにサイズ変更されます。

  • 72 dpi(ウェブ)= 595 X 842ピクセル
  • 300 dpi(印刷)= 2480 X 3508ピクセル(これは私が知っているように「A4」、つまり「210mm X 297mm @ 300 dpi」)
  • 600 dpi(印刷)= 4960 X 7016ピクセル

8

このテーマはかなり古いことは知っていますが、そのトピックについての私の経験を共有したいと思います。実際、毎日のレポートに役立つモジュールを探していました。ドキュメントとレポートをHTML + CSS(Word、Latex、OOなどの代わりに)で作成しています。目的は、それらをA4用紙に印刷して友人と共有することです...検索する代わりに、「ページ」、ページ番号、要約、ヘッダーを処理できる単純なlibを実装するための小さな面白いコーディングセッションを行うことにしました。 、フッター、...最後に、私は~~ 2時間でそれを実行しましたが、それが今までで最高のツールではないことはわかっていますが、私の目的にはほとんど問題ありません。私のリポジトリでこのプロジェクトを見て、アイデアを共有することをためらわないでください。100%で探しているものではないかもしれませんが、このモジュールが役立つと思います。

基本的には「幅200mm」のボディのページを作成しています。そして高さの容器:290mm(A4より小さい)。次に、改ページ後:常に使用しました。したがって、ブラウザの「印刷」オプションは、ページを分割するタイミングを認識します。

リポジトリ:https : //github.com/kursion/jsprint


6

技術的には可能ですが、すべてのブラウザで画面に表示されているとおりにページを印刷するには、多くの作業が必要になります。また、ほとんどのブラウザーは、URL、印刷日付、およびページ番号を強制的に印刷しますが、これは必ずしも望ましいことではありません。これを変更したり無効にしたりすることはできません。

代わりに、画面のコンテンツに基づいてPDFを作成し、そのPDFをダウンロードや印刷用に提供することをお勧めします。が最も可能なPDFライブラリが支払われる、いくつかある無料の代替案の基本的なPDFファイルを作成するために利用できるが。


5

私は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:

https://jsfiddle.net/ajofmm7r/


全ページの高さはピクセルで何ですか?
khaverim


3

a4ページの縦横比を想定してレイアウトを設定することは完全に可能です。それに応じて幅と高さを設定するだけで済みます(おそらくwindow.innerHeightwindow.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プリントがきれいになります。それが時間の投資に値するかどうかは別の問題です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.