Użyłem odpowiedzi purgatory101, ale miałem problem z zachowaniem wszystkich kolorów (ikon, tła, kolorów tekstu itp.), Szczególnie, że arkuszy stylów CSS nie można używać z bibliotekami, które dynamicznie zmieniają kolory elementu DOM. Dlatego oto skrypt, który zmienia style elementu ( background-colour
i colour
) przed drukowaniem i czyści style po zakończeniu drukowania. Przydatne jest unikanie pisania dużej ilości CSS w @media print
arkuszu stylów, ponieważ działa on niezależnie od struktury strony.
Istnieje część skryptu, która została stworzona specjalnie w celu utrzymania koloru ikon FontAwesome (lub dowolnego elementu, który używa :before
selektora do wstawiania kolorowej zawartości).
JSFiddle pokazujący skrypt w akcji
Kompatybilność: działa w Chrome, nie testowałem innych przeglądarek.
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();
}
A następnie zmodyfikuj window.print
funkcję, aby ustawić style przed wydrukowaniem i zresetować po.
window._originalPrint = window.print;
window.print = function() {
setColors('body *');
setIconColors('body .fa');
window._originalPrint();
setTimeout(function () {
resetColors('body *');
resetIconColors();
}, 100);
}
Część, która znajduje ścieżki ikon do utworzenia CSS: przed elementami jest kopią tej odpowiedzi SO