Как распечатать указанный div (не отключая вручную все остальное содержимое на странице)?
Я хочу избегать нового диалогового окна предварительного просмотра, поэтому создание нового окна с этим контентом бесполезно.
Страница содержит пару таблиц, одна из которых содержит div, который я хочу напечатать - таблица оформлена с использованием визуальных стилей для Интернета, которые не должны отображаться при печати.
javascript
css
printing
dhtml
noesgard
источник
источник
Ответы:
Вот общее решение с использованием только CSS , которое я проверил для работы.
Альтернативные подходы не так хороши. Использовать
display
сложно, потому что если какой-либо элемент имеет,display:none
ни один из его потомков не будет отображаться. Чтобы использовать его, вы должны изменить структуру своей страницы.Использование
visibility
работает лучше, так как вы можете включить видимость для потомков. Невидимые элементы по-прежнему влияют на макет, поэтому я перехожуsection-to-print
в верхний левый угол, чтобы он печатался правильно.источник
position:fixed
вместо этого. Однако Chrome и Safari также будут обрезать контент, особенно после первой страницы. Так что мой окончательный обходной путь был установлен как цель и всех родителей кoverflow:visible; position:absolute !important; top:0;left:0
#section-to-print
соответствует самому разделу;#section-to-print *
соответствует каждому подэлементу раздела. Так что это правило просто делает раздел и все его содержимое видимыми.У меня есть лучшее решение с минимальным кодом.
Поместите свою печатную часть в div с идентификатором, подобным этому:
Затем добавьте событие, например onclick (как показано выше), и передайте идентификатор div, как я делал выше.
Теперь давайте создадим действительно простой JavaScript:
Заметьте, как это просто? Нет всплывающих окон, нет новых окон, нет сумасшедшего стиля, нет библиотек JS, таких как jquery. Проблема действительно сложных решений (ответ не сложный и не тот, на который я ссылаюсь) заключается в том, что он НИКОГДА не будет транслироваться во всех браузерах! Если вы хотите изменить стили, сделайте, как показано в проверенном ответе, добавив атрибут media в ссылку на таблицу стилей (media = "print").
Нет пуха, легкий, это просто работает.
источник
.click
. Обидно, потому что код такой легкий.Все ответы до сих пор довольно ошибочны - они либо включают в себя добавление
class="noprint"
ко всему, либо запутаютсяdisplay
внутри#printable
.Я думаю, что лучшим решением было бы создать оболочку для непечатаемых материалов:
Конечно, это не идеально, так как требует немного перемещать вещи в вашем HTML ...
источник
С jQuery это так просто:
источник
Не могли бы вы использовать таблицу стилей печати и использовать CSS для упорядочения содержимого, которое вы хотите напечатать? Прочитайте эту статью для большего количества указателей.
источник
Это хорошо работает:
Обратите внимание, что это работает только с «видимостью». «дисплей» не будет делать это. Проверено в FF3.
источник
Мне не очень понравился ни один из этих ответов в целом. Если у вас есть класс (скажем, printableArea) и он является непосредственным потомком тела, то вы можете сделать что-то подобное в своем CSS для печати:
Для тех, кто ищет printableArea в другом месте, вам нужно убедиться, что отображаются родительские объекты printableArea:
Использование видимости может вызвать много пробелов и пустых страниц. Это потому, что видимость поддерживает пространство элементов, просто делает его скрытым, тогда как дисплей удаляет его и позволяет другим элементам занимать его пространство.
Причина, по которой работает это решение, заключается в том, что вы не захватываете все элементы, а только непосредственных детей тела и скрываете их. Другие решения ниже с display css скрывают все элементы, которые влияют на все внутри содержимого printableArea.
Я бы не стал предлагать javascript, так как вам понадобится кнопка печати, которую нажимает пользователь, и стандартные кнопки печати браузера не будут иметь такого же эффекта. Если вам действительно нужно это сделать, то я бы сохранил html тела, удалил все ненужные элементы, распечатал, затем добавил html обратно. Как уже упоминалось, я бы избежал этого, если бы вы могли использовать опцию CSS, как описано выше.
ПРИМЕЧАНИЕ. Вы можете добавить любой CSS в CSS для печати, используя встроенные стили:
Или, как я обычно использую, это тег ссылки:
источник
Дайте любой элемент, который вы хотите напечатать идентификатор
printMe
.Включите этот скрипт в свой тег head:
Вызвать функцию
источник
хм ... используйте тип листа для печати ... например:
print.css:
источник
источник
Шаг 1: напишите следующий javascript внутри вашего тега head
Шаг 2: Вызвать функцию PrintMe (DivID) с помощью события onclick.
источник
С CSS 3 вы можете использовать следующее:
источник
Я взял контент, используя JavaScript, и создал окно, которое я мог печатать вместо ...
источник
Метод Сандро прекрасно работает.
Я настроил его, чтобы разрешить использование нескольких ссылок printMe, в частности, для использования на страницах с вкладками и расширения текста.
function processPrint(printMe){
<- здесь вызывается переменнаяvar printReadyElem = document.getElementById(printMe);
<- убрал кавычки вокруг printMe для запроса переменной<a href="javascript:void(processPrint('divID'));">Print</a>
<- передача идентификатора div для печати в функцию, чтобы превратить переменную printMe в идентификатор div. нужны одинарные кавычкиисточник
printDiv (divId) : обобщенное решение для печати любого div на любой странице.
У меня была похожая проблема, но я хотел (а) иметь возможность распечатать всю страницу или (б) распечатать любую из нескольких конкретных областей. Мое решение, благодаря большей части вышеперечисленного, позволяет вам указать любой объект div для печати.
Ключом к этому решению является добавление соответствующего правила в таблицу стилей для печатных носителей, чтобы был напечатан запрошенный div (и его содержимое).
Сначала создайте необходимый print css для подавления всего (но без специального правила, разрешающего элемент, который вы хотите распечатать).
Обратите внимание, что я добавил новые правила класса:
Затем вставьте три функции JavaScript. Первый просто включает и выключает таблицу стилей для печатных СМИ.
Второй выполняет реальную работу, а третий убирает потом. Второй (printDiv) активирует таблицу стилей печатного носителя, затем добавляет новое правило, позволяющее печатать желаемый div, выдает печать, а затем добавляет задержку перед окончательной обработкой (в противном случае стили могут быть сброшены до того, как печать будет фактически выполнена). сделанный.)
Последние функции удаляют добавленное правило и снова устанавливают стиль печати на отключенный, чтобы можно было распечатать всю страницу.
Единственное, что нужно сделать, это добавить одну строку к вашей обработке загрузки, чтобы изначально стиль печати был отключен, что позволило распечатать всю страницу.
Затем из любой точки вашего документа вы можете распечатать div. Просто выведите printDiv ("thedivid") с кнопки или чего-либо еще.
Большим плюсом этого подхода является общее решение для печати выбранного содержимого на странице. Это также позволяет использовать существующие стили для печатаемых элементов, включая содержащий div.
ПРИМЕЧАНИЕ. В моей реализации это должна быть первая таблица стилей. Измените ссылки на листы (0) на соответствующий номер листа, если вам нужно сделать это позже в последовательности листов.
источник
@Kevin Флорида Если у вас есть несколько div с одним и тем же классом, вы можете использовать его следующим образом:
я использовал Colorbox внутренний тип контента
источник
В моем случае мне пришлось напечатать изображение внутри страницы. Когда я использовал решение, проголосовавшее, у меня была 1 пустая страница, а на другой - изображение. Надеюсь, это кому-нибудь поможет.
Вот CSS, который я использовал:
Мой HTML это:
источник
Лучший css для размещения пустой высоты:
источник
Лучший способ напечатать определенный Div или любой элемент
источник
Используйте специальную таблицу стилей для печати
и затем добавьте класс т.е. noprint к каждому тегу, содержимое которого вы не хотите печатать.
В CSS используйте
источник
Если вы хотите распечатать этот div, вы должны использовать инструкцию:
источник
Функция printDiv () выходила несколько раз, но в этом случае вы теряете все элементы привязки и входные значения. Итак, мое решение состоит в том, чтобы создать div для всего, что называется «body_allin», и еще один, кроме первого, «body_print».
Затем вы вызываете эту функцию:
источник
Вы можете использовать отдельный стиль CSS, который отключает любой другой контент, за исключением контента с идентификатором «printarea».
См. CSS Design: Going to Print для дальнейшего объяснения и примеров.
источник
У меня было несколько изображений, каждое с кнопкой, и мне нужно было нажать на кнопку, чтобы напечатать каждый div с изображением. Это решение работает, если я отключил кеш в своем браузере, а размер изображения не меняется в Chrome:
источник
Еще один подход, не влияющий на текущую страницу, и он также сохраняется при печати. Здесь селектор должен быть конкретным селектором div, какой контент нам нужно распечатать.
Здесь при условии, что время ожидания показывает, что к нему применяются внешние CSS.
источник
Я попробовал многие из предоставленных решений. Ни одно из них не работало идеально. Они либо теряют привязки CSS или JavaScript. Я нашел идеальное и простое решение, которое не теряет ни привязки CSS, ни JavaScript.
HTML:
Javascript:
источник
Я очень опаздываю на эту вечеринку, но я бы хотел принять еще один подход. Я написал крошечный модуль JavaScript под названием PrintElements для динамической печати частей веб-страницы.
Он работает путем итерации по выбранным элементам узла и для каждого узла проходит по дереву DOM до элемента BODY. На каждом уровне, включая начальный (который является уровнем узла для печати), он прикрепляет класс маркера (
pe-preserve-print
) к текущему узлу. Затем присоединяет другой маркер class (pe-no-print
) ко всем братьям и сестрам текущего узла, но только еслиpe-preserve-print
на них нет классов. В качестве третьего акта он также присоединяет другой класс к сохранившимся элементам предка.pe-preserve-ancestor
.Простой простой дополнительный css только для печати скроет и покажет соответствующие элементы. Некоторые преимущества этого подхода состоят в том, что все стили сохраняются, он не открывает новое окно, нет необходимости перемещать множество элементов DOM, и, как правило, он неинвазивен с вашим исходным документом.
Смотрите демо , или прочитайте соответствующую статью для получения дополнительной информации .
источник
Вы можете использовать это: http://vikku.info/codesnippets/javascript/print-div-content-print-only-the-content-of-an-html-element-and-not-the-whole-document/
Или используйте
visibility:visible
иvisibility:hidden
css свойство вместе с@media print{}
«display: none» скроет все вложенные «display: block». Это не решение.
источник
Я нашел решение.
источник
Основываясь на ответе @Kevin Флорида, я сделал способ избежать отключения сценария на текущей странице из-за перезаписи содержимого. Я использую другой файл с именем "printScreen.php" (или .html). Оберните все, что вы хотите напечатать в div "printSource". А с помощью javascript откройте новое окно, которое вы создали ранее («printScreen.php»), затем захватите содержимое в «printSource» верхнего окна.
Вот код
Главное окно:
Это «printScreen.php» - другой файл для захвата содержимого для печати
источник