我正在使用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
我知道这是图像,但由于标题无法重新显示,因此显示如下。我已经尝试打开一个新窗口,但也没有这样做,任何人都可以建议我获取条形码图像的方法?最好在新窗口中。
答案 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
标题来决定如何处理它。