如何正确显示条形码显示

时间:2011-02-22 00:31:50

标签: jquery zend-framework codeigniter http-headers barcode

我正在使用CodeIgniter和Zend Framework来创建条形码,这非常简单:

$this->load->library('zend');
          $this->zend->load('Zend/Barcode');

            $txt = $_POST['Info'];
            // Only the text to draw is required
            $barcodeOptions = array('text' => $txt);

            // No required options
            $rendererOptions = array();

            // Draw the barcode in a new image,
            // send the headers and the image
            $data = Zend_Barcode::factory(
                'code39', 'image', $barcodeOptions, $rendererOptions
            )->render();

然而,通过Post发送的“Info”是使用带jquery的ajax函数发送的:

$('#barCode').click(function(){
            var datos = $("#concepto").val();
            $.ajax({
                url: "<?php echo site_url('articulos/barcode')?>",
                type: "POST",
                data: "Info=" + datos
            });

我知道它有效,因为我在ajax调用上有一个“success:”函数但是它返回了乱码:

  

PNGPNGPNGPNGPNGPNGPNGPNGPNGPNGPNGPNGPNGPNG

我知道这是图像,但由于标题无法重新显示,因此显示如下。我已经尝试打开一个新窗口,但也没有这样做,任何人都可以建议我获取条形码图像的方法?最好在新窗口中。

3 个答案:

答案 0 :(得分:4)

您可以尝试将地址传递给生成图像的脚本到图像标记的源中,例如<img src="/path/to/image/script"/>即使您想在HTML中呈现图像。这就是我使用条形码的方式。我的代码示例仅使用Zend:

内部控制器/操作

$barcodeOptions = array('text' => 'TEXT');

$rendererOptions = array('imageType'=>'gif');

Zend_Barcode::factory('code39', 'image', $barcodeOptions, $rendererOptions)->render();

视图

<img src="/path/to/the/controller/action/above"/>

答案 1 :(得分:1)

如果您不想发送标题,可以使用draw方法:

Zend_Barcode::factory('code39', 'image', $barcodeOptions, $rendererOptions)->draw();

答案 2 :(得分:0)

您必须更改内容类型标头。这是浏览器了解如何显示收到的数据的唯一方法。

你说你不能改变标题,这是为什么?你应该可以使用:

header('Content-Type: image/png');

如果没有这个,你可能会得到一个text/plain的默认内容类型,导致它显示为文本。

浏览器只看到一个比特流,并依赖Content-Type标题来决定如何处理它。