0

いくつかのラベル プリンター A4 + を使用して、倉庫用に大量のラベルを印刷しています。それぞれが異なるラベルを印刷したいので、印刷ジョブごとに DBF ファイルを作成することにしました。 DBFファイルには多数の異なるレコードが含まれており、WebサービスがA4 +プリンターにftpリクエストを送信し、DBFファイルをプリンターにftpすると、印刷コマンドがプリンターに送信され、DBFファイルが印刷されます。ほとんどの場合、すべての手順が正常に実行されますが、プリンターの DBF ファイルが Web サービスで作成された dbf ファイルとほとんど異なる場合があり、違いはファイルのヘッダーにあり、この違いが問題の原因となります。プリンターはラベルを印刷しますが、DBF ファイルの最後までは印刷しません。たとえば、DBF ファイルに 500 レコードが含まれている場合、

Web サービスをホストするサーバー上の DBF ファイル (これは dbf ファイルを作成する場所です) とプリンター上の ftp ファイルの両方を比較します。それらは同じですが、ファイルのヘッダーのほんの少しが異なり、それによって作成されます。この問題。

DBFファイルを作成するコードと、このファイルをプリンターにftpするために使用するコードを含め、サンプル用に両方のDBFファイルを添付します。

私たちのチームはプロジェクトに取り組んでおり、あなたの Web サイトのヘルプを調査していますが、この時点ですべてが問題なく、このケースをデバッグできなかったことがわかります。おそらく、これを解決するのを手伝ってくれるでしょう.

------------------------DBFファイルの作成 ----------------------- -------------------------------

   private bool EportDBF(string filePath, List<BarcodeData> list)
   {
       string tableName = string.Empty;
       string folderPath = string.Empty;

       GetFileNameAndPath(filePath, ref tableName, ref folderPath);

       string connString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + folderPath + "; Extended Properties=DBASE IV;";
       string createStatement = "Create Table " + tableName + " ( ";
       string insertStatement = "Insert Into " + tableName + " Values ( ";
       string insertTemp = string.Empty;

       OleDbConnection conn = new OleDbConnection(connString);

       try
       {

           createStatement += "[RW] varchar(4), ";
           createStatement += "[CODE] varchar(16), ";
           createStatement += "[DESC] varchar(16), ";
           createStatement += "[WEIGHT] varchar(16), ";
           createStatement += "[DATE] varchar(32), ";
           createStatement += "[RCODE] varchar(16), ";
           createStatement += "[BCODE] varchar(16) )";

           conn.Open();

           DataSet dsFill = new DataSet();

           OleDbDataAdapter daInsertTable = new OleDbDataAdapter(createStatement, conn);

           daInsertTable.Fill(dsFill);

           int row = 1001;

           foreach (var item in list)
           {
               insertTemp = insertStatement;

               insertTemp += "'" + row++ + "' , ";
               insertTemp += "'" + item.ItemCode + "' , ";
               insertTemp += "'0' , ";
               insertTemp += "'" + item.Weight + "' , ";
               insertTemp += "'" + item.DateTime + "' , ";
               insertTemp += "'" + item.ReferenceCode + "' , ";
               insertTemp += "'" + item.Barcode.ToString() + "' ) ;";

               daInsertTable = new OleDbDataAdapter(insertTemp, conn);

               daInsertTable.Fill(dsFill);
           }

           conn.Close();
           conn.Dispose();
       }
       catch (Exception ex)
       {
           conn.Close();
           conn.Dispose();

           return false;
       }

       return true;
   }

------------------------DBFファイルをプリンターにFTPで転送--------------------- ----------------------

   private bool UpLoadDBF(List<BarcodeData> barcodeDatas, string path)
   {
       try
       {
           EportDBF(path, barcodeDatas);

           FtpWebRequest request;
           FtpWebResponse response;

           Stream sourceStream = new MemoryStream();
           Stream requestStream = sourceStream;
           StreamReader reader = new StreamReader(path);

           try
           {
               request = (FtpWebRequest)WebRequest.Create("ftp://" + printerIP + "/card/barcodes.dbf");
               request.Method = WebRequestMethods.Ftp.UploadFile;
               request.KeepAlive = false;
               request.Credentials = new NetworkCredential(user, password);

               byte[] byteArray = Encoding.Default.GetBytes(reader.ReadToEnd());
               sourceStream = new MemoryStream(byteArray);

               try
               {
                   requestStream = request.GetRequestStream();
               }
               finally 
               {
                   request.ContentLength = sourceStream.Length;

                   byte[] buffer = new byte[sourceStream.Length];
                   int count = 2048;
                   if (sourceStream.Length < count)
                       count = (int) sourceStream.Length;

                   int bytesRead = sourceStream.Read(buffer, 0, count);

                   do
                   {
                       requestStream.Write(buffer, 0, bytesRead);
                       bytesRead = sourceStream.Read(buffer, 0, count);

                   } while (bytesRead > 0);

                   sourceStream.Close();
                   requestStream.Close();
               }
           }
           catch (Exception ex)
           {
           }
           finally
           {
               request = null;

               sourceStream.Close();
               sourceStream.Dispose();

               reader.Close();
               reader.Dispose();

               requestStream.Close();
               requestStream.Dispose();
           }
       }
       catch (Exception ex)
       {
           return false;
       }

       return true;
   }

よろしくお願いします

4

1 に答える 1

0

Encoding.Default.GetBytesを使用してバイトを読み取った理由がわかりません。代わりに、FileStreamのReadメソッドを使用してバイトを読み取ります。お役に立てれば。

于 2012-05-25T06:50:51.973 に答える