Следуя совету Дэвида Хеффернана, я пошел и пересмотрел свои типы данных. Попытка собрать двоичные данные из символов не работает, потому что не все значения от 0 до 255 могут быть правильно представлены. Вы теряете данные по пути, в основном. Тем более что ваши данные представлены 4 байтами за раз.
Решением для меня было использование компонента Async Professional вместо библиотеки Denjan Comport lib. Он лучше обрабатывает потоки данных и имеет встроенный журнал, который я мог бы использовать, чтобы выяснить, как интерпретировать потоковые данные с инструмента. Это также лучше задокументировано. Итак, если вы новичок в последовательной связи (как и я), лучше попробуйте.
Хорошо, таким образом принимая во внимание комментарии и т.д. к моему сообщению что-то вроде этого:
Для простоты дисплея здесь, я использую на стилях страницы, но можно легко использовать от постраничных справочников.
Объявление следующих стилей:
<!-- 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" на всех отделениях - Вы возможно хотели бы отметить, что Вы находитесь на последнем отделении и имеете другой стиль на этом, если у Вас нет информации, которую Вы хотели бы на той последней странице.
Я не уверен, что Вы можете сделать все это с помощью 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", которая перечисляет информацию, как Вы хотите с теми стилями на повторных элементах, необходимо быть хорошими для движения.
Необходимо будет сделать все это через JavaScript, создать ссылку печати что когда нажатые вызовы window.print ().
Однако, прежде чем это называют, создают вывод, что Вы хотите и помещаете его в отдельный контейнер (отделение, промежуток, любой элемент HTML, который поддерживает теги, которые Вы собираетесь поместить в нем). Скройте контейнер с помощью основной таблицы стилей и создайте отдельную таблицу стилей для печатных СМИ. В рамках той новой таблицы стилей показывают контейнерный элемент и скрывают старые элементы и что-либо еще, что Вы не хотите печатать.
Если Вы хотите вымыться, страница впоследствии затем установила использование интервала SetInterval для разрешения нежелательного контейнера. Я сразу не сделал бы этого после вызова window.print (), потому что я предполагаю, что принтер не взял бы на изменениях HTML, однако быстрый тест скажет Вам иначе.
Если существует способ прислушаться к печати Вашей страницы с помощью JavaScript затем, Вы могли поднять трубку это также.
Править: Поскольку Вы используете jQuery, я клонировал бы исходный список при помощи
$('#listID').clone().appendTo('#hiddencontainer')