DavidMorf Ответов: 1

Как определить, является ли принтер билетным принтером VB.NET


Приветствия,

Я пытаюсь расширить внутренний печатный компонент, который мы используем в качестве эталона в наших проектах для обработки печати.
Один из проектов, над которым я работаю, должен определить тип выходного формата (ticket, nametag, A4,...) на основе типа принтера по умолчанию (A4 officejet, ticketprinter, A5 printer,...), чтобы правильно организовать макет и т. д. Идея заключается в том, что вы посылаете команду в эту программу и она генерирует соответствующее задание печати в нужном формате.

У меня в основном возникают проблемы с определением того, является ли принтер билетным принтером. Билеты, как правило, имеют переменную длину, поэтому я искал свойства набора бумаги, которые я мог бы запросить, чтобы узнать, используем ли мы принтер билетов, но пока безрезультатно. Не уверен, что есть другой способ узнать, какой тип принтера мы используем.

За последние пару дней я не смог найти никакого способа определить, в каком формате по умолчанию печатает принтер.
Любая помощь будет оценена по достоинству, хотя я начинаю думать, что нет простого способа просто спросить любого принтера, какой тип принтера у них есть.

Заранее спасибо за любую помощь!

Приветствует,
Дэвид

Что я уже пробовал:

Я попробовал поиграть с некоторыми свойствами.
Свойство PaperKind возвращает "custom", но поскольку у нас есть несколько других промышленных принтеров с другими форматами, которые также возвращают это... это не очень полезно.
Создание именованного пользовательского стиля бумаги, который мы должны были бы настроить на всех принтерах билетов, на самом деле не является вариантом, поскольку мы говорим о сотнях принтеров.
Я использовал размер бумаги, чтобы попытаться угадать, какой тип бумаги мы используем, но я не уверен, что это надежно, учитывая, что у нас есть теги, которые тоже имеют ту же ширину, что и билеты. Я полагаю, что он в некотором роде выполняет свою работу, но, как я уже сказал, Я не нахожу его "чистым" способом определить это.

1 Ответов

Рейтинг:
4

OriginalGriff

Не уверен, что есть что - то, что сделает это автоматически - принтер билетов-это просто принтер определенного формата, в конце концов, - но есть Типографские установки.Собственность Размеры Страниц (Системы.Рисование.Печать) | Microsoft Docs[^] который возвращает коллекцию поддерживаемых форматов бумаги. Предположительно, принтер билетов будет поддерживать определенные размеры, а не A4, A3 и т. д.

PrinterSettings ps = new PrinterSettings();         // Gets default printer
Console.WriteLine(ps.PrinterName);
foreach (PaperSize paperSize in ps.PaperSizes)
    {
    Console.WriteLine("{0}: ({1}, {2})", paperSize.PaperName, paperSize.Width, paperSize.Height);
    }
Дает мне их для моего Epson BX305:
EPSON4782F5 (Epson Stylus Office BX305)
A4 210 x 297 mm: (827, 1169)
10 x 15 cm (4 x 6 in): (400, 600)
13 x 18 cm (5 x 7 in): (500, 700)
A6 105 x 148 mm: (413, 583)
A5 148 x 210 mm: (583, 827)
B5 182 x 257 mm: (717, 1012)
9 x 13 cm (3.5 x 5 in): (350, 500)
13 x 20 cm (5 x 8 in): (500, 800)
20 x 25 cm (8 x 10 in): (800, 1000)
16:9 wide size (102 x 181 mm): (400, 711)
100 x 148 mm: (394, 583)
Envelope #10 4 1/8 x 9 1/2 in: (413, 950)
Envelope DL  110 x 220 mm: (433, 866)
Envelope C6  114 x 162 mm: (449, 638)
Letter 8 1/2 x 11 in: (850, 1100)
Legal 8 1/2 x 14 in: (850, 1400)
A3 297 x 420 mm: (1169, 1654)
A3+ 329 x 483 mm: (1295, 1902)
A2 420 x 594 mm: (1654, 2339)
B4 257 x 364 mm: (1012, 1433)
B3 364 x 515 mm: (1433, 2028)
User Defined: (827, 1169)


DavidMorf

Спасибо за ответ.
Я боялся, что это будет единственный способ выяснить это.

Вот что я получаю от билетопечатника:

TEC B-SV4USER : (410, 292)
2 x 4 : (210, 400)
4 x 4 : (410, 400)
4 x 6 : (410, 600)
Form-A : (409, 839)
Form-F : (409, 689)

У нас есть 3 или 4 различных типа билетных принтеров, и у меня нет их всех определенных на моей машине, увы. Поскольку некоторые из них принадлежат к другому бренду, я надеюсь, что их размеры бумаги несколько схожи.

OriginalGriff

Так что идите по площади: умножьте W*H, и вы получите меньшее число, чем принтер, который поддерживает даже A5!
Если все области находятся ниже минимума (сохраненного в конфигурационном файле), то это, вероятно, принтер билетов. Спросите пользователя, тот ли это, и сохраните идентификатор в вашем конфигурационном файле для следующего раза.

DavidMorf

Эй, Оригинал Грифф,

Это верно, но только в том случае, если размер бумаги по умолчанию принтера билетов всегда установлен на минимум. Не знаю никаких стандартов, которые определяют, что размер тикетпринтера по умолчанию всегда должен быть минимальным, по крайней мере, но это может быть действительно так.
Мой пример выше дал бы 410*292=119.720 , но если другой принтер билетов работает с его максимальным размером по умолчанию, то это может быть что-то вроде 410*1400=574.000 ... что, в свою очередь, является большей областью, чем А5, я думаю.

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

Спасибо за вклад!

OriginalGriff

Всегда пожалуйста!