Как сделать так, чтобы этот штрих-код отображался правильно? - PullRequest
1 голос
/ 22 февраля 2011

Я использую 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, отправляется с помощью функции ajax с jquery:

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

Я знаю, что это работает, потому что у меня была функция "success:" при вызове ajax, но она возвращает бессмысленно:

PNGPNGPNGPNGPNGPNGPNGPNGPNGPNGPNGPNGPNGPNG

Я знаю, что это изображение, но поскольку заголовки не могут быть перевернуты, оно отображается так. Я уже пытался открыть новое окно, но так не получилось, кто-нибудь может подсказать мне способ получить изображение штрих-кода? в новом окне желательно.

Ответы [ 3 ]

4 голосов
/ 23 февраля 2011

Вы можете попробовать передать адрес скрипту, генерирующему изображение, в источник тега изображения, например. <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 голос
/ 16 августа 2011

Если вы не хотите отправлять заголовки, вы можете использовать метод draw:

Zend_Barcode::factory('code39', 'image', $barcodeOptions, $rendererOptions)->draw();
0 голосов
/ 22 февраля 2011

Вы должны изменить заголовок типа контента. Это единственный способ для вашего браузера узнать, как отображать полученные данные.

Вы говорите, что не можете изменить заголовки, почему это так? Вы должны быть в состоянии использовать:

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

Без этого вы, вероятно, получаете тип контента по умолчанию text/plain, в результате чего он отображается в виде текста.

Браузер просто видит поток битов и полагается на заголовок Content-Type, чтобы решить, что с ним делать.

...