質問

グラフィックをEPL2プリンターに作成してアップロードするのに苦労しています。

文字通り利用可能なソフトウェアをかなり疲れてインターネットをトロールしたので、私は途方に暮れています。

次のスクリプトでアップロードしようとする1ビットファイルがあります。

setppi.txt

GK"NAMEPCX"
GK"NAMEPCX" 
GM"NAMEPCX"3042

そして、でアップロードします

copy setppi.txt+ppirmt.pcx lpt1/b

髪の毛が残っているものを引き裂く前に、経験のある人がヒントを得ましたか?この問題はPCXの作成に関係していることをほぼ確信していますが、すべてのオプションを試してみて、次のステップについて確信が持てません。

役に立ちましたか?

解決

PCXを適切に作成するために見つけた方法は次のとおりです。

GIMPでは、ファイルを1ビット(白黒)BMPとして保存します。保存されたフォーマットは、プリンターで要求されているように1ビットPCXではないため、PCXを選択しないでください!

ImageMagickの変換プログラムを使用して、BMPをPCXに変換します。

私がそれを理解した後に私が遭遇したもう1つの問題は、グラフィックがまだ腐敗していたということでした。それはコードページの問題だったので、それに注意してください。

他のヒント

使用しているプログラミング言語については言及していません。

C#(または一般的に.net)の場合、EPLを使用した画像の印刷に関するブログ投稿を次に示します。
EPL2 GWコマンドを使用して、ゼブラサーマルプリンターに画像を送信します

そして、同じ男からの別のブログ投稿、 それは私がc#でzebraプリンターにeplを印刷することから始めました.

EPL2言語を使用してPCXグラフィックを出力する方法は2つあります。最初のものはあなたが提案したものです:

GK"namepcx"
GK"namepcx"
GM"namepcx",3042
..... and here follows monochrome PCX data ...
..... with 128-bit header and following pixel data 1 bit-per pixel..

後で、これを保存したものを書くことができるはずです 「namepcx」 GM経由のプリンターの画像バッファーには、PCXのストアを試して2日間費やしましたが、正しく保存されることはありません。だから私は単に使用することになりました GW Pixelデータをプリンター画像バッファーに直接書き込むコマンド。 「フラッシュメモリに保存する」を避けます。また、もともとは、GMを介したこの「フラッシュ」ストレージは、すべてのラベルで繰り返される画像(ロゴなど)を保存することを目的としていました。したがって、1回保存してから、同じロゴで10 000のラベルを印刷できます。ただし、Javaからの嘆願の場合、通常、さまざまなラベルに多くの異なる画像を印刷することになります。したがって、すべてのラベルの新しい画像をフラッシュするために保存すると、フラッシュメモリが非常にすばやく「摩耗」します。 (例えば、LP 2824プリンターのマニュアルには、フラッシュメモリには100kの書き込みサイクルしかないと述べています)。

したがって、使用しているように見えるかもしれません GW 3ステップを使用する代わりに画像バッファーに直接画像を書き込む GK GM GG より良い解決策かもしれません。

免責事項:私は現在、SVGからEPLへの移植者を書いています。 ここ

私は最近同じ問題に直面していて、 GW- プリンターへのコマンド。

の主な違い GK-GK-GM-GG PCX-Headerを送信するのではなく、生のバイナリデータ(LRE圧縮のないAFAIK)を送信します。

ビットシフトを重視している(非最適化/ナイーブ)C#コードを使用しました。ただし、アルゴリズムは任意の言語で実装でき、簡単です。

[NotNull]
public IEnumerable<byte> GetRawBinaryData([NotNull] Bitmap bitmap,
                                          int octetts)
{
  var height = bitmap.Height;
  var width = bitmap.Width;

  for (var y = 0;
        y < height;
        y++)
  {
    for (var octett = 0;
          octett < octetts;
          octett++)
    {
      var value = (int) byte.MaxValue;

      for (var i = 0;
            i < 8;
            i++)
      {
        var x = octett * 8 + i;
        var bitIndex = 7 - i;
        if (x < width)
        {
          var color = bitmap.GetPixel(x,
                                      y);
          if (color.A > 0x32
              || color.R > 0x96 && color.G > 0x96 && color.B > 0x96)
          {
            value &= ~(1 << bitIndex);
          }
        }
      }

      yield return (byte) value;
    }
  }
}

コンバージョンのために留意しなければならないこと:

  • 1:白い点
  • 0:黒い点
  • width 8倍の倍数でなければなりません(バイトを送信しているため) - 上記のコードはパディングでこれを処理します
  • ラベルの回転/方向!
  • ここにいくつかのしきい値が実装されています...

私も実装しました GM-GG, 、しかし、これはこの答えの範囲を超えています。関連するコードはにあります EplCommands.StoreGraphics(bitmap:Bitmap,name:string).

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top