Единственное отображение страницы, многостраничная проблема печати

Следуя совету Дэвида Хеффернана, я пошел и пересмотрел свои типы данных. Попытка собрать двоичные данные из символов не работает, потому что не все значения от 0 до 255 могут быть правильно представлены. Вы теряете данные по пути, в основном. Тем более что ваши данные представлены 4 байтами за раз.

Решением для меня было использование компонента Async Professional вместо библиотеки Denjan Comport lib. Он лучше обрабатывает потоки данных и имеет встроенный журнал, который я мог бы использовать, чтобы выяснить, как интерпретировать потоковые данные с инструмента. Это также лучше задокументировано. Итак, если вы новичок в последовательной связи (как и я), лучше попробуйте.

5
задан Peter Mortensen 1 April 2011 в 18:07
поделиться

3 ответа

Хорошо, таким образом принимая во внимание комментарии и т.д. к моему сообщению что-то вроде этого:

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

Объявление следующих стилей:

<!-- media="print" means these styles will only be used by printing 
  devices -->
<style type="text/css" media="print">
    .printable{ 
      page-break-after: always;
    }
    .no_print{
      display: none;
    }
</style>
<!-- media="screen" means these styles will only be used by screen 
  devices (e.g. monitors) -->
<style type="text/css" media="screen">
    .printable{
      display: none;
    }
</style>
<!-- media types can be combined with commas to affect multiple devices -->
<style type="text/css" media="screen,print">
    h1{
      font-family: Arial, Helvetica, sans-serif;
      font-size: large;
      font-weight: bold;
    }
</style>

Затем Вы испытываете необходимость, чтобы сделать некоторый тяжелый подъем в Вашем представлении для получения выглядящего примерно так HTML:

<!-- Intial display for screen -->
<div class="no_print">
    <!-- Loop through users here using preferred looping/display method -->
    <ul>
        <li>Bob</li>
        <li>Fred</li>
        <li>John</li>
    </ul>
</div>
<!-- Now loop through each user, highlighting as you go, but for printer* -->
<div class="printable">
    <ul>
        <li><b>Bob</b></li>
        <li>Fred</li>
        <li>John</li>
    </ul>
</div>
<div class="printable">
    <ul>
        <li>Bob</li>
        <li><b>Fred</b></li>
        <li>John</li>
    </ul>
</div>
<div class="printable">
    <ul>
        <li>Bob</li>
        <li>Fred</li>
        <li><b>John</b></li>
    </ul>
</div>

Теперь для "соответствующего метода дисплея".

Я просто начинаю с MVC, таким образом, Вы, вероятно, получили лучший метод выполнения этого, но на данный момент я, вероятно, использовал бы метод RenderPartial как это:

<%
  /* 
  Using RenderPartial to render a usercontrol,
  we're passing in the Model here as the Model for the control, 
  depends on where you've stored your objects really, then we
  create a new anonymous type containing the properties we want
  to set.
  */

  // Display the main list
  Html.RenderPartial("~/Views/Shared/Controls/UserList.ascx",
      ViewData.Model, 
      new {HighlightUser = null, IsPrintable = false});

  // Loop through highlighting each user
  foreach (var user in ViewData.Model)
  {
    Html.RenderPartial("~/Views/Shared/Controls/UserList.ascx",
      ViewData.Model, 
      new {HighlightUser = user, IsPrintable = true});
  }
%>

Ваш пользовательский элемент управления может затем обработать объем дисплея, устанавливая класс содержания отделений (или безотносительно элемента Вы используете) как соответствующий, и выделение полужирным пользователь на основе того передал в - как я сказал, существует возможно лучший способ сделать частичный материал.

Очевидно, Вы, вероятно, хотите совершенно другой рендеринг пользователей для дисплея и печати - я предполагаю, что Вы, вероятно, добавляете довольно мало сокрытия совершенства jQuery и отображения материала, и т.д., который Вы на самом деле собираетесь отобразить на печатной версии, таким образом, Вы, вероятно, хотите два differnt пользовательских элемента управления и можете затем сойти с рук не передачу в свойстве IsPrintable.

Кроме того, как есть, это распечатает пустую страницу в конце, из-за стиля "page-break-after" на всех отделениях - Вы возможно хотели бы отметить, что Вы находитесь на последнем отделении и имеете другой стиль на этом, если у Вас нет информации, которую Вы хотели бы на той последней странице.

10
ответ дан 18 December 2019 в 14:52
поделиться

Я не уверен, что Вы можете сделать все это с помощью CSS, но здесь являетесь некоторыми для запущения Вас.

Получить разрыв страницы в CSS при печати использования один из:

Они принимают значения:

auto   // Default. Insert a page break before/after the element if necessary
always // Insert a page break before/after the element
avoid  // Avoid inserting a page break before/after the element
left   // Insert page breaks before/after the element until it reaches a blank left page
right  // Insert page breaks before/after the element until it reaches a blank right page

Если Вы готовы иметь своего рода страницу "Print", которая перечисляет информацию, как Вы хотите с теми стилями на повторных элементах, необходимо быть хорошими для движения.

2
ответ дан 18 December 2019 в 14:52
поделиться

Необходимо будет сделать все это через JavaScript, создать ссылку печати что когда нажатые вызовы window.print ().

Однако, прежде чем это называют, создают вывод, что Вы хотите и помещаете его в отдельный контейнер (отделение, промежуток, любой элемент HTML, который поддерживает теги, которые Вы собираетесь поместить в нем). Скройте контейнер с помощью основной таблицы стилей и создайте отдельную таблицу стилей для печатных СМИ. В рамках той новой таблицы стилей показывают контейнерный элемент и скрывают старые элементы и что-либо еще, что Вы не хотите печатать.

Если Вы хотите вымыться, страница впоследствии затем установила использование интервала SetInterval для разрешения нежелательного контейнера. Я сразу не сделал бы этого после вызова window.print (), потому что я предполагаю, что принтер не взял бы на изменениях HTML, однако быстрый тест скажет Вам иначе.

Если существует способ прислушаться к печати Вашей страницы с помощью JavaScript затем, Вы могли поднять трубку это также.

Править: Поскольку Вы используете jQuery, я клонировал бы исходный список при помощи

$('#listID').clone().appendTo('#hiddencontainer')

Документация клона

1
ответ дан 18 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: