実現したいこと
小さいサイズのPDFもしくは画像にバーコードを表示したい。
できればPythonがよいが別言語でも可
前提
社内製品識別用のバーコード付きラベルを印刷したい
ラベルプリンタメーカーの用意しているテンプレート・ソフトを利用してもよいが、PCごとに環境を整えるのが面倒なのでラベルサイズの小さい(40mm×60mmほど)PDFまたは画像を生成し、直接印刷したい。
発生している問題・エラーメッセージ
python-barcodeでバーコードを生成し、サイズに合わせて縮小すると画像が荒くなってしまい読み取りが困難
きれいなバーコードを生成する方法が知りたい。
### 該当のソースコード
python
import os from reportlab.lib.units import mm from reportlab.pdfgen import canvas from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics import barcode from barcode.writer import ImageWriter from PIL import Image file = "label.pdf" file_path = os.path.expanduser("~") + "/Desktop/" + file pdf_width, pdf_height = 62 * mm, 40 * mm c = canvas.Canvas(file_path, pagesize=(pdf_width, pdf_height)) hinban = "11111-1111" konpou_bangou = "230424008000" suryo = "100" bc = barcode.get_barcode_class('ean13') img = bc(konpou_bangou,writer=ImageWriter()) img.save('barcode') img = Image.open('C:/Users/user/Desktop/barcode.png') img_resize = img.resize((img.width // 4, img.height // 4), Image.ANTIALIAS) img_resize.save('C:/Users/user/Desktop/barcode1.png') pdfmetrics.registerFont(TTFont("HGRGE", "C:/Windows/Fonts/HGRGE.TTC")) c.setFont("HGRGE", 12) c.line(1*mm, 1*mm, 1*mm, 39*mm) c.line(1*mm, 39*mm, 61*mm, 39*mm) c.line(61*mm, 39*mm, 61*mm, 1*mm) c.line(61*mm, 1*mm, 1*mm, 1*mm) c.drawString(3*mm, 34*mm,hinban) c.drawString(3*mm, 29*mm,suryo+"pcs") img_path = os.path.expanduser("C:/Users/user/Desktop") + "/barcode1.png" # 画像ファイルの挿入 c.drawImage(img_path, 3*mm, 3*mm) c.showPage() c.save() subprocess.Popen(["start", "", r"C:/Users/user/Desktop/label.pdf"], shell=True) ### 試したこと python-barcodeで直接小さなサイズのバーコードを出力(まだうまくいっていない) ### 補足情報(FW/ツールのバージョンなど)
縮小するのではなく最初からそのサイズで作ればよいのでは?
ご指摘ありがとうございます。
python-barcodeのoptionでサイズしてできるとの記述を見つけたのでテストしてみます。
今は数字変更してもサイズ変更が実施されないので、調査中です。
bc = barcode.get('ean13', writer=ImageWriter(), # バーコードの種類を指定
options={'format': 'png', # 画像の形式を指定
'height': 10, # バーコードの高さを指定
'width': 0.8, # バーコードの幅を指定
'quiet_zone': 1}) # 静止ゾーンのサイズを指定
#bc = barcode.get_barcode_class('ean13')
img = bc(konpou_bangou,writer=ImageWriter())
Python詳しくないのとコードが一部なのでなんとも言えませんが、その書き方だと単にoptionsという変数を定義しただけになってませんか?
ライブラリの実行オプションとして渡さないと全てデフォルト値になると思います。
ドキュメント確認してみたのですが、
https://python-barcode.readthedocs.io/en/stable/writers.html#common-writer-options
やはり .save()の第2引数でオプション渡してますね。
https://python-barcode.readthedocs.io/en/stable/writers.html#creating-compressed-svgs
ご丁寧にありがとうございます。
ご指摘の通り、うまく実行オプションに渡すことができていませんでした。
.saveの引数として渡してやるとうまくサイズ変更することができました。
そして、縮小したものよりかなり高品質なバーコードが得られました。
本当にありがとうございました。
私はあくまでPython識者ではなくあくまで経験則の感覚でコメントしてるだけなので、ご自身で顛末をまとめて回答を投稿し(特に質問時と方針変わったわけですからそのあたりも)、自己解決とされると良いと思います。

回答1件
あなたの回答
tips
プレビュー