使用条码写几条形码一个文件,蟒蛇

问题描述 投票:0回答:1

假设我有一个名为barcodes.txt文本文件看起来像这样:

some-13-digit-number
some-other-13-digit-number

我想利用这个文件和输出条形码在.SVG文件的每一行。这个我已经做了已经使用条形码:

import barcode as bc
import os

path = os.path.dirname(os.path.abspath(__file__))
read_file = 'barcode.txt'
lines = (line.rstrip('\n') for line in open(path+read_file))
i = 0
for line in lines:
    image = bc.get_barcode_class('ean13')
    image_bar = image(u'{}'.format(int(line))) #  This is byte-data as I understand it.
    barcode_file = open(path+'ean'+str(i)+'.svg', 'wb')
    image_bar.write(barcode_file)
    i += 1

这一切正常。没关系输入的所有丢失的支票,我剥夺了很多关,使这短暂的,容易阅读。

问题:我想每一个条形码写入到同一个文件,而不是通过条形码迭代和写入各自在自己的文件。我已经尝试了明显的只是写相同的文件名,但是这给了我一个头-问题。生成的SVG文件看起来像这样的检查:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg
  PUBLIC '-//W3C//DTD SVG 1.1//EN'
  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg height="23.000mm" version="1.1" width="44.000mm" xmlns="http://www.w3.org/2000/svg">
    <!--Autogenerated with python-barcode 0.9.0-->
    <g id="barcode_group">
        <rect height="100%" style="fill:white" width="100%"/>
        <rect height="15.000mm" style="fill:black;" width="0.330mm" x="6.500mm" y="1.000mm"/>
        <rect height="15.000mm" style="fill:white;" width="0.330mm" x="6.830mm" y="1.000mm"/>
        <rect height="15.000mm" style="fill:black;" width="0.330mm" x="7.160mm" y="1.000mm"/>    
        ...

如果我写入同一文件,该头被重复用于每个写入条形码,这导致错误,而且所有的条形码(RECT元素)重叠。所以我在寻找不同的解决方案。有什么建议么?我敞开,如果一个适合我可以获取所有号码生成条形码,从单一的.txt文件的要求使用不同的库。

python svg barcode
1个回答
0
投票

对我来说,解决办法是首先生成一个文件的每一行:

for line in lines:
    filename = "ean"+str(i)+".png"
    barcodefilepath = barcodeimagefolder/filename
    if len(line) == 12 or len(line) == 13: #Let's assume these are ean13-barcodes.
        image = bc.get_barcode_class('ean13')
        image_bar = image(u'{}'.format(int(line)), writer=ImageWriter(), text_distance=1)
        barcode_file = open(barcodefilepath, "wb")
        image_bar.write(barcode_file)
        barcode_file.close()
        i += 1

然后,我添加列表中的所有这些文件:

files_and_dirs = Path(barcodeimagefolder).glob('**/*')
images = [x for x in files_and_dirs if x.is_file() and x.suffix == '.png']

并链接到他们的熊猫数据帧:

imagedata = list()
for image in images:
    imagedata.append("<img src='barcodeimages/{0}' width='200'>".format(image.name))

d = {'Barcodes': imagedata}
df = pd.DataFrame(data=d)

然后我可以保存为HTML,或通过wkhtmltopdf PDF。最后,我删除了所有的临时文件:

files = glob.glob(str(barcodeimagefolder.resolve())+'/ean*')
for ean_image in files:
    os.remove(ean_image)
© www.soinside.com 2019 - 2024. All rights reserved.