Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

приобретение практических навыков его использования для ввода и вывода информации. 2. Зад, Exercises of Systems Engineering

приобретение практических навыков его использования для ввода и вывода информации. 2. Задание на работу 1. Изучить теоретические положения по данной лабораторной работе. 2. Установить в системе эмулятор виртуальных COM-портов (Virtual Serial Port Driver). 3. Создать два виртуальных COM-порта и эмулировать связь между ними. 4. Разработать программное обеспечение для передачи данных через последовательный интерфейс. Вариантами заданий могут быть следующие: – реализовать чат, функционирующий через COM-порт

Typology: Exercises

2023/2024

Uploaded on 10/12/2023

le-tien
le-tien 🇺🇸

1 / 8

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Лабораторная работа 3.
Печать документов
1. Цель работы
Изучение методов печати текстовой, табличной и графической информации в
операционной системе MS Windows, получение навыков подготовки произвольных
документов к выводу на принтеры различного типа.
2. Теоретические сведения
Для взаимодействия приложений с графическими устройствами, такими как экран
дисплея, принтер или плоттер, в Windows используется интерфейс графических устройств
(GDI). И когда приложению требуется выполнить операцию вывода графического
изображения, оно осуществляет это посредством GDI и работает не с реальным
(физическим), а с логическим устройством. Выполняя запрос приложения, GDI обращается к
драйверу соответствующего устройства вывода, который уже непосредственно работает с
физическим устройством. Такой подход позволяет приложениям Windows единообразно
работать на любом оборудовании, лишь бы был установлен соответствующий драйвер. Само
приложение обращается к устройству вывода посредством контекста устройства, который
представляет собой структуру данных, содержащую информацию о том, как нужно
выполнять операции вывода на данном устройстве. Эта структура при ее создании
ассоциируется с драйвером конкретного физического устройства, преобразующего все
направляемые ему вызовы в такие, которые им поддерживаются.
Все сказанное в полной мере относится и к выводу на принтер: сначала необходимо
создать контекст отображения, связанный с принтером, куда затем и направлять весь
графический вывод (как и при выводе на экран). Однако отличия все-таки есть. И связаны
они, прежде всего, с тем, что при печати графический вывод осуществляется постранично, а
листы бумаги могут иметь различные размеры и/или ориентацию (книжную или альбомную).
За отслеживание этих параметров целиком отвечает программист. Есть и некоторые другие
отличия.
Следует совершенно четко представлять, что вывод на принтер осуществляется
исключительно через буфер, который, однако, служит не только для временного хранения
данных. Все несколько сложнее. Дело в том, что при вызове функций рисования для
контекста принтера эти команды GDI выполняются не сразу, а накапливаются в специальном
метафайле. И только после того, как приложение завершит рисование одной страницы
документа, созданный метафайл "проигрывается" в контексте принтера. Печать происходит
именно в этот момент. Сам механизм скрыт от приложения, и единственное, что требуется,
это сообщить GDI о начале и завершении процесса печати листа.
Вторым важным моментом является то, что печать в системе Windows организована
через специальную очередь, которая формируется приложением Print Manager (Диспетчер
печати). Для печати документа приложения помещают в эту очередь свои данные (задания
на печать), выводимые на принтер в фоновом режиме, в порядке поступления.
Для печати документов Win32 API предоставляет следующие функции:
StartDocформирует задание на печать нового документа;
StartPageподготавливает контекст устройства вывода для печати новой страницы
готовит метафайл; необходимо вызвать эту функцию перед выводом в контекст
устройства;
EndPage завершает программный процесс печати одной страницы
формирование метафайла, после чего он выводится непосредственно на принтер;
EndDocзавершает процесс печати документа;
pf3
pf4
pf5
pf8

Partial preview of the text

Download приобретение практических навыков его использования для ввода и вывода информации. 2. Зад and more Exercises Systems Engineering in PDF only on Docsity!

Лабораторная работа № 3.

Печать документов

1. Цель работы

Изучение методов печати текстовой, табличной и графической информации в операционной системе MS Windows , получение навыков подготовки произвольных документов к выводу на принтеры различного типа.

2. Теоретические сведения

Для взаимодействия приложений с графическими устройствами, такими как экран дисплея, принтер или плоттер, в Windows используется интерфейс графических устройств ( GDI ). И когда приложению требуется выполнить операцию вывода графического изображения, оно осуществляет это посредством GDI и работает не с реальным (физическим), а с логическим устройством. Выполняя запрос приложения, GDI обращается к драйверу соответствующего устройства вывода, который уже непосредственно работает с физическим устройством. Такой подход позволяет приложениям Windows единообразно работать на любом оборудовании, лишь бы был установлен соответствующий драйвер. Само приложение обращается к устройству вывода посредством контекста устройства, который представляет собой структуру данных, содержащую информацию о том, как нужно выполнять операции вывода на данном устройстве. Эта структура при ее создании ассоциируется с драйвером конкретного физического устройства, преобразующего все направляемые ему вызовы в такие, которые им поддерживаются. Все сказанное в полной мере относится и к выводу на принтер: сначала необходимо создать контекст отображения, связанный с принтером, куда затем и направлять весь графический вывод (как и при выводе на экран). Однако отличия все-таки есть. И связаны они, прежде всего, с тем, что при печати графический вывод осуществляется постранично, а листы бумаги могут иметь различные размеры и/или ориентацию (книжную или альбомную). За отслеживание этих параметров целиком отвечает программист. Есть и некоторые другие отличия. Следует совершенно четко представлять, что вывод на принтер осуществляется исключительно через буфер, который, однако, служит не только для временного хранения данных. Все несколько сложнее. Дело в том, что при вызове функций рисования для контекста принтера эти команды GDI выполняются не сразу, а накапливаются в специальном метафайле. И только после того, как приложение завершит рисование одной страницы документа, созданный метафайл "проигрывается" в контексте принтера. Печать происходит именно в этот момент. Сам механизм скрыт от приложения, и единственное, что требуется, — это сообщить GDI о начале и завершении процесса печати листа. Вторым важным моментом является то, что печать в системе Windows организована через специальную очередь, которая формируется приложением Print Manager (Диспетчер печати). Для печати документа приложения помещают в эту очередь свои данные (задания на печать), выводимые на принтер в фоновом режиме, в порядке поступления. Для печати документов Win32 API предоставляет следующие функции:

  • StartDoc — формирует задание на печать нового документа;
  • StartPage — подготавливает контекст устройства вывода для печати новой страницы

— готовит метафайл; необходимо вызвать эту функцию перед выводом в контекст

устройства;

  • EndPage — завершает программный процесс печати одной страницы —

формирование метафайла, после чего он выводится непосредственно на принтер;

  • EndDoc — завершает процесс печати документа;
  • AbortDoc — служит для принудительного завершения процесса печати;
  • SetAbortProc — используется для обеспечения возможности фоновой печати и

принудительного завершения процесса печати;

  • ResetDC — позволяет настроить индивидуальные параметры печати отдельных

листов документа.

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

  1. Прежде всего, формируется контекст отображения для принтера.
  2. Затем обеспечивается возможность принудительного (аварийного) завершения печати, заполняется структура DOCINFO и вызывается функция StartDoc.
  3. После завершения подготовительных действий организуется цикл печати страниц документа, где должны быть проверены специально созданные флаги отмены и завершения печати. Вывод на принтер в Windows организуется постранично, поэтому перед началом печати каждой страницы необходимо вызвать функцию StartPage , которая устанавливает параметры специального метафайла, куда будет направляться вывод для всей страницы.
  4. После того как вся страница записана в метафайл, следует закрыть его и отправить непосредственно на принтер. Для этой цели используется функция EndPage. Цикл выполняется для всех страниц и завершается либо аварийно, либо после вывода всего документа. В первом случае следует вызвать функцию AbortDoc , а во втором — EndDoc.
  5. В заключение необходимо освободить используемый контекст устройства. Подобный процесс, с теми или иными вариациями, выполняется при любом выводе документа на печать. Рассмотрим примеры реализации печати с использованием наиболее распространенных языков программирования: 1. Borland C++ Builder. В этой среде разработки вывод информации на принтер осуществляется посредством класса TPrinter. Этот объект в себе инкапсулирует всю функциональность, необходимую для реализации работы с принтерами.
  • Инициализация принтера производится с помощью функции TPrinter* Printer() ;
  • Для инициализации начала вывода информации на принтер вызывается функция

BeginDoc(). Для завершения вывода информации на принтер вызывается функция EndDoc().

  • Любой вывод информации на принтер производится через объект Canvas.
  • Текст выводится с помощью функций TextRect(TRect, int, int, AnsiString) и

TextOutA(int, int, AnsiString).

  • Произвольное изображение выводится на печать функцией Drow(int, int, TBitmap*) ,

одним из аргументов которой является указатель на графический объект TBitmap. Если

необходимо напечатать не растровое изображение, а графический объект, то его предварительно надо перевести в растровое изображение.

  • Простейшие графические изображения (такие как линии, прямоугольники, эллипсы, и

прочие) имеют свои функции для вывода их через объект Canvas.

Пример печати: TPrinter* Prntr; Prntr = Printer(); Prntr->BeginDoc(); Prntr->Canvas->TextOutA(100, 100, “Произвольный текст”); Prntr->Canvas->Draw(200,100,pBitmap); // pBitmap – указатель на объект TBitmap, содержащий некоторую картинку Prntr->Canvas->MoveTo(0,0);

int NumPages; //Переменная, определяющая номер текущей страницы: int PageNumber; Максимальное количество страниц в диапазоне — 9999; очевидно, что его вполне хватит для распечатки любого документа. Основным событием, в обработчике которого практически и будет осуществляться вся печать, будет событие PrintPage элемента printDocument. Класс Graphics , принадлежащий пространству имен System.Drawing , — один из важнейших классов, отвечающих за рисование графики и вывода текста на форме. При создании новой формы пространство имен System.Drawing по умолчанию включается в шаблон. Для формирования страницы печати создаем экземпляр этого класса: System.Drawing.Printing.PrintPageEventArgs e; Graphics graph = e.Graphics; //Создаем объект font, которому устанавливаем // шрифт элемента rtbText Font font = rtbText.Font; //Получаем значение межстрочного интервала — высоту шрифта float HeightFont = font.GetHeight(graph); //Создаем экземпляр strfmt класса StringFormat для определения //дополнительных параметров форматирования текста. StringFormat stringformat = new StringFormat(); Страница представляет собой прямоугольный объект, параметры которого следует определить. Для этого используется класс RectangleF (литера F указывает на использование типа данных с плавающей точкой float ): //Создаем экземляры rectanglefFull и rectfText класса RectangleF для //определения областей печати и текста. RectangleF rectanglefFull, rectfText; //Создаем переменные для подсчета числа символов и строк. int NumberSymbols, NumberLines; Страница, формируемая для печати, состоит из трех областей

Первая область — полный размер страницы, обычно имеющий названия, например, формат A4 или A3. Информацию об этой области предоставляет свойство PageBounds класса PrintPageEventArgs. Его значением является объект Rectangle , свойства X и Y которого равны 0 , а свойства Width и Height предоставляют размеры бумаги по умолчанию, выраженные в сотых долях дюйма. Вторая область связана с конструктивными особенностями принтеров — большинство из них используют для печати площадь, меньшую размеров бумаги. Область печати определяется значением свойства VisibleClipBounds класса Graphics , представляемая объектом RectangleF. Свойства Х и Y этого объекта имеют значения 0 , а ее свойства Width и Height равны горизонтальному и вертикальному размерам области печати страницы. В третьей области помещается текст, она обычно определяется пользователем. В Microsoft Word , например, мы устанавливаем заданные значения полей. По умолчанию, эта область рассчитывается с отступом в один дюйм по периметру страницы. Ее размер возвращается объектом Rectangle свойства MarginBounds. В любом случае, области формируются объектами Rectangle или RectangleF , конструкторы которых могут иметь следующий вид: Rectangle (int x, int y, int width, int height); RectangleF(float x, float y, float width, float height); Эти конструкторы отличаются только типом данных, формирующих структуру. Координатные оси области, представляющей собой прямоугольник, направлены следующим образом:

В качестве области печати устанавливаем объект rectanglefFull : if (graph.VisibleClipBounds.X<0) rectanglefFull = e.MarginBounds; else //Определяем объект rectanglefFull rectanglefFull = new RectangleF( //Устанавливаем координату X e.MarginBounds.Left — (e.PageBounds.Width — graph.VisibleClipBounds.Width)/2, //Устанавливаем координату Y .MarginBounds.Top — (e.PageBounds.Height — graph.VisibleClipBounds.Height)/2, //Устанавливаем ширину области e.MarginBounds.Width, //Устанавливаем высоту области e.MarginBounds.Height);

imageLength = printableWidth * 90/100; Yposition += imageLength; } else { imageLength = printableHeight * 90/100; Xposition += imageLength + spaceWidth; } Выводим изображение в области rectImage : Rectangle rectImage= new Rectangle((int)leftMargin + 1, (int)topMargin + 1, (int)imageLength,(int)imageLength); graph.DrawImage(pictureBox1.Image,(int)leftMargin + 1, (int)topMargin + 1, (int)imageLength,(int)imageLength); Определяем область rectText и выводим в нее строку с указанием размера файла (используется метод PrintTextString ): RectangleF rectText = new RectangleF(Xposition, Yposition, rightMargin -

- Xposition, bottomMargin - Yposition); PrintText (graph, font,"Размер изображения: ", Convert.ToString (pictureBox1.Image.Size), ref rectText); Более подробно о механизме печати документов в операционной системе MS Windows вы можете прочитать в файле Spooler.doc , который находится в подкаталоге Print каталога с данной лабораторной работой. Проекты, созданные в средах Borland C++ Builder и MS Visual Studio 2005 и демонстрирующие печать информации, находятся в подкаталогах Builder и C# подкаталога Print каталога с методическими указаниями к данной лабораторной работе.

3. Оборудование

Персональный компьютер с установленной операционной системой MS Windows 2000 SP4 , XP SP2, Vista или 7 и средами разработки ПО Borland C++ Builder или MS Visual Studio 2005/2008/.

4. Задание на работу

  1. Изучить теоретические положения по данной лабораторной работе.
  2. Разработать программное обеспечение для вывода информации, заданной преподавателем, на принтер. Печатаемый документ должен содержать в себе текстовые, табличные и графические данные.

5. Оформление отчета

Отчет должен содержать:

  1. название и цель работы;
  2. вариант задания;
  3. результаты работы созданного программного обеспечения;

4. листинг программы, реализующей задание.

6 Контрольные вопросы

6.1. Каким образом выполняется печать документов в операционной системе MS Windows? 6.2. Какие функции Win32 API используются при печати? Какова последовательность вызова этих функций? 6.3. Какие средства предлагает среда Borland C++ Builder для печати информации? 6.4. Перечислите достоинства и недостатки использования класса TPrinter при печати.

6.5. Каким образом осуществляется вывод на принтер текстовой и графической информации при использовании класса TPrinter? 6.6. Для чего служат объекты PrintDocument, PageSetupDialog, PrintPreviewDialog, PrintDialog? Перечислите известные вам свойства и методы этих объектов. 6.7. Каким образом осуществляется печать текстовой информации в приложениях, созданных для платформы .NET? 6.8. Каким образом осуществляется печать графической информации в приложениях, созданных для платформы .NET? 6.9. Какие области выделяют в страницах, формируемых для печати? Как можно определить границы этих областей? 6.10. Дайте характеристику известным вам методам печати документов в операционной системе MS Windows.

7. Библиографический список

  1. Архангельский А.Я. Программирование в C++ Builder 6. – М.: Изд-во «Бином», 2005.
  • 1162 с.
  1. Дейтел Х. C#: наиболее полное руководство. – СПб.: «БХВ-Петербург», 2006. – 1056 с.
  2. MSDN. Электронная документация Microsoft для разработчиков программного обеспечения. – 200000 с.
  3. Нейгел К., Ивьен Б., Глинн Дж., Скиннер М., Уотсон К. C# 2005 и платформа .NET 3.0 для профессионалов. – М.-Спб.-Киев: Диалектика, 2008. – 1790 с.
  4. Рихтер Дж. Программирование на платформе Microsoft .NET Framework. – М.: Русская редакция, 2003. – 511 с.