Печать штрих-кодов с нерегулярными линиями

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

Они дали мне принтер 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. Отрегулируйте настройки дизеринга

  1. Щелкните кнопку Windows.
  2. Зайдите в Панель управления.
  3. Перейдите в Устройства и принтеры.
  4. Щелкните правой кнопкой мыши предпочтительный принтер.
  5. Щелкните "Настройки принтера".
  6. Перейдите на вкладку "Дизеринг" и выберите "Нет". Нажмите "Применить".
Другие вопросы по тегам