278 votes

La couleur d'arrière-plan n'apparaît pas dans l'aperçu avant impression

J'essaie d'imprimer une page. Dans cette page, j'ai donné une couleur de fond à un tableau. Lorsque j'affiche l'aperçu avant impression dans chrome, il ne prend pas en compte la propriété de la couleur d'arrière-plan...

J'ai donc essayé cette propriété :

-webkit-print-color-adjust: exact; 

mais la couleur n'apparaît toujours pas.

http://jsfiddle.net/TbrtD/

.vendorListHeading {
  background-color: #1a4567;
  color: white;
  -webkit-print-color-adjust: exact; 
}

<div class="bs-docs-example" id="soTable" style="padding-top: 10px;">
  <table class="table" style="margin-bottom: 0px;">
    <thead>
      <tr class="vendorListHeading" style="">
        <th>Date</th>
        <th>PO Number</th>
        <th>Term</th>
        <th>Tax</th>
        <th>Quote Number</th>
        <th>Status</th>
        <th>Account Mgr</th>
        <th>Shipping Method</th>
        <th>Shipping Account</th>
        <th style="width: 184px;">QA</th>
        <th id="referenceSO">Reference</th>
        <th id="referenceSO" style="width: 146px;">End-User Name</th>
        <th id="referenceSO" style="width: 118px;">End-User's PO</th>
        <th id="referenceSO" style="width: 148px;">Tracking Number</th>
      </tr>
    </thead>
    <tbody>
      <tr class="">
        <td>22</td>
        <td>20130000</td>
        <td>Jim B.</td>
        <td>22</td>
        <td>510 xxx yyyy</td>
        <td>zznn@abc.co</td>
        <td>PDF</td>
        <td>12/23/2012</td>
        <td>Approved</td>
        <td>PDF</td>
        <td id="referenceSO">12/23/2012</td>
        <td id="referenceSO">Approved</td>
      </tr>
    </tbody>
  </table>
</div>

5voto

Pete Fecteau Points 86

Utilisez les éléments suivants dans votre @media print feuille de style.

h1 {
    background-color:#404040;
    background-image:url("img/404040.png");
    background-repeat:repeat;
    box-shadow: inset 0 0 0 1000px #404040;
    border:30px solid #404040;
    height:0;
    width:100%;
    color:#FFFFFF !important;
    margin:0 -20px;
    line-height:0px;
}

Voici quelques points à noter :

  • la couleur d'arrière-plan est la solution de repli absolue et est surtout là pour la postérité.
  • background-image utilise un pixel de 1px x 1px de #404040 transformé en PNG. Si l'utilisateur a activé les images, cela peut fonctionner, sinon...
  • Définissez l'ombre de la boîte, si cela ne fonctionne pas...
  • Bordure = 1/2 de la hauteur et/ou de la largeur de la boîte, solide, de couleur. Dans l'exemple ci-dessus, je voulais une boîte de 60 px de hauteur.
  • Remettez à zéro la hauteur/largeur en fonction de ce que vous contrôlez dans l'attribut border.
  • La couleur de la police sera par défaut le noir à moins que vous n'utilisiez !important
  • Fixer la hauteur de ligne à 0 pour corriger le fait que la boîte n'a pas de dimension physique.
  • Créez et hébergez vos propres PNG :-)
  • Si le texte du bloc doit être enveloppé, placez-le dans une div et positionnez la div à l'aide de position:relative ; et supprimez l'épaisseur de ligne.

Voir mon violon pour une démonstration plus détaillée.

1voto

Taugenichts Points 802

Il y a un style dans les fichiers css de bootstrap sous @media print{*,:after,:before ....} qui a des styles de couleur et d'arrière-plan étiquetés !important, qui suppriment toutes les couleurs d'arrière-plan sur tous les éléments. Supprimez ces deux éléments de css et cela fonctionnera.

Bootstrap prend la décision d'exécution qui s'impose. jamais n'ont pas de couleur de fond dans les impressions, il faut donc éditer leur css ou avoir un autre style !important qui a une plus grande préséance. Bon travail bootstrap...

1voto

hilnius Points 1316

J'ai utilisé Réponse de purgatory101 mais j'ai eu du mal à conserver toutes les couleurs (icônes, arrière-plans, couleurs de texte etc...), d'autant plus que les feuilles de style CSS ne peuvent pas être utilisées avec des librairies qui changent dynamiquement les couleurs des éléments du DOM. Voici donc un script qui change les styles des éléments ( background-colour y colour ) avant l'impression et efface les styles une fois l'impression terminée. Il est utile d'éviter d'écrire beaucoup de CSS dans un fichier @media print car elle fonctionne quelle que soit la structure de la page.

Une partie du script est spécialement conçue pour conserver la couleur des icônes FontAwesome (ou de tout élément utilisant une balise :before pour insérer un contenu coloré).

JSFiddle montrant le script en action

Compatibilité : fonctionne dans Chrome, je n'ai pas testé d'autres navigateurs.

function setColors(selector) {
  var elements = $(selector);
  for (var i = 0; i < elements.length; i++) {
    var eltBackground = $(elements[i]).css('background-color');
    var eltColor = $(elements[i]).css('color');

    var elementStyle = elements[i].style;
    if (eltBackground) {
      elementStyle.oldBackgroundColor = {
        value: elementStyle.backgroundColor,
        importance: elementStyle.getPropertyPriority('background-color'),
      };
      elementStyle.setProperty('background-color', eltBackground, 'important');
    }
    if (eltColor) {
      elementStyle.oldColor = {
        value: elementStyle.color,
        importance: elementStyle.getPropertyPriority('color'),
      };
      elementStyle.setProperty('color', eltColor, 'important');
    }
  }
}

function resetColors(selector) {
  var elements = $(selector);
  for (var i = 0; i < elements.length; i++) {
    var elementStyle = elements[i].style;

    if (elementStyle.oldBackgroundColor) {
      elementStyle.setProperty('background-color', elementStyle.oldBackgroundColor.value, elementStyle.oldBackgroundColor.importance);
      delete elementStyle.oldBackgroundColor;
    } else {
      elementStyle.setProperty('background-color', '', '');
    }
    if (elementStyle.oldColor) {
      elementStyle.setProperty('color', elementStyle.oldColor.value, elementStyle.oldColor.importance);
      delete elementStyle.oldColor;
    } else {
      elementStyle.setProperty('color', '', '');
    }
  }
}

function setIconColors(icons) {
  var css = '';
  $(icons).each(function (k, elt) {
    var selector = $(elt)
      .parents()
      .map(function () { return this.tagName; })
      .get()
      .reverse()
      .concat([this.nodeName])
      .join('>');

    var id = $(elt).attr('id');
    if (id) {
      selector += '#' + id;
    }

    var classNames = $(elt).attr('class');
    if (classNames) {
      selector += '.' + $.trim(classNames).replace(/\s/gi, '.');
    }

    css += selector + ':before { color: ' + $(elt).css('color') + ' !important; }';
  });
  $('head').append('<style id="print-icons-style">' + css + '</style>');
}

function resetIconColors() {
  $('#print-icons-style').remove();
}

Puis modifiez le window.print pour qu'elle définisse les styles avant l'impression et les réinitialise après.

window._originalPrint = window.print;
window.print = function() {
  setColors('body *');
  setIconColors('body .fa');
  window._originalPrint();
  setTimeout(function () {
    resetColors('body *');
    resetIconColors();
  }, 100);
}

La partie qui trouve des chemins d'icônes pour créer du CSS pour les éléments :before est une copie de cette réponse de l'OS

0voto

Vous pouvez également utiliser la fonction box-shadow propriété.

0voto

Mohd. Shaizad Points 1

La meilleure solution est d'utiliser bootstrap, il suffit donc d'enlever une chose @media print {} et activer les graphiques d'arrière-plan à partir de plus de paramètres lors de l'aperçu avant impression.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X