python - Reportlab 的 Code128 条码作为 HTML 图像标签,使用 Python 中的数据 URI 方案

标签 python django barcode reportlab data-url

我需要使用 Python/Django 创建一个 Code128 条形码,它必须嵌入到 HTML 文档中。

我不想在磁盘上创建任何临时(或缓存)文件。这就是为什么我想将它们嵌入为数据 URI 方案。

结果必须是这样的:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot">

你能给我推荐一个简单的方法吗?

现在我使用 ReportLab 创建这样的条形码并将它们嵌入到 PDF 文件中,但我不知道如何将它们导出为数据 URI 方案。如果这是执行此操作的推荐方法。

最佳答案

这是我自己的解决方案:

from base64 import b64encode
from reportlab.lib import units
from reportlab.graphics import renderPM
from reportlab.graphics.barcode import createBarcodeDrawing
from reportlab.graphics.shapes import Drawing

def get_barcode(value, width, barWidth = 0.05 * units.inch, fontSize = 30, humanReadable = True):

    barcode = createBarcodeDrawing('Code128', value = value, barWidth = barWidth, fontSize = fontSize, humanReadable = humanReadable)

    drawing_width = width
    barcode_scale = drawing_width / barcode.width
    drawing_height = barcode.height * barcode_scale

    drawing = Drawing(drawing_width, drawing_height)
    drawing.scale(barcode_scale, barcode_scale)
    drawing.add(barcode, name='barcode')

    return drawing

def get_image():

    barcode = get_barcode(value = '01234567890', width = 600)
    data = b64encode(renderPM.drawToString(barcode, fmt = 'PNG'))
    print '<img src="data:image/png;base64,{0}">'.format(data)

你还可以将条形码旋转 90°:

def get_barcode_rotated(value, width, barWidth = 0.05 * units.inch, fontSize = 30, humanReadable = True):

    barcode = createBarcodeDrawing('Code128', value = value, barWidth = barWidth, fontSize = fontSize, humanReadable = humanReadable)

    drawing_width = width
    barcode_scale = drawing_width / barcode.width
    drawing_height = barcode.height * barcode_scale

    drawing = Drawing(drawing_width, drawing_height)
    drawing.scale(barcode_scale, barcode_scale)
    drawing.add(barcode, name='barcode')

    drawing_rotated = Drawing(drawing_height, drawing_width)
    drawing_rotated.rotate(90)
    drawing_rotated.translate(0, -drawing_height)
    drawing_rotated.add(drawing, name='drawing')

    return drawing_rotated

这是一个示例结果:

http://pastehtml.com/view/ci7qei4k1.html

关于python - Reportlab 的 Code128 条码作为 HTML 图像标签,使用 Python 中的数据 URI 方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13345284/

相关文章:

python - 如何使用python创建com对象

python - 在 scipy 中为 fmin_cobyla 指定约束

django - 格式以语言感知方式 float 在 Django 模板中

python - 为什么不能将 Django 站点嵌入到另一个 HTML(iframe) 中?

c# - 文本框使用不同的条形码时出错

python - 使用tensorflow.contrib.framework.python.ops.audio_ops.audio_spectrogram生成频谱图

python - OpenCV Python:distCoeffs2不是数字元组

Django save() 方法不保存

java - 在 ZXing 生成的 QR 码上删除边距/边框空间并将 ErrorCorrectionLevel 设置为 'H'?

java - 读取DataMatrix/QR码 zxing java