Виртуальный Принтер для C++, C#, VB.NET, Delphi, VB (Visual Basic)
Printer Previewer
В этом примере мы создадим приложение Print Previewer. Оно будет читать инофрмацию из INI-файла и выводить её на форму. Так же приложение будет отображать EMF-файлы, сгенерированные виртуальным принтером:

В правой части формы размещен ListBox, который содержит детальную информацию о работе принтера, включая список распечатанных страниц. Кликнув на имя EMF-файла, он отобразится на форме. При двойном клике на preview-окно откроется просмотрщик для EMF-файлов, который установлен на вашем компьютере.
Наши рекомендации по написанию этого приложения на языке C#
Если вы используете C# или VB.NET (или любой другой язык .NET), вы не найдете ни одной функции, которая манипулирует INI-файлами. Единственный способ - воспользоваться функцией GetPrivateProfileString из Windows API.
Вот версия такого кода на C#:
using System;
using System.Text;
using System.Runtime.InteropServices;
namespace Ini
{
public class IniFile
{
public string m_sIniFilePath;
[DllImport("kernel32")]
private static extern long WritePrivateProfileString
(string section, string key, string val, string sIniFilePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString
(string section, string key, string def, StringBuilder retVal, int size, string sIniFilePath);
public IniFile(string sIniFilePath)
{
m_ sIniFilePath = sIniFilePath;
}
public void IniWriteValue(string Section, string Key, string Value)
{
WritePrivateProfileString(Section, Key, Value, m_ sIniFilePath);
}
public string IniReadValue(string Section, string Key, string Default)
{
StringBuilder temp = new StringBuilder(255);
GetPrivateProfileString(Section, Key, "", temp, 1024, m_ sIniFilePath);
return (temp.Length>0) ? temp.ToString() : Default;
}
}
}
INI-файл содежит много параметров, поэтому мы сведем их и функцию чтения в класс. Назовем его IniFile. В классе IniFile будет хранится вся информация из INI-файла (имя принтера, ориентация страницы, разрешение, количество распечатанных страниц, пути к EMF-файлам и т.д.) Для заполнения ListBox'a мы будм пользоваться экземпляром класса DocumentProperties. DocumentProperties внутри себя содержит экземрляр класса IniFile, для манипуляции с INI-фалом.
Экземпляр класса DocumentProperties создается используя путь к INI-файлу, который получен из командной строки:
DocumentProperties m_docProps = new DocumentProperties();
...
// Parse .ini file
if (m_docProps.Retrieve(m_commandLine) == true)
{
// Fill ListBox
}
После этого в любом месте программы можно использовать экземпляр класса DocumentProperties для получения данных о напечатанном документе. Так, например, можно отображать EMF-файл на форме, с помощью контрола PictureBox:
pictureBox.Image = Image.FromFile(m_docProps.Files[pageNumber]);
Скачать Printer Prewiever:
Виртуальный принтер для C++/MFC
Виртуальный принтер для Delphi
Виртуальный принтер для C#
Виртуальный принтер для VB.Net
Виртуальный принтер для нескольких языков