Печать штрих-кодов с нерегулярными линиями
Клиент попросил меня создать для них решение по инвентаризации, где они будут печатать этикетки со штрих-кодом для всего офисного оборудования, чтобы отслеживать их различными способами.
Они дали мне принтер Citizen CL-S621 (разрешение 203x203 точек на дюйм), чтобы использовать его для тестирования и после (кошмарного случая), настроить драйверы для печати и подогнать все под нестандартные этикетки, которые они дали мне для тестирования, и это самая большая проблема, с которой я столкнулся. все еще сталкивается с тем, что принтер испытывает проблемы с печатью некоторых полос по прямой линии и вместо этого печатает их в пунктирной / пунктирной форме.
Код C# ниже показывает основы того, как я строю штрих-коды, используя эту библиотеку:
public void CreateTheBarcode(string StringToEncode)
{
Barcode b = new Barcode();
b.LabelFont = new Font("Sample Bar Code Font", 24, FontStyle.Bold);
b.IncludeLabel = true;
b.Encode(BarcodeLib.TYPE.CODE128, StringToEncode, Color.Black, Color.White, 730, 140);
b.SaveImage(@"C:\temp\Barcodes\"+StringToEncode+".png",SaveTypes.PNG);
Print(@"C:\temp\Barcodes\"+StringToEncode+".png");
}
public static void Print(string FilePath)
{
Process printJob = new Process();
printJob.StartInfo.FileName = FilePath;
printJob.StartInfo.UseShellExecute = true;
printJob.StartInfo.Verb = "printto";
printJob.StartInfo.CreateNoWindow = false;
printJob.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
printJob.StartInfo.Arguments = "\"" + "Citizen CL-S621" + "\"";
printJob.StartInfo.WorkingDirectory = Path.GetDirectoryName(FilePath);
printJob.Start();
}
Жестко заданные ширина и высота - лучшее приближение, которое я нашел для хорошего размера изображения, которое принтер будет принимать и точно печатать на этикетках, поскольку мне приходилось измерять их размер по линейке, а также между смещением принтера и проблемами точности измерения глаз, чтобы получить работающий размер оказалось хлопотно
В любом случае, я сгенерировал несколько штрих-кодов, и изображения были четкими, четкими и выглядели довольно хорошо:
Линии прямые и четко обозначенные, текст четкий, все выглядит хорошо; но когда я иду печатать их, я получаю:
Некоторые из полос печатаются прямо и четко, в то время как некоторые имеют неправильные края, а некоторые - просто неправильные точечные / косые / изогнутые узоры. Текст во всех них страдает той же проблемой. Я пробовал разные размеры шрифтов и предположительно штрих-код шрифтов, и проблема не устранена. Проблема сохраняется, если я удаляю текстовые метки.
Это кажется мне проблемой растеризации изображения, но я не совсем уверен, и я не знаю, как это исправить.
Я еще не уверен, сможет ли сканер прочитать их или нет, я получу их завтра, но любые советы о том, что я могу делать неправильно, будут оценены.
1 ответ
Эти настройки принтера должны помочь:
Выберите принтер в Device and Printers
> Printing Preferences
> Graphics
Задавать Dithering
к None
Принтер сглаживает ваши изображения. Это эндемическая проблема со шрифтами штрих-кода. Вы должны либо установить для своего принтера не сглаживание (попробуйте "Настройки" / "Принтер" / "Параметры печати" / "Цветовой режим" / "Монохромный"), либо установить DPI изображения таким же, как DPI принтера (обычно 300 DPI).
Если ваш принтер отображает прямоугольник, а не DPI, вам нужно настроить размер изображения таким образом, чтобы пиксели изображения были целым числом, кратным пикселям принтера одного и того же прямоугольника.
Трудно предложить решение вашей проблемы, потому что у вас слишком много движущихся частей; Вы начинаете со шрифта, который идет к изображению, которое идет к файлу, который идет к команде оболочки, которая идет к приложению, о котором Вы не сказали нам об этом, идет к принтеру. Любой из этих шагов может сглаживать ваше изображение.
Мое предложение состоит в том, чтобы удалить эти промежуточные части. Что звонит CreateTheBarcode
? Приложение, которое вы написали? Попробуйте распечатать это приложение на принтере напрямую, используя.NET System.Drawing.Printing.PrintDocument
, Вы не можете сделать это и должны использовать приложение-загадку UseShellExecute
звонки? Изучите это приложение, возможно, есть какой-то способ, которым вы можете отправлять команды принтера вместо прохождения всего этого шрифта в изображение в файл rigamarole; У многих принтеров этикеток есть способы вывода текста, такого как "test 123", непосредственно в виде штрих-кодов.
Редактировать: Может быть, то, что вы пытаетесь, совершенно невозможно. Каковы размеры этикетки, на которой вы печатаете? Ваш пример "Больше чисел" имеет ширину более 500 пикселей, а ваш принтер - только 200 DPI. Если метки уже, чем 500/200 ≅ 2,5 дюйма, полоса не будет подходить, даже если вы печатаете с разрешением 203 DPI.
Та же проблема, и это сработало отлично.
Вариант 1. Отрегулируйте настройки дизеринга
- Щелкните кнопку Windows.
- Зайдите в Панель управления.
- Перейдите в Устройства и принтеры.
- Щелкните правой кнопкой мыши предпочтительный принтер.
- Щелкните "Настройки принтера".
- Перейдите на вкладку "Дизеринг" и выберите "Нет". Нажмите "Применить".