Колір фону не відображається в попередньому перегляді друку


223

Я намагаюся надрукувати сторінку. На цій сторінці я дав таблиці колір фону. Коли я переглядаю попередній перегляд друку в хромі, його не приймає властивість кольору тла ...

Тому я спробував цю властивість:

-webkit-print-color-adjust: exact; 

але все ж його колір не показує.

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>

1
Схоже, це працює належним чином: jsfiddle.net/tDggR/2 Я використовую хром версії 25
Jeremy Ninnes

jsfiddle.net/rajkumart08/TbrtD/1/embedded/result не працює тут чому

огонь! Він працює навіть в java8 webview engine
ruX

Перевірте мій відповідь stackoverflow.com/a/40087869/4251431
Башир AL-MOMANI

Відповіді:


416

Властивість Chrome CSS -webkit-print-color-adjust: exact;працює належним чином.

Однак переконатися, що у вас є правильний CSS для друку, часто може бути складним. Можна зробити кілька речей, щоб уникнути труднощів. Спочатку відокремте всі друковані CSS від екранного CSS. Це робиться через @media printі @media screen.

Часто просто встановити додатковий @media printCSS недостатньо, тому що ви все ще включаєте всі ваші інші CSS під час друку. У цих випадках вам просто потрібно знати про специфіку CSS, оскільки правила друку не виграють автоматично проти CSS-правил, які не друкуються.

У вашому випадку -webkit-print-color-adjust: exactпрацює. Однак ваші background-colorта кольорові визначення вибиваються іншими CSS з вищою специфічністю.

Хоча я не схвалюю використання !importantпрактично за будь-яких обставин, наступні визначення працюють належним чином і розкривають проблему:

@media print {
    tr.vendorListHeading {
        background-color: #1a4567 !important;
        -webkit-print-color-adjust: exact; 
    }
}

@media print {
    .vendorListHeading th {
        color: white !important;
    }
}

Ось загадкавбудована для зручності попереднього перегляду друку).


Відкриваючи загадку, я отримую Print preview failed.повідомлення в Chrome v47.0.2526.106
piotr_cz

Mozilla позначила це як нестандартне, тому результати суперечать і не повинні використовуватися на виробничих сайтах developer.mozilla.org/en-US/docs/Web/CSS/…
Майк Янг

Так, це працює в Chrome. Bossstrap css переосмислив його для мене за допомогою друкованих носіїв інформації. Ви також можете переглядати та перевіряти режим друку на вкладці Візуалізація внизу інспектора елементів Chrome. Існує можливість для Емуляції CSS Media у випадку, якщо ви хочете побачити стек заміщення.
Коргалоре

Для мене працює з! Важливим фоном
codemirror

75

Це властивість CSS - це все, що вам потрібно, він працює для мене ... Під час попереднього перегляду в Chrome ви маєте можливість побачити його BW і Color ( Колір: Параметри - Колірний або Чорно-білий ), тож якщо у вас немає цього варіанта, тоді Я пропоную скористатися цим розширенням Chrome і полегшити ваше життя:

https://chrome.google.com/webstore/detail/print-background-colors/gjecpgdgnlanljjdacjdeadjkocnnamk?hl=uk

Сайт, який ви додали у скрипці, потребує цього у своєму CSS-файлі для друку (у вас його просто потрібно додати ...

мультимедійний друк CSS в тілі:

@media print {
body {-webkit-print-color-adjust: exact;}
}

ОНОВЛЕННЯ ОК, тож ваша проблема bootstrap.css ... вона має CSS-файл для друку, як і ви .... ви видалите це, і це повинно надати вам колір .... вам потрібно або зробити своє, або дотримуватися завантажувачі print css.

Коли я натискаю надрукувати на цьому, я бачу колір .... http://jsfiddle.net/rajkumart08/TbrtD/1/embedded/result/


розширення працює на всіх сторінках, але він не працює для мого коду, чому jsfiddle.net/rajkumart08/TbrtD/1/embedded/result defie.co/testing/twitter-bootstrap-558bc52/docs/examples/…

1
якщо це так, переконайтеся, що у вашому завантажувальному пристрої є webkit-print-color-prilagod: точно; на вашому тілі - це ще один спосіб перевірити ... css звичайно в друкованих ЗМІ
Riskbreaker

його не працює defie.co/testing/twitter-bootstrap-558bc52/docs/examples/… я дав це в цьому коді

Ви не додавали його до друкованих носіїв, як я зазначив у вашому html-внутрішньому css: yout html-рядок 1154: @media print { body {margin:0; padding:0; line-height: 1.4em; word-spacing:1px; letter-spacing:0.2px; font: 12px Arial, Helvetica,"Lucida Grande", serif; color: #000;}....вам потрібно додати його туди ...
Riskbreaker

Я його відредагував ще раз, але все ще не працює defie.co/testing/twitter-bootstrap-558bc52/docs/examples/…

32

Chrome не буде відображати фоновий колір або декілька інших стилів при друкуванні, якщо параметр фонової графіки вимкнено.

Це не має нічого спільного з css, @media або специфікою. Ви, ймовірно, можете зламати свій шлях, але найпростіший спосіб отримати хром для відображення фонового кольору та іншої графіки - це правильно встановити цей прапорець у розділі Додаткові параметри.

введіть тут опис зображення


Гей, я нарешті дійшов до створення загадки jsfiddle.net/qm7shrvf з якихось причин, я не можу отримати хром для надання зеленого або червоного фонів у попередньому перегляді друку (я ще не намагався насправді роздрукувати) Дякую! (Я помітив, що чорний фон jsfiddle.net дійсно отримується на основі цього хромованого налаштування)
Ерік,

31

Мені просто потрібно було додати !importantатрибут на тег фонового кольору для того, щоб він відображався, а не потрібна частина webkit:

background-color: #f5f5f5 !important;


Це добре ... Можливо, я знаю причину, чому колір не показаний без надання важливого @Flea
vimal kumar

Ну не розумію, чому це відбувається, але це вирішило мою проблему :-)
Шрікант

11

Якщо ви використовуєте завантажувальний або будь-який інший сторонній CSS, переконайтеся, що ви вказали медіа-екран лише на ньому, щоб у вас був контроль над типом носія для друку у власних файлах CSS:

<link rel="stylesheet" media="screen" href="">



8

ДЛЯ ТОГО ВИКОРИСТАННЯ BOOTSTRAP.CSS, це виправлення!

Я спробував усі рішення, і вони не спрацювали ... поки я не виявив, що bootstrap.css мав надзвичайно прикро, @media printщо скидає всі ваші кольори, кольори тла, тіні тощо ...

@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}

Тож видаліть цей розділ із bootstrap.css (або bootstrap.min.css)

Або замініть ці значення в css сторінки, яку ви хочете надрукувати самостійно @media print

@media print {
  body { 
    -webkit-print-color-adjust: exact; 
  }
  .customClass{
     //customCss + !important;
  }
  //more of your custom css
}

6

В @media printтаблиці стилів використовуйте наступне .

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

Ось кілька зауважень:

  • фоновий колір є абсолютним запасом і в основному існує для нащадків.
  • background-image використовує піксель розміром 1px x 1px # 404040, перетворений на PNG. Якщо у користувача включені зображення, воно може працювати, якщо ні ...
  • Встановіть тінь, якщо це не працює ...
  • Бордюр = 1/2 бажаної висоти та / або ширини коробки, суцільний, колір. У наведеному вище прикладі я хотів вітрину висоти 60 пікселів.
  • Зніміть висоту / ширину залежно від того, що ви керуєте в атрибуті кордону.
  • Колір шрифту за замовчуванням стане чорним, якщо ви не використовуєте!
  • Встановіть висоту лінії 0, щоб виправити для поля, що не має фізичних розмірів.
  • Створіть та розмістіть власні PNG :-)
  • Якщо текст у блоці потрібно обернути, помістіть його у діву та розташуйте діл, використовуючи позицію: відносна; і видаліть висоту лінії.

Дивіться мою загадку для більш детальної демонстрації.


4

Ви впевнені, що це проблема css? У Google навколо цього питання є деякі публікації: http://productforums.google.com/forum/#!category-topic/chrome/discuss-chrome/eMlLBcKqd2s

Це може бути пов'язано з процесом друку. На сафарі, який також є вебкітом, встановлено прапорець для друку фонових зображень та кольорів у діалоговому вікні принтера.


3

Для IE

Якщо ви використовуєте IE, тоді перейдіть до попереднього перегляду друку (клацніть правою кнопкою миші на документі -> попередній перегляд друку), перейдіть до налаштувань і є опція "друкувати колір фону та зображень", виберіть цю опцію та спробуйте.

введіть тут опис зображення


2

У файлах css для завантажувального файлу є стиль у файлі @media print {* ,: after,: before ....}, який має кольори та стилі тла, що важливо, які видаляють будь-які кольори фону з будь-яких елементів. Вбийте ці два шматки css, і воно спрацює.

Bootstrap приймає рішення про те, що ви ніколи не повинні мати жодного фонового кольору у відбитках, тому вам доведеться редагувати їх css або мати інший! Важливий стиль, який є вищим пріоритетом. Гарна завантажувальна робота ...


2

Я використав відповідь purgatory101, але зіткнувся зі збереженням усіх кольорів (піктограм, фонів, кольорів тексту тощо), особливо, що таблиці стилів CSS не можна використовувати з бібліотеками, які динамічно змінюють кольори елемента DOM. Тому ось сценарій, який змінює стилі елементів ( background-colourі colour) перед друком та очищає стилі після того, як буде зроблено друк. Корисно уникати написання великої кількості CSS в а@media print таблицю стилів, оскільки це працює незалежно від структури сторінки.

Є частина сценарію, спеціально створена для збереження кольорів піктограм FontAwesome (або будь-який елемент, який використовує :beforeселектор для вставки кольорового вмісту).

JSFiddle показує сценарій в дії

Сумісність: працює в Chrome, я не перевіряв інші браузери.

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

А потім змініть window.printфункцію, щоб вона встановила стилі перед друком та скидання їх після.

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

Частина, яка знаходить шляхи значків для створення CSS для: before elements - це копія з цього відповіді SO


1
Це працює, дякую (зауважте, що вам потрібно буде зняти varз windowостаннього фрагмента коду)
adelriosantiago


1

якщо ви використовуєте Bootstrap .just, використовуйте цей код у власному файлі css. Bootstrap видаляє всі ваші кольори в попередньому перегляді друку.

@media print{
  .box-text {

    font-size: 27px !important; 
    color: blue !important;
    -webkit-print-color-adjust: exact !important;
  }
}

0

Якщо ви завантажите Bootstrap без опції "Стилі друку медіа", у вас не виникне цієї проблеми, і вам не доведеться видаляти код "@media print" вручну з файлу bootstrap.css.


0

Найкраще рішення для цього, якщо ви використовуєте завантажувальний інструмент, тому просто видаліть одну справу @media print {} весь код всередині цього. а також увімкніть фонову графіку з додаткових налаштувань під час перегляду друку.


Навіщо видаляти всі друковані CSS під час друку?
Мунім Мунна

Це робить колір видимим для друку
Mohd. Шайзад

-1

Я подвійно завантажую свій зовнішній вихідний файл css і змінюю медіа = "екран" на медіа = "друк", і всі межі моєї таблиці були показані

Спробуйте це :

<link rel="stylesheet" media="print" href="bootstrap.css" />

<link rel="stylesheet" media="screen" href="bootstrap.css" />

1
це можна зробити з media = "all" замість двох тегів посилань
big_water
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.