pythonpdfbase64

Issues Generating Barcode in data:image/png;base64 Format with Custom Size and No Text


I’m working on a Python project where my goal is to generate barcodes in the data:image/png;base64 format, without any human-readable footer text. Additionally, I need to adjust the size (height and width) and DPI (dots per inch) of the barcode, but I'm encountering some difficulties.

Specifically, I have two issues:

I cannot remove the human-readable footer text that appears below the barcode. I am unable to customize the size (height, width) and DPI of the generated barcode. I am using the python-barcode library along with the ImageWriter to generate the barcode image. I have tried using options like text=None to remove the text and various writer_options to control the size and resolution, but nothing seems to work as expected.

Here’s what I have tried so far:

import barcode
from barcode.writer import ImageWriter
from io import BytesIO
import base64

def generate_barcode_without_text(serial_no):
    barcode_instance = barcode.Code128(serial_no, writer=ImageWriter())
    
    writer_options = {
        'text': None,        # Disable text under the barcode
        'module_width': 0.2, # Adjust the width of the barcode
        'module_height': 15, # Adjust the height of the barcode
        'dpi': 300,          # Set the DPI for the image
        'quiet_zone': 6      # Set the quiet zone around the barcode
    }

    image_stream = BytesIO()
    barcode_instance.write(image_stream, writer_options=writer_options)

    image_stream.seek(0)
    barcode_base64 = base64.b64encode(image_stream.read()).decode('utf-8')

    return barcode_base64

Solution

  • I think the docs are slightly off for the current latest version 0.15-1.

    I was able to change the size and remove the human readable barcode text from under the image with the following code:

    def generate_barcode_without_text(serial_no):
        barcode_instance = barcode.Code128(serial_no, writer=ImageWriter())
    
        writer_options = {
            'write_text': False, # Disable text under the barcode
            'module_width': 0.8, # Adjust the width of the barcode
            'module_height': 25, # Adjust the height of the barcode
            'dpi': 300,          # Set the DPI for the image
            'quiet_zone': 6      # Set the quiet zone around the barcode
        }
    
        image_stream = BytesIO()
        barcode_instance.write(image_stream, options=writer_options)
    
        image_stream.seek(0)
        barcode_base64 = base64.b64encode(image_stream.read()).decode('utf-8')
    
        return barcode_base64
    
    

    The option write_text seems to control whether the text under the barcode is written or not. The current docs don't mention this option and say setting the font_size to 0 suppresses the text, but this yields an error for me.

    The parameter name for passing the writer options to the barcode class is options instead of writer_options too.

    Here is the resulting barcode: example barcode for text "123456789"