682 Stimmen

Wie verwendet man HTML, um Kopf- und Fußzeilen auf jede gedruckte Seite eines Dokuments zu drucken?

Ist es möglich, HTML-Seiten mit eigenen Kopf- und Fußzeilen auf jeder gedruckten Seite zu drucken?

Ich möchte den Schriftzug "UNCLASSIFIED" in Rot, Arial, Größe 16pt oben und unten auf jeder Seite anbringen. gedruckt Seite, unabhängig von ihrem Inhalt.

Zur Verdeutlichung: Wenn das Dokument auf 5 Seiten gedruckt wurde, sollte jede Seite die benutzerdefinierte Kopf- und Fußzeile haben.

Weiß jemand, ob dies mit HTML/CSS möglich ist?

431voto

Infotekka Punkte 9981

Wenn Sie das Element, das Sie als Fußzeile verwenden möchten, auf position:fixed und bottom:0 setzen, wird dieses Element beim Drucken der Seite am unteren Rand jeder gedruckten Seite wiederholt. Das Gleiche gilt für ein Kopfzeilenelement, nur dass Sie stattdessen top:0 einstellen.

Zum Beispiel:

<div class="divFooter">UNCLASSIFIED</div>

CSS:

@media screen {
  div.divFooter {
    display: none;
  }
}
@media print {
  div.divFooter {
    position: fixed;
    bottom: 0;
  }
}

196voto

Ian Boyd Punkte 232380

Ich glaube, die richtige Antwort ist, dass HTML 5 und CSS3 keine Unterstützung für das Drucken von Kopf- und Fußzeilen in print Medien.

Und obwohl man es vielleicht mit simulieren kann:

  • Tabellen
  • Blöcke mit fester Position

beide haben Fehler, die verhindern, dass sie die ideale allgemeine Lösung sind.

104voto

tblznbits Punkte 6245

Ich habe gerade die Hälfte meines Tages damit verbracht, eine Lösung zu finden, die bei mir tatsächlich funktioniert hat, und ich dachte, ich würde meine Ergebnisse mit Ihnen teilen. Das Problem, das ich mit den obigen Lösungen hatte, war, dass sich alle meine Absatzelemente mit der Fußzeile, die ich unten auf der Seite haben wollte, überschneiden würden. Um dies zu umgehen, habe ich das folgende CSS verwendet:

footer {
  font-size: 9px;
  color: #f00;
  text-align: center;
}

@page {
  size: A4;
  margin: 11mm 17mm 17mm 17mm;
}

@media print {
  footer {
    position: fixed;
    bottom: 0;
  }

  .content-block, p {
    page-break-inside: avoid;
  }

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

El page-break-inside para p y content-block war für mich entscheidend. Jedes Mal, wenn ich eine p nach einer h* wickle ich sie beide in ein div class = "content-block"> um sicherzustellen, dass sie zusammenbleiben und nicht zerbrechen.

Ich hoffe, dass jemand findet diese nützlich, weil es dauerte etwa 3 Stunden, um herauszufinden, (Ich bin auch neu in CSS / HTML, so gibt es, dass ...)

EDIT

Auf Anfrage in den Kommentaren füge ich ein Beispiel-HTML-Dokument hinzu. Kopieren Sie dieses in eine HTML-Datei, öffnen Sie es und wählen Sie dann die Option zum Drucken der Seite. Die Druckvorschau sollte zeigen, dass dies funktioniert. Bei mir hat es in Firefox und IE funktioniert, aber Chrome hat die Schrift so klein gemacht, dass sie nicht mehr auf eine Seite passt, also hat es dort nicht funktioniert.

footer {
  font-size: 9px;
  color: #f00;
  text-align: center;
}

@page {
  size: A4;
  margin: 11mm 17mm 17mm 17mm;
}

@media print {
  footer {
    position: fixed;
    bottom: 0;
  }

  .content-block, p {
    page-break-inside: avoid;
  }

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

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <h1>
      Example Document
    </h1>
    <div>
      <p>
        This is an example document that shows how to have a footer that repeats at the bottom of every page, but also isn't covered up by paragraph text.
      </p>
    </div>
    <div>
      <h3>
        Example Section I
      </h3>
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vestibulum metus sit amet urna lobortis sollicitudin. Nulla mattis purus porta lorem tempor, a cursus tellus facilisis. Aliquam pretium nibh vitae elit placerat vestibulum. Duis felis ipsum, consectetur id pellentesque in, porta sit amet sapien. Ut tristique enim sem, laoreet bibendum nisl fermentum vitae. Ut aliquet sem ac lorem malesuada sodales. Fusce iaculis ipsum ex, in mollis dolor dapibus sit amet. In convallis felis in orci fermentum gravida a vel orci. Sed tincidunt porta nibh sit amet varius. Donec et odio eget odio tempus auctor ac eget ex.

        Pellentesque vitae augue sed purus dictum ultricies at eu neque. Nullam ut mauris a purus tristique euismod. Sed elementum, leo id placerat congue, leo tellus pharetra orci, eget ultricies odio quam sit amet ipsum. Praesent feugiat, lorem at commodo egestas, felis ligula pharetra sapien, in placerat mauris nisi aliquet tortor. Quisque nibh lectus, laoreet vel mollis a, tincidunt vel ipsum. Sed blandit vehicula sollicitudin. Donec et sapien justo. Ut fermentum ipsum imperdiet diam condimentum, eget varius sapien dictum. Sed sed elit egestas libero maximus finibus eu eget massa.

        Duis finibus vestibulum finibus. Nunc lobortis lacus ut libero mattis tempor. Nulla a nunc at nisl elementum congue. Nunc eu consectetur mauris. Etiam non placerat massa. Etiam eu urna in metus tempus molestie sed eget diam. Nunc sem velit, elementum sit amet fringilla in, dictum sit amet sem. Quisque convallis faucibus purus dignissim dictum. Sed semper, mi vel accumsan sollicitudin, massa massa pellentesque justo, eget auctor sapien enim ac elit.

        Nullam turpis augue, lacinia ut libero ac, rhoncus bibendum ligula. Mauris ullamcorper maximus turpis, a consequat turpis bibendum sit amet. Nam vitae dui nec velit hendrerit faucibus. Vivamus nunc diam, porta tristique augue nec, dignissim venenatis felis. Proin mattis id risus in feugiat. Etiam cursus faucibus nisi. In in nisi ullamcorper, convallis lectus et, ornare nulla. Cras tristique nulla eros, non maximus odio imperdiet eu. Nullam egestas dignissim est, et fringilla odio pretium eleifend. Nullam tincidunt sapien fermentum, rhoncus risus ac, ullamcorper libero. Vestibulum bibendum molestie dui nec tincidunt. Mauris tempus, orci ut congue vulputate, erat orci aliquam orci, sed eleifend orci dui sed tellus. Pellentesque pellentesque massa vulputate urna pretium, consectetur pulvinar orci pulvinar.

        Donec aliquet imperdiet ex, et tincidunt risus convallis eget. Etiam eu fermentum lectus, molestie eleifend nisi. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam dignissim, erat vitae congue molestie, ante urna sagittis est, et sagittis lacus risus vitae est. Sed elementum ipsum et pellentesque dignissim. Sed vehicula feugiat pretium. Donec ex lacus, dictum faucibus lectus sit amet, tempus hendrerit ante. Ut sollicitudin sodales metus, at placerat risus viverra ut.

        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vestibulum metus sit amet urna lobortis sollicitudin. Nulla mattis purus porta lorem tempor, a cursus tellus facilisis. Aliquam pretium nibh vitae elit placerat vestibulum. Duis felis ipsum, consectetur id pellentesque in, porta sit amet sapien. Ut tristique enim sem, laoreet bibendum nisl fermentum vitae. Ut aliquet sem ac lorem malesuada sodales. Fusce iaculis ipsum ex, in mollis dolor dapibus sit amet. In convallis felis in orci fermentum gravida a vel orci. Sed tincidunt porta nibh sit amet varius. Donec et odio eget odio tempus auctor ac eget ex.

        Duis finibus vestibulum finibus. Nunc lobortis lacus ut libero mattis tempor. Nulla a nunc at nisl elementum congue. Nunc eu consectetur mauris. Etiam non placerat massa. Etiam eu urna in metus tempus molestie sed eget diam. Nunc sem velit, elementum sit amet fringilla in, dictum sit amet sem. Quisque convallis faucibus purus dignissim dictum. Sed semper, mi vel accumsan sollicitudin, massa massa pellentesque justo, eget auctor sapien enim ac elit.

        Nullam turpis augue, lacinia ut libero ac, rhoncus bibendum ligula. Mauris ullamcorper maximus turpis, a consequat turpis bibendum sit amet. Nam vitae dui nec velit hendrerit faucibus. Vivamus nunc diam, porta tristique augue nec, dignissim venenatis felis. Proin mattis id risus in feugiat. Etiam cursus faucibus nisi. In in nisi ullamcorper, convallis lectus et, ornare nulla. Cras tristique nulla eros, non maximus odio imperdiet eu. Nullam egestas dignissim est, et fringilla odio pretium eleifend. Nullam tincidunt sapien fermentum, rhoncus risus ac, ullamcorper libero.
      </p>
    </div>
    <div class="content-block">
      <h3>Example Section II</h3>
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vestibulum metus sit amet urna lobortis sollicitudin. Nulla mattis purus porta lorem tempor, a cursus tellus facilisis. Aliquam pretium nibh vitae elit placerat vestibulum. Duis felis ipsum, consectetur id pellentesque in, porta sit amet sapien. Ut tristique enim sem, laoreet bibendum nisl fermentum vitae. Ut aliquet sem ac lorem malesuada sodales. Fusce iaculis ipsum ex, in mollis dolor dapibus sit amet. In convallis felis in orci fermentum gravida a vel orci. Sed tincidunt porta nibh sit amet varius. Donec et odio eget odio tempus auctor ac eget ex.

        Pellentesque vitae augue sed purus dictum ultricies at eu neque. Nullam ut mauris a purus tristique euismod. Sed elementum, leo id placerat congue, leo tellus pharetra orci, eget ultricies odio quam sit amet ipsum. Praesent feugiat, lorem at commodo egestas, felis ligula pharetra sapien, in placerat mauris nisi aliquet tortor. Quisque nibh lectus, laoreet vel mollis a, tincidunt vel ipsum. Sed blandit vehicula sollicitudin. Donec et sapien justo. Ut fermentum ipsum imperdiet diam condimentum, eget varius sapien dictum. Sed sed elit egestas libero maximus finibus eu eget massa.
      </p>
    </div>
    <footer>
      This is the text that goes at the bottom of every page.
    </footer>
  </body>
</html>

63voto

Biskrem Muhammad Punkte 3180

Die magische Lösung besteht darin, alles in eine einzige Tabelle zu packen.

  • thead : Dies ist für die wiederholte Kopfzeile.

  • tfoot : die wiederholte Fußzeile.

  • tbody : der Inhalt.

und machen Sie ein einziges tr, td und setzen Sie alles in ein div

CODE ::

<table class="report-container">
   <thead class="report-header">
     <tr>
        <th class="report-header-cell">
           <div class="header-info">
            ...
           </div>
         </th>
      </tr>
    </thead>
    <tfoot class="report-footer">
      <tr>
         <td class="report-footer-cell">
           <div class="footer-info">
           ...
           </div>
          </td>
      </tr>
    </tfoot>
    <tbody class="report-content">
      <tr>
         <td class="report-content-cell">
            <div class="main">
            ...
            </div>
          </td>
       </tr>
     </tbody>
</table>

table.report-container {
    page-break-after:always;
}
thead.report-header {
    display:table-header-group;
}
tfoot.report-footer {
    display:table-footer-group;
} 

extra : um Überschneidungen mit mehreren Seiten zu vermeiden. wie:

<div class="main">
    <div class="article">
        ...
  </div>
    <div class="article">
        ...
  </div>
    <div class="article">
        ...
  </div>
  ...
  ...
  ...
</div>

was zu einem Überlauf führt, der dazu führt, dass sich Dinge mit der Kopfzeile innerhalb der Seitenumbrüche überlappen.

so >> verwenden: page-break-inside: avoid !important; mit dieser Klasse article .

table.report-container div.article {
    page-break-inside: avoid;
}

58voto

Chris Moschini Punkte 34996

Der Kommentar von Muhammad Musavi ist die beste Antwort, deshalb wird er hier als aktuelle Antwort veröffentlicht:

thead/tfoot werden automatisch am oberen und unteren Rand jeder Seite wiederholt. Allerdings bleibt tfoot nicht am Ende der letzten Seite haften.

position: fixed wird auf jeder Seite wiederholt, und die Fußzeile bleibt auf allen Seiten, auch auf der letzten, am unteren Rand stehen, schafft aber keinen Platz für ihren Inhalt.

Kombinieren Sie sie:

HTML:

<header>(repeated header)</header>

<table class=paging><thead><tr><td>&nbsp;</td></tr></thead><tbody><tr><td>

(content goes here)

</td></tr></tbody><tfoot><tr><td>&nbsp;</td></tr></tfoot></table>

<footer>(repeated footer)</footer>

CSS:

@page {
    size: letter;
    margin: .5in;
}

@media print {
    table.paging thead td, table.paging tfoot td {
        height: .5in;
    }
}

header, footer {
    width: 100%; height: .5in;
}

header {
    position: absolute;
    top: 0;
}

@media print {
    header, footer {
        position: fixed;
    }

    footer {
        bottom: 0;
    }
}

Es gibt eine Menge Feinheiten, die man hier einbauen kann, aber ich habe dies absichtlich auf das absolute Minimum reduziert, um eine saubere Kopf- und Fußzeile zu erhalten, die einmal auf dem Bildschirm und einmal oben und unten auf jeder gedruckten Seite erscheint.

https://medium.com/@Idan_Co/das-ultimative-print-html-template-mit-header-footer-568f415f6d2a

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X