Ich habe gesehen, dass diese Frage auf SO und mehreren anderen Websites auf verschiedene Weise gestellt wurde, aber die meisten von ihnen sind entweder zu spezifisch oder veraltet. Ich hoffe, dass jemand hier eine endgültige Antwort geben kann, ohne sich auf Spekulationen einzulassen.
Gibt es eine Möglichkeit, entweder mit CSS oder Javascript, die Standarddruckereinstellungen zu ändern, wenn jemand in seinem Browser druckt? Und natürlich meine ich mit "Ausdrucke aus ihrem Browser" eine Form von HTML, nicht PDF oder einen anderen Plug-in-abhängigen MIME-Typ.
Bitte beachten Sie:
Wenn einige Browser dies anbieten und andere nicht (oder wenn Sie nur wissen, wie es für einige Browser geht), begrüße ich browserspezifische Lösungen.
Wenn Sie einen Mainstream-Browser kennen, der bestimmte Einschränkungen hat, ist dies ebenfalls hilfreich, aber eine ziemlich aktuelle Dokumentation wäre wünschenswert. (Nur zu sagen, "das verstößt gegen die Sicherheitsrichtlinie von XYZ", ist nicht sehr überzeugend, wenn XYZ in den letzten drei Jahren wesentliche Änderungen an dieser Richtlinie vorgenommen hat).
Wenn ich schließlich "Standarddruckeinstellungen ändern" sage, meine ich nicht für immer, nur für meine Seite, und ich beziehe mich speziell auf Druckränder, Kopf- und Fußzeilen.
Mir ist sehr bewusst, dass CSS die Möglichkeit bietet, die Seitenausrichtung sowie die Seitenränder zu ändern. Einer der vielen Probleme ist mit Firefox. Wenn ich die Seitenränder auf 1 Zoll einstelle, wird dies dem halben Zoll hinzugefügt, den es bereits eingerichtet hat.
Ich möchte die Verwendung von PDFs auf der Website meines Kunden sehr reduzieren, aber die Verletzung der Präsentation (sowie die mangelnde Zuverlässigkeit) sind ihr Hauptanliegen.
Antworten:
Der CSS-Standard ermöglicht einige erweiterte Formatierungen.
@page
In CSS gibt es eine Direktive, die eine Formatierung ermöglicht, die nur für ausgelagerte Medien (wie Papier) gilt. Sehen http://www.w3.org/TR/1998/REC-CSS2-19980512/page.html .Nachteil ist, dass das Verhalten in verschiedenen Browsern nicht konsistent ist. Safari unterstützt das Festlegen des Druckerseitenrandes immer noch nicht, aber alle anderen gängigen Browser unterstützen ihn jetzt.
Mit der
@page
Direktive können Sie den Druckerrand der Seite angeben (der nicht mit dem normalen CSS-Rand eines HTML-Elements identisch ist):Dies funktioniert nicht in Firefox 3.6 , IE 7 , Safari 5.1.7 oder Google Chrome 4.1 .
Das Festlegen des @ Seitenrandes wirkt sich in IE 8 , Opera 10 , Google Chrome 21 und Firefox 19 aus .
Obwohl die Seitenränder für Ihren Inhalt in diesen Browsern korrekt eingestellt sind, ist das Verhalten nicht ideal, um das Ausblenden der Kopf- / Fußzeile zu lösen.
So verhält es sich in verschiedenen Browsern:
In Internet Explorer wird der Rand in den Einstellungen für diesen Druck tatsächlich auf 0 mm festgelegt. Wenn Sie die Vorschau ausführen, wird standardmäßig 0 mm angezeigt, der Benutzer kann ihn jedoch in der Vorschau ändern.
Sie werden sehen, dass der Seiteninhalt tatsächlich korrekt positioniert ist , aber die Kopf- und Fußzeile des Browserdrucks wird mit nicht transparentem Hintergrund angezeigt, sodass der Seiteninhalt an dieser Position effektiv ausgeblendet wird.
In neueren Versionen von Firefox ist es korrekt positioniert , aber sowohl der Kopf- / Fußzeilentext als auch der Inhaltstext werden angezeigt, sodass es wie eine schlechte Mischung aus Browser-Kopfzeilentext und Seiteninhalt aussieht.
In Opera verbirgt der Seiteninhalt die Kopfzeile, wenn im Standard-CSS ein nicht transparenter Hintergrund verwendet wird und die Position der Kopf- / Fußzeile mit dem Inhalt in Konflikt steht. Ziemlich gut, sieht aber seltsam aus, wenn der Rand auf einen kleinen Wert eingestellt ist, wodurch der Header teilweise sichtbar wird. Auch der Seitenrand ist nicht richtig eingestellt.
In neueren Chrome- Versionen werden die Kopf- und Fußzeile des Browsers ausgeblendet, wenn der @ page-Rand so klein eingestellt ist, dass die Position der Kopf- / Fußzeile mit dem Inhalt in Konflikt steht. Meiner Meinung nach sollte sich das genau so verhalten.
Die Schlussfolgerung ist also, dass Chrome die beste Implementierung hat, um die Kopf- / Fußzeile auszublenden.
quelle
@page
Margen und diebody
Margen sind grundsätzlich verschiedene Dinge: diebody
Marge gilt nur für den ganzen Körper , dh die oben auf der ersten Seite und der Unterseite der letzten Seite. Für alle Zwischenseiten hat die Ober- / Unterseite immer noch einen Rand von Null.Alle neueren Versionen von Chrome und Opera sowie Firefox 48 Alpha 1 und höher
Sie können den Seitenrand auf eine Größe einstellen, die zu klein ist, um den Text zu enthalten, um dies zu deaktivieren (Ausleihen aus der Antwort von Awe ):
Für Versionen von Firefox bis zu 48 Alpha 1
Sie können
mozNoMarginBoxes
dem<html>
Tag ein Attribut hinzufügen , um zu verhindern, dass die URL, Seitenzahlen und andere Dinge, die Firefox dem Seitenrand hinzufügt, gedruckt werden.Es funktioniert in Firefox 29 und höher. Sie können hier einen Screenshot des Unterschieds sehen oder hier ein Live-Beispiel.
Beachten Sie, dass das
mozDisallowSelectionPrint
Attribut im Beispiel nicht erforderlich ist, um den Text von den Rändern zu entfernen. Siehe Was bewirkt das Attribut mozdisallowselectionprint in PDF.js? .Andere Browser
Leider scheint es in Internet Explorer keine Möglichkeit zu geben, dieses Problem zu beheben. Sie müssen daher auf PDF zurückgreifen oder Benutzer bitten, Randtexte zu deaktivieren.
Gleiches gilt für Safari; Laut einem Kommentar von @Luiz Perez unterstützen die neuesten Versionen von Safari (8, 9.1 und 10) die
@page
Unterdrückung von Randtexten immer noch nicht .Ich kann auf Edge nichts finden und habe keine Windows 10-Installation zum Testen verfügbar.
quelle
<!DOCTYPE html> <html moznomarginboxes mozdisallowselectionprint>
eingestellt ist. Quelle:https://bug743252.bugzilla.mozilla.org/attachment.cgi?id=714383
@page{ size: auto; margin: 3mm; }
der Unterstützung von Chrome und Safari war dies eine browserübergreifende Lösung für mich.Wie @Awe oben gesagt hatte, ist dies die Lösung, die in Chrome funktioniert !!
Stellen Sie einfach sicher, dass dies IN den Kopfmarken ist:
quelle
padding: 0.25in 0.5in;
die Körperstile zu ergänzen, damit ich genau die Ränder habe, die ich für einen schönen, sauberen Druck benötige. Wenn wir in Chrome v25 arbeiten und zum Glück für dieses spezielle Projekt, können wir die Endbenutzer bitten, aus einigen modernen Browsern auszuwählen.Ich habe eine ähnliche Anfrage von einem Client, der möchte, dass die Kopfzeile, die Seitenzahlen und die HTML-Fußzeile entfernt werden. In diesem Fall präsentiert der Client eine HTML-Seite, die als formales Zertifikat fungieren kann. Die hinzugefügte URL, Seite und Überschrift sind irrelevant und führen zu einem weniger ansprechenden Endprodukt. In gewisser Weise sieht es einfach billig aus.
Media = Print konnte diese Browser-Standardeinstellungen nicht deaktivieren. Die einzige Problemumgehung besteht darin, den Benutzer anzuweisen, auf die Schaltfläche "Zahnrad" zu klicken und diese Elemente ein- und auszuschalten. Im Ernst, ich hatte 20 Jahre lang keine Ahnung, dass ich das tun könnte (und wir glauben, dass der typische Benutzer eine Ahnung hat, auf die Umschalttaste zu klicken?).
Wenn CSS Media = Print unterstützt, sollte es die Möglichkeit unterstützen, die gesamte Druckerfahrung des Endbenutzers zu steuern. Ich weiß zu schätzen, dass die Browser die hinzugefügten Felder bereitstellen, aber warum nicht CSS erlauben, das gesamte Druckerlebnis zu steuern - wenn dies gewünscht wird. Eine 90% ige Lösung könnte 100% mit drei weiteren Feldern sein! Eine einfache:
würde genügen.
Auch hier spielt es keine Rolle, ob der Endbenutzer es ausdrucken möchte oder nicht (möglicherweise ist Ihr Kunde sehr privat und möchte nicht, dass gedruckte URLs im Umlauf sind. Oder verwendet ein Führungsteam private Websites für die Zusammenarbeit?). Ich bin froh, den Endbenutzer zu verteidigen, aber wenn jemand eine Antwort sucht, antworten Sie nicht und sagen Sie, dass es das Recht des Endbenutzers ist, sich zu zeigen oder zu verstecken. Manchmal ist es das Recht des Kunden, die Rechnungen zu bezahlen.
quelle
@Page
Direktive zum Festlegen des Druckerrandes verwendet (der nicht mit dem Textrand der HTML-Seite identisch ist). Derzeit wird dies von allen gängigen Browsern außer Safari unterstützt, aber wie sich dies auf die Kopf- / Fußzeile auswirkt, ist unterschiedlich. Die besten Implementierungen sind in Opera und Chrome.Versuchen Sie diesen Code, funktioniert 100% für mich:
FÜR Landschaft:
FÜR Portait:
quelle
Da Sie erwähnt „in ihrem Browser“ und firefox, wenn Sie den Internet Explorer verwenden, können Sie die Seite Kopf- / Fußzeilen durch zeitweiliges Einstellen des Wertes in der Registrierung finden Sie deaktivieren hier für ein Beispiel. AFAIK Ich habe noch keine Möglichkeit gehört, dies in anderen Browsern zu tun. Die Antworten von Daniel und Mickel scheinen miteinander zu kollidieren. Ich denke, dass es irgendwo in der Registrierung eine ähnliche Einstellung für Firefox geben könnte, um Kopf- / Fußzeilen zu entfernen oder sie anzupassen. Hast du es ausgecheckt?
Hoffe das hilft und schöne Ferien, Mit freundlichen Grüßen, Tom.
quelle
@page margin: 0mm funktioniert jetzt in Firefox 19.0a2 (2012-12-07).
quelle
Ich habe mein Problem mit CSS auf der Webseite gelöst.
quelle
Dies funktionierte bei mir mit ca. 1cm Rand
quelle