1

テクノロジ: Visual Studio 2010 および Crystal Reports、MVC3 Web アプリケーション、多層アプリ。

私の Web アプリは、印刷にラベルを付けるために 1 つのレポートを作成します。レポートは正常に機能しますが、バーコードが生成されません。レポートを表示すると、バーコード フィールドが空白です。IDAutomationHC39M を既にインストールしており、winforms プロジェクトで作業しています。

レポートを生成するコード:

    public void Barcode()
    {
        BarCode report = new BarCode();
        Barcodes barcodeDetails = new Barcodes();

        DataTable dataTable = barcodeDetails._Barcodes;
        for (int i = 0; i < 80; i++)
        {
            DataRow row = dataTable.NewRow();
            string nome = "nome" + i;
            decimal preco = i;
            string barcode = i + "ADF" + i;

            row["nome"] = nome;
            row["preco"] = preco;
            row["barcode"] = barcode;

            dataTable.Rows.Add(row);
        }

        report.Database.Tables["Barcodes"].SetDataSource((DataTable)dataTable);

        report.ExportToHttpResponse(ExportFormatType.PortableDocFormat, System.Web.HttpContext.Current.Response, false, "crReport");

    }

バーコードを jpeg に変換する方が簡単ですか? はいの場合、クリスタルレポートでこれを作成するにはどうすればよいですか?

EDI I:次のコードを変更してみます:

for (int i = 0; i < 80; i++)
            {
                DataRow row = dataTable.NewRow();
                string nome = "nome" + i;
                decimal preco = i;
                string barcode = "*" + i + "ADF" + i + "*";

                row["nome"] = nome;
                row["preco"] = preco;

                System.Web.UI.WebControls.Image imgBarCode = new System.Web.UI.WebControls.Image();
                using (Bitmap bitMap = new Bitmap(barcode.Length * 40, 80))
                {
                    using (Graphics graphics = Graphics.FromImage(bitMap))
                    {
                        Font oFont = new Font("IDAutomationHC39M", 10);
                        PointF point = new PointF(2f, 2f);
                        SolidBrush blackBrush = new SolidBrush(Color.Black);
                        SolidBrush whiteBrush = new SolidBrush(Color.White);
                        graphics.FillRectangle(whiteBrush, 0, 0, bitMap.Width, bitMap.Height);
                        graphics.DrawString("*" + barcode + "*", oFont, blackBrush, point);
                    }
                    using (MemoryStream ms = new MemoryStream())
                    {
                        bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                        byte[] byteImage = ms.ToArray();

                        Convert.ToBase64String(byteImage);
                        imgBarCode.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(byteImage);
                        row["barcode"] = imgBarCode.ImageUrl;
                    }
                }



                dataTable.Rows.Add(row);
            }

しかし、効果はありません。

4

1 に答える 1

0

asp.net アプリ (私の場合は MVC) でバーコードを表示するプロセスは、実際にはフォントを jpeg に変換することです。

ステップ 1: バーコードの値を取得し、開始と終了に「*」を追加してから、ビットマップ、フォント、およびグラフィックスを作成します。

                DataRow row = dataTable.NewRow();

                string barcode = "*" + ID.ToString() + VALOR_VENDA.Value.ToString() + "*";

                row["nome"] = NOME_PRODUTO;
                row["preco"] = VALOR_VENDA.Value;

                int w = barcode.Length * 40;
                Bitmap oBitmap = new Bitmap(w, 100);
                Graphics oGraphics = Graphics.FromImage(oBitmap);
                Font oFont = new Font("IDAutomationHC39M", 18);
                PointF oPoint = new PointF(2f, 2f);
                SolidBrush oBrushWrite = new SolidBrush(Color.Black);
                SolidBrush oBrush = new SolidBrush(Color.White);
                oGraphics.FillRectangle(oBrush, 0, 0, w, 100);
                oGraphics.DrawString(barcode, oFont, oBrushWrite, oPoint);

次に、MemoryStream を使用してビットマップを追加します。データセット フィールドのタイプが Byte[] であることを確認してください。メモリストリームを使用して、データセットに値 .ToArray(); を追加します。

                using (MemoryStream ms = new MemoryStream())
                {
                    oBitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                    byte[] byteImage = ms.ToArray();
                    row["barcode"] = byteImage;
                }
                dataTable.Rows.Add(row);
于 2013-08-17T16:49:05.383 に答える