Purgatory101'in yanıtını kullandım, ancak özellikle CSS stil sayfalarının DOM öğesinin renklerini dinamik olarak değiştiren kitaplıklarla kullanılamaması nedeniyle tüm renkleri (simgeler, arka planlar, metin renkleri vb ...) tutmakta sorun yaşadım . Bu nedenle, yazdırmadan önce öğenin stillerini ( background-colour
ve colour
) değiştiren ve yazdırma tamamlandıktan sonra stilleri temizleyen bir komut dosyasıdır . @media print
Sayfa yapısı ne olursa olsun bir stil sayfasına çok fazla CSS yazmaktan kaçınmak yararlıdır .
Komut dosyasının, FontAwesome simgelerinin rengini (veya :before
renkli içerik eklemek için seçici kullanan herhangi bir öğeyi) tutmak için özel olarak yapılmış bir kısmı vardır .
Script eylem gösteren JSFiddle
Uyumluluk: Chrome'da çalışır, diğer tarayıcıları test etmedim.
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();
}
Ardından window.print
, stilleri yazdırmadan ve sıfırlamadan önce stilleri ayarlaması için değiştirin .
window._originalPrint = window.print;
window.print = function() {
setColors('body *');
setIconColors('body .fa');
window._originalPrint();
setTimeout(function () {
resetColors('body *');
resetIconColors();
}, 100);
}
İçin CSS oluşturmak üzere simge yolları bulan bölüm: önce öğeler bu SO yanıtından bir kopyadır