Як створити сторінку для друку на Twitter-Bootstrap


162

Я використовую Twitter-Bootstrap, і мені потрібно мати можливість надрукувати сторінку так, як вона виглядає у браузері. Я можу друкувати інші сторінки, зроблені за допомогою Twitter-Bootstrap просто чудово, але я не можу, здається, надрукувати свою сторінку, яка використовує суто Twitter-Bootstrap. Я десь пропускаю тег?

Офіційна сторінка з туберкульозу при друкуванні: Сторінка завантаження Twitter

Моя сторінка при друкуванні: введіть тут опис зображення

Як насправді виглядає моя сторінка: введіть тут опис зображення


2
Ви вказуєте атрибут media = "screen"? Погляньте на мою відповідь.
albertedevigo

Відповіді:


156

Обов’язково мати друковану таблицю стилів.
Це може бути окрема таблиця стилів:

<link rel="stylesheet" type="text/css" media="print" href="print.css">

або один, яким ви ділитесь для всіх пристроїв:

<link rel="stylesheet" type="text/css" href="bootstrap.min.css"> # Note there's no media attribute

Потім ви можете записати свої стилі для принтерів в окремі таблиці стилів або в спільний, використовуючи медіа-запити:

@media print {
    /* Your styles here */
}

29
Я щойно додав це: <link rel = "stylesheet" type = "text / css" media = "print" href = "bootstrap.min.css"> і більше нічого не потрібно було робити. Працював як шарм. Дякую!
Джей Q.

13
Якщо ви вже користуєтеся цією таблицею стилів, швидше за все, у вас є даний момент media="screen", який принтер не побачить. Ви можете або переключити це media="all", або просто видалити, mediaяк підказує вищевказана відповідь.
Wex

Альбертедевіго, мені потрібна допомога щодо стилізації. Як і змінити розмір шрифту, ширину, ... що саме потрібно змінити? ТІА. @JayQ. : Це все ще працює чи застаріло? тому що я не можу змусити його працювати.
musafar006

@dreamster, просто додайте свої стилі до таблиці стилів, що стосується друку. Зауважте, що CSS-каскад все ще працює; тому порядок, успадкування та пріоритети селекції впливатимуть на результат. Напевно, ви можете задати нове запитання зі своїм кодом.
albertedevigo

181

Оновлення Bootstrap 3.2: (поточний випуск)

Поточна стабільна версія Bootstrap становить 3.2.0 .
У версії 3.2 застарілий видимий друк, тому вам слід користуватися таким чином:

Class                        Browser    Print
 -------------------------------------------------
.visible-print-block         Hidden        Visible (as block)
.visible-print-inline        Hidden        Visible (as inline)
.visible-print-inline-block  Hidden        Visible (as inline-block)
.hidden-print                Visible       Hidden

Оновлення завантажувача 3:

Класи друку зараз у документах: http://getbootstrap.com/css/#responsive-utilities-print

Similar to the regular responsive classes,
       use these for toggling content for print.

Class            Browser    Print
 ----------------------------------------
.visible-print   Hidden     Visible
.hidden-print    Visible    Hidden

Версія для завантаження 2.3.1:

Після додавання файлу bootstrap.css у свій HTML,
знайдіть частини, які ви не хочете друкувати, та додайте hidden-printклас у теги. Оскільки файл css включає це:

@media print {
  .visible-print  { display: inherit !important; }
  .hidden-print   { display: none !important; }
}

4
Чи не існує класу, щоб зробити щось видимим і в браузері, і на принтері, у випадку, коли я роблю все ( body) невидимим .hidden-print, але хочу замінити певний елемент, який буде показаний?
Вінсент Пуарьє

1
@VincentPoirier - якщо елемент прихований, все всередині нього приховано. Тому не має сенсу приховувати тіло, а приховувати щось, що є частиною тіла. Тому що не було б контексту (контейнера), в якому можна було б показати цей піделемент. Замість цього виконайте css, щоб приховати всі елементи листя (наприклад, покладіть клас за замовчуванням на внутрішні діви), а потім використовуйте відповідний клас css або id, де потрібно, щоб вони були видимими. Ймовірно, знадобиться деякий експеримент, щоб зробити це правильно.
ToolmakerSteve

112

Замініть кожного col-md-наcol-xs-

наприклад: замінити кожен col-md-6на col-xs-6.

Це те, що працювало для мене, щоб позбутися від цієї проблеми, ви можете побачити, що вам доведеться замінити.


Дякую ! У вас виникли проблеми зі шкалою перегляду HTML у порівнянні з "Перегляд друку" ... все добре зараз!
Девід Белангер

2
Гей, дякую! Під час друку сторінки я зіткнувся з проблемою, кожна divз яких була нижчою за попередню. Ця відповідь дала мені підказку, я додав col-xs-*перед кожним, col-md-*і це вирішило питання. ВІДМОВА: Я не перевіряв додавання контейнера, <div class="row"></div>який, можливо, також вирішив проблему (здається очевидним).
Fr0zenFyr

6
Якщо тільки не призначений інший макет для вузьких екранів (наприклад, телефону), ніж для друку. Здається дивним, що логіка завантажувача принтера вважає, що його екран друку настільки вузький.
ToolmakerSteve

3
Це має бути зверху.
Сурай

Просто додати, що ви можете замінити col-md-, як говорить відповідь, або ви можете просто додати col-xs- як: class = "col-md-6 col-xs-6", і ви можете змішувати та співставляти залежно від вимог вашого дизайну.
zaidorx

17

У @media printфайлі css є розділ коду (Bootstrap 3.3.1 [ОНОВЛЕННЯ:] до 3.3.5), це знімає практично всі стилі, тому ви отримуєте досить чіткі роздруківки навіть під час роботи.

Поки що мені довелося вдатися до вилучення @media printрозділу з bootstrap.css - чого я дуже не радий, але мої користувачі хочуть прямо захоплювати екран, тому це доведеться робити поки що. Якщо хтось знає, як придушити це без змін у файлах завантажувального програмного забезпечення, я був би дуже зацікавлений.

Ось блок коду "ображає", починається з рядка № 192:

@media print {
  *,
  *:before,enter code here
  *:after {
    color: #000 !important;
    text-shadow: none !important;
    background: transparent !important;
    -webkit-box-shadow: none !important;
            box-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: " (" attr(href) ")";
  }
  abbr[title]:after {
    content: " (" attr(title) ")";
  }
  a[href^="#"]:after,
  a[href^="javascript:"]:after {
    content: "";
  }
  pre,
  blockquote {
    border: 1px solid #999;

    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
  select {
    background: #fff !important;
  }
  .navbar {
    display: none;
  }
  .btn > .caret,
  .dropup > .btn > .caret {
    border-top-color: #000 !important;
  }
  .label {
    border: 1px solid #000;
  }
  .table {
    border-collapse: collapse !important;
  }
  .table td,
  .table th {
    background-color: #fff !important;
  }
  .table-bordered th,
  .table-bordered td {
    border: 1px solid #ddd !important;
  }
}

6

Найкращий варіант, який я знайшов, був http://html2canvas.hertzen.com/
http://jsfiddle.net/nurbsurf/1235emen/

html2canvas(document.body, {  
  onrendered: function(canvas) {
    $("#page").hide();
    document.body.appendChild(canvas);
    window.print();
    $('canvas').remove();
    $("#page").show();
  }
});

Я пробував і 0,4, і 0,5, але жоден з них не працював. 0,5 додав за моєю сторінкою деякі непогані речі, але оригінальна сторінка все ще була, і як тоді я мав це надрукувати? Спроби 0,4 спровокували друк, оригінальна сторінка також була там, і візуалізація була зламана
Csaba Toth

3

Якщо хтось шукає рішення для Bootstrap v2.XX тут. Я залишаю рішення, яким я користувався. Це не повністю перевірено на всіх браузерах, проте це може бути гарним початком.

1) переконайтеся, що атрибут медіа bootstrap-responsive.cssє screen.

<link href="/css/bootstrap-responsive.min.css" rel="stylesheet" media="screen" />

2) створити print.cssі переконатися в його атрибуті медіаprint

<link href="/css/print.css" rel="stylesheet" media="print" />

3) всередині print.css, додайте "ширину" вашого веб-сайту в html & body

html, 
body {
    width: 1200px !important;
}

4.) відтворити необхідні класи медіа-запитів, print.cssоскільки вони були всередині, bootstrap-responsive.cssі ми його відключили під час друку.

.hidden{display:none;visibility:hidden}
.visible-phone{display:none!important}
.visible-tablet{display:none!important}
.hidden-desktop{display:none!important}
.visible-desktop{display:inherit!important}

Ось повна версія print.css:

html, 
body {
    width: 1200px !important;
}

.hidden{display:none;visibility:hidden}
.visible-phone{display:none!important}
.visible-tablet{display:none!important}
.hidden-desktop{display:none!important}
.visible-desktop{display:inherit!important}

2

2 речі FYI -

  1. Наразі вони додали кілька перемикаючих класів. Подивіться, що доступно в останньому стабільному випуску - друкуйте перемикачі у respovable-utilities.less
  2. Нове та вдосконалене рішення, що надходить у Bootstrap 3.0 - вони додають окремий файл без друку. Дивіться окремий print.less

0

Щоб вигляд друку виглядав так, як планшет або робочий стіл включають завантажувальний файл як .less, а не як .css, а потім ви можете перезаписати класи, що реагують на завантажувальну програму, наприкінці файлу bootstrap_variables, наприклад, таким чином:

@container-sm:      1200px;
@container-md:      1200px;
@container-lg:      1200px;
@screen-sm:         0;

Не хвилюйтесь щодо розміщення цих змінних у кінці файлу. LESS підтримує ледаче завантаження змінних, щоб вони застосовувалися.


0

Якщо ви хочете зберегти стовпці на форматі формату А4 (це близько 540 пікселів), це хороша ідея

@media print {
    .make-grid(print-A4);
}

.make-print-A4-column(@columns) {
    @media print {
        float: left;
        width: percentage((@columns / @grid-columns));
    }
}

Ви можете використовувати його так:

<div class="col-sm-4 col-print-A4-4">

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.