Saya menggunakan jawaban purgatory101 tetapi mengalami kesulitan menjaga semua warna (ikon, latar belakang, warna teks dll ...), terutama bahwa stylesheet CSS tidak dapat digunakan dengan perpustakaan yang secara dinamis mengubah warna elemen DOM. Oleh karena itu di sini adalah skrip yang mengubah gaya elemen ( background-colour
dan colour
) sebelum mencetak dan menghapus gaya setelah pencetakan selesai. Sangat berguna untuk menghindari menulis banyak CSS dalam format@media print
stylesheet karena berfungsi apa pun struktur halaman.
Ada bagian skrip yang dibuat khusus untuk menjaga warna ikon FontAwesome (atau elemen apa pun yang menggunakan :before
pemilih untuk menyisipkan konten berwarna).
JSFiddle menunjukkan skrip dalam aksi
Kompatibilitas: berfungsi di Chrome, saya tidak menguji peramban lain.
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();
}
Dan kemudian memodifikasi window.print
fungsi untuk membuatnya mengatur gaya sebelum mencetak dan mengatur ulang setelahnya.
window._originalPrint = window.print;
window.print = function() {
setColors('body *');
setIconColors('body .fa');
window._originalPrint();
setTimeout(function () {
resetColors('body *');
resetIconColors();
}, 100);
}
Bagian yang menemukan ikon path untuk membuat CSS untuk: sebelum elemen adalah salinan dari jawaban SO ini