Как я могу напечатать фоновые изображения в FF или IE? - PullRequest
37 голосов
/ 28 февраля 2009

Есть ли способ установить ff и т.е. напечатать фоновые изображения?

Я использую изображение звезд, чтобы классифицировать некоторые навыки, и я устанавливаю его как фоновое изображение, а в качестве позиции устанавливаю один старт, два, три и т. Д. Когда я пытаюсь распечатать страницу, изображения исчезают.

Так есть ли способ заставить их появляться, когда я печатаю страницу или, по крайней мере, есть способ заменить изображения на * или что-то, что было бы видно?

Ответы [ 8 ]

22 голосов
/ 28 февраля 2009

Рассматривали ли вы использование таблицы стилей печати? Это может позволить вам сделать что-то вроде:

<div class="star">*</div>

/* media:screen */
.star {
    background: ...;
    overflow: hidden;
    text-indent: 9999em;
}

/* media:print */
.star {
    text-indent: 0;
}

или даже проще:

<div class="star"><img src="./images/star.jpg" alt="*" /></div>

/* media:screen */
.star img {
    visibility: hidden;
}

/* media:print */
.star img {
    visibility: visible;
}

Вы можете указать, какие браузеры должны использовать таблицы стилей, указав тег мультимедиа с помощью css или элемента link:

<link rel="stylesheet" type="text/css" href="main.css" media="screen" />
<link rel="print stylesheet" type="text/css" href="print.css" media="print" />
19 голосов
/ 02 августа 2009

В вашем файле print.css измените фоновое изображение на элемент списка.

Итак:

.background {
  display: list-item;
  list-style-image: url(yourbackgroundimage.gif);
  list-style-position: inside;
}

Этот метод более подробно описан здесь: http://www.web -graphics.com / mtarchive / 001703.php

19 голосов
/ 28 февраля 2009

В Firefox перейдите в File => Page Setup. Есть флажок «Печатать фон (цвета и изображения)». Просто проверьте это, и у вас все будет готово.

9 голосов
/ 03 июня 2010

На самом деле я нашел ответ довольно простым.

Ситуация: у меня был тег div с фоновым изображением. Который не будет распечатывать при печати.

Решение:

  1. Создайте еще одну таблицу стилей с именем "print.css"

  2. Добавьте следующую строку кода на все свои веб-страницы сразу после ссылки на оригинальную таблицу стилей CSS:

    <link rel="stylesheet" type="text/css" media="print" href="css/print_styles.css" />
    
  3. Сразу после того, как вы указали исходный заголовок без печати, добавьте следующее:

    <div id="header"></div> <!-- YOUR NON PRINTING HEADER -->
    
    <div id="printheader"><img src="images/header_image.jpg" width="940" height="100" alt="header" /></div>
    
  4. В вашем файле style.css, который является основным стилем CSS для вашего сайта, добавьте следующую строку:

    #printheader {display: none; } /* Makes the print header not visible */
    
  5. В файле print.css добавьте следующий код:

    #footer, #nav, #sidenav, .print, .search, .breadcrumb, .noprint {display: none;} /* Items from your page you DO NOT want to print */
    
    #container, #container2, #contentwide, #contentwide_tpsub, #contentwide_tp, #contentwide_open {width: 100%; margin: 0; float: none;} /* Clear widths to ensure all text is printed */
    
    #printheader {display: block; } /* Turns ON the div when printing */
    

То, что вы делаете, - это по сути отключение заголовка на обычной «экранной» странице и включение печатающего заголовка при вызове на печать.

** Обратите внимание: вам нужно будет изменить файл print.css, чтобы включить другие элементы вашего файла style.css для форматирования шрифтов, цветов и т. Д. Поиграйте с «Предварительный просмотр» и добавьте элементы пока вы не получите распечатку, которую искали.

4 голосов
/ 16 августа 2014

Не используйте background-image для отображения печатаемых изображений, вместо этого используйте обычный тег <img>.

background-image предназначен для неважных изображений, которые большинство современных браузеров склонны пропускать во время печати (настройка по умолчанию в IE 11, Chrome 35, FF 30).

Почему бы вам не захотеть использовать тег img?

  • Проблемы с выравниванием - Используйте абсолютное позиционирование для решения проблем с выравниванием.

  • Разбрызгивание - Разбрасывание возможно с использованием простых тегов img и div.

  • усложняет сохранение изображения для пользователей - это также возможно с простыми тегами img и div.

  • Чтобы "сохранить мой HTML в чистоте" - действительно ли какие-нибудь обходные решения действительно делают его чище для вас? Откажись:)

3 голосов
/ 28 февраля 2009

для IE http://support.microsoft.com/kb/980077

Должно быть что-то подобное для FF.

p.s. Вы не можете установить это для клиентов!

p.s.2. Вы можете заменить эти звезды на изображения переднего плана (при необходимости, абсолютные) в css (media = "print").

1 голос
/ 14 января 2014

У меня была та же проблема с IE, не поддерживающим печать фона.

Итак, я создал 2 div, один div имел более высокий Z и содержал текст. Второй div был сразу за передним div, но с более низким индексом Z и имел изображение (изображение не фоновое) для ширины и высоты 100%. Поэтому, когда я показывал 2 деления вместе, это выглядело как одно деление, потому что они идеально перекрывали друг друга. Когда я печатаю в браузере IE, он отображается с изображением, потому что изображение - это не фоновое изображение, а обычный тег img, который заполняет нижнюю границу.

некоторый код.

<div id="survey" class="surveyResponseWindow" style="display:none;">Please logout and re-login, because your session has expired.</div>
<div id="surveyBackground" class="surveyBackgroundDiv" style="display:none;">
<!-- provides the background image for ie browser so that it does not show the lower level divs. -->
<img src="/rsm/jsp/public/images/contentGrad.gif" width="100%" height="100%" />
</div>

<script language="javascript" type="text/javascript">  
function showSurvey(surveyResponseId) {
    var e = document.getElementById("survey");
    var bkgd = document.getElementById("surveyBackground");
    var focusinput = document.getElementById('focusinput');
    var nh = 'data-nohide';

    if (e.style.display=='none') {
        e.style.display='block';//show div
        bkgd.style.display='block';//show div
    }
    focusinput.focus();//set focus so we know when they click outside

    e.onclick = function(e) {
        this.style.display='none';//hide div if they click on it
        bkgd.style.display='none';//show div
    };
    //if the user press ESC
    focusinput.onkeyup = function(e){
        if(e.keyCode === 27){
            var survey = document.getElementById("survey");
            var bkgd = document.getElementById("surveyBackground");
            //hide the div
            survey.style.display = 'none';
            bkgd.style.display = 'none';
            this.removeAttribute(nh);
        }else{
            //do something else with other keys(ie:down, up, enter)...
            focusinput.focus();
        }
    };
    //click somewhere else input onblur
    // was taken out because the browser print function would close the survey div page.
    //focusinput.onblur = function(){
    //    if(!e.getAttribute(nh)){
    //      //hide the div
    //        e.style.display = 'none';
    //    }
    //};     

    var params='<%=request.getContextPath()%>/request/dashboard/drilldown/callSurveyDetailAjax.html?surveyResponseId='+surveyResponseId;
    YAHOO.plugin.Dispatcher.fetch(e,params, {onLoad:showBackground});
}

var showBackground = function() {
    var e = document.getElementById("survey");
    var bkgd = document.getElementById("surveyBackground");
    bkgd.style.width = e.innerWidth();
    bkgd.style.height = e.innerHeight();
    bkgd.style.left = e.offsetWidth();
    bkgd.style.top = e.offsetHeight();
}

window.onload = function() {
    var focusinput = document.getElementById('focusinput');
    focusinput.focus();//set focus so we know when they click outside
}
</script>

в CSS поставьте это

.surveyResponseWindow 
{
width:500px;
height:600px;
z-index: 2;
position: absolute;
top:100px;
left:150px;
border:1px solid #AAAAAA;   
border-bottom-left-radius:10px;
border-bottom-right-radius:10px;
border-top-left-radius:10px;
border-top-right-radius:10px;   
box-shadow: -1px 7px 15px -2px #000;
}

.surveyBackgroundDiv 
{
z-index: 1;
position: absolute;
top:100px;
left:150px;
width:500px;
height:600px;
border:1px solid #AAAAAA;   
border-bottom-left-radius:10px;
border-bottom-right-radius:10px;
border-top-left-radius:10px;
border-top-right-radius:10px;   
box-shadow: -1px 7px 15px -2px #000;
}
0 голосов
/ 28 февраля 2009

Я считаю, что это настройка браузера, а не серверная часть веб-сайтов. Однако я могу ошибаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...