J'ai vu cette question posée de différentes manières sur SO et plusieurs autres sites Web, mais la plupart d'entre eux sont soit trop spécifiques, soit obsolètes. J'espère que quelqu'un pourra fournir une réponse définitive ici sans céder à la spéculation.
Existe-t-il un moyen, avec CSS ou javascript, de modifier les paramètres par défaut de l'imprimante lorsque quelqu'un imprime dans son navigateur? Et bien sûr, par "impressions à partir de leur navigateur", je veux dire une forme de HTML, pas de PDF ou un autre type mime dépendant de plug-in.
Notez s'il vous plaît:
Si certains navigateurs offrent cela et d'autres non (ou si vous ne savez comment le faire que pour certains navigateurs), je suis d'accord avec les solutions spécifiques au navigateur.
De même, si vous connaissez un navigateur grand public qui a des restrictions spécifiques contre JAMAIS faire cela, cela est également utile, mais une documentation assez à jour serait appréciée. (Le simple fait de dire "cela va à l'encontre de la politique de sécurité de XYZ" n'est pas très convaincant lorsque XYZ a apporté des changements importants à ladite politique au cours des trois dernières années).
Enfin, quand je dis "modifier les paramètres d'impression par défaut", je ne veux pas dire pour toujours, juste pour ma page, et je fais référence spécifiquement aux marges d'impression, aux en-têtes et aux pieds de page.
Je suis très conscient que CSS offre la possibilité de modifier l'orientation de la page ainsi que les marges de la page. L'une des nombreuses difficultés concerne Firefox. Si je règle les marges de la page sur 1 pouce, cela ajoute au demi-pouce déjà mis en place.
Je souhaite vivement réduire l'utilisation des PDF sur le site de mon client, mais la violation de la présentation (ainsi que le manque de fiabilité) sont leur principale préoccupation.
Réponses:
La norme CSS permet un formatage avancé. Il existe une
@page
directive en CSS qui permet une mise en forme qui ne s'applique qu'aux supports paginés (comme le papier). Voir http://www.w3.org/TR/1998/REC-CSS2-19980512/page.html .L'inconvénient est que le comportement des différents navigateurs n'est pas cohérent. Safari ne prend toujours pas en charge la configuration de la marge de page de l'imprimante, mais tous les autres principaux navigateurs le prennent désormais en charge.
Avec la
@page
directive, vous pouvez spécifier la marge d'imprimante de la page (qui n'est pas la même que la marge CSS normale d'un élément HTML):Cela ne fonctionne pas dans Firefox 3.6 , IE 7 , Safari 5.1.7 ou Google Chrome 4.1 .
La définition de la marge @page a un effet dans IE 8 , Opera 10 , Google Chrome 21 et Firefox 19 .
Bien que les marges de page soient correctement définies pour votre contenu dans ces navigateurs, le comportement n'est pas idéal pour tenter de résoudre le masquage de l'en-tête / pied de page.
Voici comment il se comporte dans différents navigateurs:
Dans Internet Explorer , la marge est en fait définie sur 0 mm dans les paramètres de cette impression, et si vous effectuez un aperçu, vous obtiendrez 0 mm par défaut, mais l'utilisateur peut le modifier dans l'aperçu.
Vous verrez que le contenu de la page est en fait correctement positionné , mais l'en-tête et le pied de page d'impression du navigateur sont affichés avec un arrière-plan non transparent, masquant ainsi efficacement le contenu de la page à cette position.
Dans les versions plus récentes de Firefox , il est positionné correctement, mais le texte de l'en-tête / pied de page et le texte du contenu sont affichés, il ressemble donc à un mauvais mélange de texte d'en-tête de navigateur et de contenu de votre page.
Dans Opera , le contenu de la page masque l'en-tête lors de l'utilisation d'un arrière-plan non transparent dans le CSS standard et la position de l'en-tête / pied de page entre en conflit avec le contenu. Assez bien, mais semble étrange si la marge est définie sur une petite valeur qui rend l'en-tête partiellement visible. De plus, la marge de page n'est pas correctement définie.
Dans les versions plus récentes de Chrome , l'en-tête et le pied de page du navigateur sont masqués si la marge @page est définie si petite que la position de l'en-tête / pied de page entre en conflit avec le contenu. À mon avis, c'est exactement comment cela devrait se comporter.
Donc, la conclusion est que Chrome a la meilleure implémentation en ce qui concerne le masquage de l'en-tête / pied de page.
la source
@page
marges et lesbody
marges sont des choses fondamentalement différentes: labody
marge ne s'applique qu'à l' ensemble du corps , c'est-à-dire le haut de la première page et le bas de la dernière page. Pour toutes les pages intermédiaires, le haut / bas aura toujours une marge nulle.Toute version récente de Chrome et Opera, ainsi que Firefox 48 alpha 1 et supérieur
Vous pouvez définir la marge de la page sur une taille trop petite pour contenir le texte afin de désactiver cela (en empruntant à la réponse de crainte ):
Pour les versions de Firefox jusqu'à 48 alpha 1
Vous pouvez ajouter un
mozNoMarginBoxes
attribut à la<html>
balise pour empêcher l'impression de l'URL, des numéros de page et d'autres éléments que Firefox ajoute à la marge de page.Il fonctionne dans Firefox 29 et les versions ultérieures. Vous pouvez voir une capture d'écran de la différence ici , ou voir ici pour un exemple en direct.
Notez que l'
mozDisallowSelectionPrint
attribut de l'exemple n'est pas nécessaire pour supprimer le texte des marges; voir Que fait l'attribut mozdisallowselectionprint dans PDF.js? .D'autres navigateurs
Malheureusement, il ne semble y avoir aucun moyen de résoudre ce problème dans Internet Explorer, vous devrez donc recourir au PDF ou demander aux utilisateurs de désactiver les textes de marge.
Il en va de même pour Safari; selon un commentaire de @Luiz Perez , les versions les plus récentes de Safari (8, 9.1 et 10) ne prennent toujours pas en charge la
@page
suppression des textes de marge.Je ne trouve rien sur Edge et je n'ai pas d'installation de Windows 10 à tester.
la source
<!DOCTYPE html> <html moznomarginboxes mozdisallowselectionprint>
est défini. Source:https://bug743252.bugzilla.mozilla.org/attachment.cgi?id=714383
@page{ size: auto; margin: 3mm; }
pour prendre en charge Chrome et Safari, a créé une solution multi-navigateurs pour moi.Comme @Awe l'avait dit ci-dessus, c'est la solution, qui est confirmée pour fonctionner dans Chrome !!
Assurez-vous simplement que c'est À L'INTÉRIEUR des balises de tête:
la source
padding: 0.25in 0.5in;
dans les styles de carrosserie afin d'avoir les marges exactes dont j'ai besoin pour une impression agréable et propre. Travaillant dans Chrome v25, et heureusement pour ce projet particulier, nous pouvons demander aux utilisateurs finaux de choisir parmi quelques navigateurs modernes.J'ai une demande similaire d'un client qui souhaite que l'en-tête, les numéros de page et le pied de page HTML soient supprimés. Dans ce cas, le client présente une page HTML qui peut servir de certificat formel. L'URL, la page et l'en-tête ajoutés ne sont pas pertinents et conduisent à un produit final peu agréable. À certains égards, cela semble bon marché.
Media = Print n'a pas pu désactiver ces paramètres par défaut du navigateur. La seule solution de contournement est de dire à l'utilisateur de cliquer sur le bouton "Gear" et d'activer / désactiver ces éléments. Sérieusement, je ne savais pas que je pourrais faire cela pendant 20 ans (et nous pensons que l'utilisateur typique aura un indice pour cliquer sur le bouton bascule?).
Si CSS prend en charge Media = Print, il doit prendre en charge la capacité de contrôler toute l'expérience d'impression de l'utilisateur final. J'apprécie que les navigateurs fournissent les champs ajoutés, mais pourquoi ne pas permettre à CSS de contrôler l'expérience d'impression globale, si c'est ce que vous souhaitez. Une solution à 90% pourrait être à 100% avec trois autres domaines! Un simple:
suffirait.
Encore une fois, peu importe que l'utilisateur final veuille ou non l'imprimer (peut-être que votre client est très privé et ne veut pas que les URL imprimées flottent. Ou peut-être qu'une équipe de direction utilise des sites de collaboration privés?). Heureux de défendre l'utilisateur final, mais si quelqu'un cherche une réponse, ne répondez pas en disant que c'est le droit de l'utilisateur final d'afficher ou de masquer. Parfois, c'est le droit du client de payer les factures.
la source
@Page
directive pour définir la marge de l'imprimante (qui n'est pas la même que la marge du corps de la page html). Actuellement, cela est pris en charge par tous les principaux navigateurs à l'exception de Safari, mais la façon dont cela affecte l'en-tête / pied de page varie. Les meilleures implémentations sont dans Opera et Chrome.Essayez ce code, fonctionne à 100% pour moi:
POUR Paysage:
POUR Portait:
la source
Puisque vous avez mentionné "dans leur navigateur" et Firefox, si vous utilisez Internet Explorer, vous pouvez désactiver l'en-tête / pied de page en définissant temporairement la valeur dans le registre, voir ici pour un exemple. AFAIK Je n'ai pas entendu parler d'un moyen de le faire dans d'autres navigateurs. Les réponses de Daniel et de Mickel semblent se heurter, je suppose qu'il pourrait y avoir un paramètre similaire quelque part dans le registre pour que Firefox supprime les en-têtes / pieds de page ou les personnalise. L'avez-vous vérifié?
J'espère que cela aide et Bonnes vacances, Meilleures salutations, Tom.
la source
@page margin: 0mm fonctionne désormais dans Firefox 19.0a2 (07/12/2012).
la source
J'ai résolu mon problème en utilisant du CSS dans la page Web.
la source
Cela a fonctionné pour moi avec une marge d'environ 1 cm
la source