From c5f38ecaf54abd66f1b40b838e662ceb5bf8aec0 Mon Sep 17 00:00:00 2001 From: Prasanna Ranjan Date: Sun, 9 Aug 2026 11:55:30 +0200 Subject: [PATCH] URL in qr --- Homebox_QR_XXL_HB001_bis_HB016.pdf | 99 ++++++++++++++++++++++++++++++ generate_qr.py | 53 ++++++++-------- 2 files changed, 125 insertions(+), 27 deletions(-) create mode 100644 Homebox_QR_XXL_HB001_bis_HB016.pdf diff --git a/Homebox_QR_XXL_HB001_bis_HB016.pdf b/Homebox_QR_XXL_HB001_bis_HB016.pdf new file mode 100644 index 0000000..a19b6b2 --- /dev/null +++ b/Homebox_QR_XXL_HB001_bis_HB016.pdf @@ -0,0 +1,99 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R /F3 4 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BaseFont /Courier-Bold /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font +>> +endobj +5 0 obj +<< +/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +7 0 obj +<< +/PageMode /UseNone /Pages 9 0 R /Type /Catalog +>> +endobj +8 0 obj +<< +/Author (anonymous) /CreationDate (D:20260809115254+02'00') /Creator (anonymous) /Keywords () /ModDate (D:20260809115254+02'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (untitled) /Trapped /False +>> +endobj +9 0 obj +<< +/Count 2 /Kids [ 5 0 R 6 0 R ] /Type /Pages +>> +endobj +10 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 6046 +>> +stream +Gb"/l8T,oq&VTWN'n*Fm\D@%&(#T7M0=H->I$-&`!]5FLn_\P3WQ]p/3-pu)%5dk^>/48XYIZ56.r37fIFB5:o[!R;rhlXhp9FGl+8_oWR`?M=IVPeCnZU1Z*Zr*8Rc0mZhtbkk]/22@rr#V'T:2mQ]5\qEAf:>d+8W5[[]WnjI;et1Co:iJRU?'Mr8Zc!L]6tAf!X>s@9o=5mFu>]f&MBIqr=$/4ESnV*1tV;s#ki$QfGh&+23)9_TSSMnt1^#edbF34h#TZD6FGG"_:%CHKhj3\PKTBlCVg?U*#.gAU,W_HP.8Y#@P=*mrlrh!Y'rcRog\)Q*5i)[KX-d]VoGDQ[P&"^X@KY'FjXES<=.f%+a!ekt:j>6&E2$2PW"68g\1Sq5hqt&>1$J0'HR>Gbj-C^lf(*6f.MG*s]`>..0[/ODZ7g1<8I6)tE)CEJX2QmE#AAJ-2#Pt?cSAZJX^f$_iJf2LDb::91sH8Je`@Tn&$fq&R;X5D[.+-t/aao!p1,>QVflr>sO9aaL=b:M_dI//4B'*dD5h%TQ>qCGT>S+"C+C%l20-J&<2NY3[X.IY9N77\a2>1S&7".$Dt8HfFVfFR@'YP[Mo$Z$0`:1sbZS'Xh:E*%lU">-*s#g[1j&>:KQWPo!Cu5EBLRh5FYL0R:>f=DM5"Q+'^/$pYjf5]+QZN,6-I,5d3]rXHiXuC^<2fO,s(Bf)Q<^%/MnrqEQ3s6kB07+mI7,eg!Uk$Cm/?9'$.a';.ZYVfM1s6n:[-TV0+!gc5><4EW8%cPpJg"MJ4!cFUKT/.-u7NNjSQXB;DW^Rj$!H%8@V;.bUiW,j\1?JjG5*$;_b!7:e\KPoD95Or<5+@i]8a&[!`cj@8/"^nY>su;AQbU(AYGob"KTKqP5gEs0*nTse1\`bP.uLIuWtHaJfJ>E;6Fog'QX:i57Np-g*',o+=/LRMOkV.\U,o))Nd/p`_Q<[cn*%((*bDYH"T:!(4Ck1&M$\b3T*eb2#n&61G$[r:t.lKt$@7)Ekl:eHQ07/#t9G(^k8K/QWcm[cN?]foD50!Js^bDc$s]^_50)"6`4+M[7IHBf#Lc>)b\g?ih=e9/-KPCWV]?IXjg\iu3['gU@CX$Z(Pu8WsE`k'B6f`@heZd&urc1Vr#=p@:m235Wli_n\J#p^77.cjsF:p"S=Sa4jkq6iZ\Sju7ehp30fos0d4NZ$H90CB0-p>M=Pk,63Mh=JX/f-\):2i'8.6"Fu-^]bLr"'(,WI:-P)E^_6Il4M`/GrXoV`PcP2r&PIKTK*_>Q$lB*l7cWm9Bb:*H\=2?kn@]);+l?Xci#q;OcM!tb"Kb;CZ>t?p_4fL&Qa2S\!XqBqLSQ-tE!QV6!?=G^GQr6j\3h>-')b]cX`bU\l*MQY!c;Xg1klcnYi&bMmLn0;g-n(TbRS%."%H/EQ9!/dm@H!5^ORc-NA054V_c*mC07-MZI\I83Ae#L"cGQY!D-/]6Vm!--i,/^g9D\dgl5I/=&m/=(N?=Ihq=[e4P%V:_7m#C&mW_!N]&`a2DGdD3kj0e_@gAmU!XJ!Uoe+02=S:ot1JJ[X!OMHe6CJY'W8e=5ojt?ek_"nYpnr"=Z1O<&7H#`ZMBZUj[>2Mu>E@oQIZC\jIs-[t]1(AY>;F8Ju#[0)7JIoL#UkG2J!4^n.j)M2Yi':CW>@gQYle!]@@4Zt>3++2iGTjj8bRP_]E)6UhjZ,<[m:q.R1W6\/$'m&H*kXbJ5XU&JphRa=d:4s2N;!X3+CHK%i!&$'.U)ZB<<<>"l::_g6L>H!F@mtIbID,(@:&[T/I'sS<%<(5$26<-Dn+]LnSWBsU<\l#D`d(:*o,'L>>0iWl($V)2$JU@g(JoGDoJa!eB*5Q=q,!ohX`5RNDAN67^EQHHGpAeOhj2MbJ$\Y/D8naM,W=ZF)KZGGQKP0p=63NU)h($COC:XPcWru=Sn.N9&GQqLVR"`J38G4:R-*S6rQ`?/ZN0,\;6tk^*?jY+I64g<]$4.:P'5&F2#UPZ;`dubMa_]s?liiF_Y`qjK"=[b!&nX**j$;P^&NC7e6KGT74u*bF/F.8l5u!"4,$,Z.DuYpFn@$MG5obDV08N!`eI0#$lc'GD?Ei57p6b>j.Y/CFT"$n.]@Q4A:J%6K9ck6j5erAZT`.mtSGn@Ck,sVcQViUmb\-IhBT4S`Z%TXHS[".HK+tr"TJ?+eKb[4pI8uOcHashd!PnW+!erAhlHpNbu#J%euiI,u9ihc2%Ns%$Rg'#@1l^eEV=e[2fm7!tZ2g[7b#Go9O#71[%OPJ$a/1gg[??D-AM/\R#-E]csn="O1C;5?HjB$$3&nI;f"K`S85ZfoW[)=7]-7)aV&cbt7\-2VPF.Y,e!X2:PJ_7$DMrXcd$VV,<`!6J[P^J/"&eLBPB8O7[&cg_:b:;-\^/;8jikH0$5&6-,k]&k&&OiY'0L+YH&oI3:..aBmj=K[NJ4$(eO[>_;2olS:-Z(UsUs%:"LeS\&lkg>qJ,G$gjo6iS'k?sVN8*nDR)bhWl!qb:=Ikg1*3+;LQg-&_8>A`?be4UUUH#G:tR7m(i@)>QXX9%KNG9!ebD#K%<)8$+qAM6@6='6dQJ,+<,A-OFtCi_/&b83C;(B8`<`G%HH:>EHqk>G'O9FJM=H*M_MNW98KDXKP,CV&W6;Lo$SEB"aoj]O:oPVkH6QkJR[CAirIST>M5/[K&Jp,>"FIB-gYSpqMa5,;='!5AjU`30?M06!+&ZbCXjC06C_G6*5mM$,rqkW+b4ttZNSQ"&/-7URTu?h_19nJ;AO3-]R_&obs[o.IG]_ZQ`s:2\4"PGJkLdV(4kIAdj5:6-YW+gfX8nCf[oU*o*or$Z!1P-'Y!*K`acs2HRHIZn.N3`Hf68;S(YYO`0SBZ9*@VBn.IIZ$83"_^$lZ>Bj5h=R.#`qLhpE*0+kP(n.J$f$83"5EeKd83C7tI:`pHY,1MUh98$cfn.N35oe,bIKG7U7M:eWKGkVpc!iYe#GE:bsKS0X)@u880/jY2X!-V&[&idni5*6EPB<74,q%Ep?*0Sc/i>HG'!o`=q$^VEmBW1t@]O\ds,nLC`KfFl_[!n&r^Tb"q(BWThbd>55`+El'1R\C_\:dai8t[K_&#%%es+Mai-?=c[G-=1ZBU,BTJ.ef#$%r^P\:dt!E\UgNfaDBl\@Z]bJecAEXV*91eV+.I5s\gZSs,3m@N=H,V9:Y)#YQX6rP&fY[sut>G^nbVYQTW".'WnaY9'mR2qJ_=X;>k.+V(gG\esG"fZX!&nFIb7%Uta6/&D=)IlI!dC>M,nMh=L/u9!?t98s/qeu+`OH:^\h&S',a/nZ+ZP.X`Gi&?M#^1f:Z1UQGTds<"C;?ou;,_7n+^O"W_+_Z/B_:]GBEc?bc3#,SGS\_9Jr4$&7Gel]VcFg)9'ngCTTN*d$#e(J]Ef_9L"G+2C[tA\_KbkU?Qkrd,9jh;[`/hCN/#r,_q(X;S/jK=g093k7_'ok#L-krS>a339'"CueiZNmoJsI5Qj3Qpi`Bb4r,_WBm@q_:tnRj]5j&0?QA?BTX"mO^f/TEN%Lq+PXnpVjg95IrTDjN'((g8h5j'#bNIW5i)@+DQ+A8$h!P-igY9GPE<95'[B#FcJ0m6u9>R]2IB3bf-3Tj/=fBUm0s_:']^P(aiWb+fEiAoV>>'GQH_n,k^Xk>FP[[jV:&@ZcBFB8CeC)_Mu(=#j;nZWW_0L`@`O9*s0q8D?&IBTqeq7r>M7;ak#U,pg,[\6`*hd8"CXlApL:ba(H4W\JY"nWil>VI:aBA0VTK)eACV,$WMbZB*2/d$.#st8K]38KKgKdt1/+B$K"`%Y,Ehj0`=X(V6?.[5OAHpj9MR!ri"-NY,Esnh`=\#76?.[K.MPB$8-m0HatJJ.Lj;<8Nh@b=[R:E/"GDE`q%M:'k1#Gbol/7c:A#0T,O:1B80!;=K@;UZouNu0=+bhO9q4#4*eYMg!5&jc,e;8c"VANn,nNTejtFAQU3Zt@7AP8)>qZ90UYIFQ;?-o\#iZCY,9(ZB;M'ZDJsOqu&P*lW^-qW"-008=o`1)%9GE9O)9I=i".oU-=],&6p^H)hcopAE#_Z6K#pJG",!^NXk(SMX1\_i@X`:PR92CK?^q?nHb)>47KY5C.5RBCU+YT"^*p5iaWu(@OAr1kD?82:'k!`tP;Tt'G&qRlu&G%)WLeBHU"KI9]o)u'!D2AXH&[TF+TbiCC7\koDU*NW*k['*:'euc'"&d*[3,G"Loa@RQm5%X/oC+uCX#`$~>endstream +endobj +11 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 6624 +>> +stream +Gb"/l991Ah&V]uX.r#BV.-gc`>2g^D#3_Vs$8@Vh>I$3cIB"B7@Pg).^(KOm<8BKDN7o?I\X?Tu+sS3"h7i-6^\[-ns4<<+oBg&Zq`jdK5;\GY2uV6$c/W0#5pldpkBura:r58%BIIk56+9$dVgI$uh6nm._pQ/i*rbm240Qp*i\0cfeh,o=2!]>W\m*4P?e^%oqdqhe\Y$A,8a6+jDNGe6G$DST2^q;-[ALZDen(IJCMNT]m+4M7k+s*-AQfgPbLisr5:D907Xf7LIICfX\;$u2q#uK'hG4#(5,K&:Y&S1-F^-lS3aU[NgZQXf*8>n3[S>/iH#'m/lQkM%QJf1/.Y3o]CM`0JSJOU#:CUKC4+8OApF>&Q$TWUHVQ&squ'8HbNeJqn>3U]5J>>(G1@0q0#o"/m=,Lc*tlnm@r,Am4ba@)"9\cD8'<s&l,__=;,&U5m$*=Ap^I=osD?t1%t"=mE6c#N(#6a'/a^9Re+CcQ._]CjO3_%]2K!_dn2NgSH!XN="!$9CP+h?k=KmoE\XjG8nk*cn;tl!\JWu>(Y6lcn:eCGV.YQjni/WD6/qXNN]YE'5/Q,KU-#GKpH+T"g.7q`_L1BAm(@KrSro'PUK^'[!uAi6V=SF,LE`o.+#gDLtBMD=>9A<^6#`0p@\Vmp1Eo"k)#fY\EP-_ZC:uE+)s,gJJ0"t#db_**s@cc[,QoK-<`^I0[Z>'_k',SOR4GYJ]oRu0"fq^/fIO,b=jGMUHM,]O*J,;IDguUTT;VE"Bsrkf/]2Tb2JU>#pBn:+5<+c#N%"iG**sg?Y1Ee$EJY_aui:WQ.`0r^ERLa>37ABX,N4DC#`t>##LA4cnTb8JHe-EsMH^@<'V)nWbK%9(Xu/f\;DMJnh%7e#fN4)qe'`U?CV*.SlQ,a>s-m/e$)pitJg&miclRQURnI,D$Jdaok/h:2d[ES?::Pshk?_nI6Vd!`(VkmdH\pq.+:,`OMPaB7EMO1X.JQJgqEaoT]lHTZnU+/Rh;8-=J;I0`&KL!_@"H+%X=Me@9`sKTq#"OVUSgak6R!Id1i003$TO80(Tkh8hgRI:Ac)!Ys++J*UoB1%Af6-t/S&ZV>a)AZrE>ZXb'Dr/*Z3$cH$QC/s@%^+j.KK/a-fElP:L7EoVpq3%,#G:Guio$<7'B7sAI6no9X2flQphZQ6#H(Q8io%q!'&qhj6p_kuJM85WY/cn@#?S!&Lr4(19o+Etl^A@i.iRTYmM"SFgg3Ik&V(Z1iXcN*B0[Gm0N"uN$+(,f_S[\f!=3,CQ3H3#KK-nJPH.%jLiAF/#+eFpp>Xhl5_rMH+J9A"FZ+eO"d`'T7ZoC_>.4n''':j=Q@S0F!*(G@(Pm_GkX?qM:4@pJ?P<"Y$CH*n6d#64kFTH#`F^ai?hV'OThE(Jd:2BI0N"R#kPo;^#83$+-dG>bD6,?44U.mG\]O^/EB8HqA)$1OMR9P9k&/H*&?36nND$&r4>28`K78.nL_`=Ek%,KP\,]S&kc]^?2g)h:$r'cH1EB#M<-k9<`8SlCPJlG&\ItOnMdGiPT.q>r>FlZI'gAD]DSTn$mG*]ue%st+iLZBN^P:':f63dAFZHPM[JMkAM9guq,?Reks6TiD]Ps_?ck;jX.kh]p]En?aOVb/XBHf*W).k'GSA%2iH,6\F"n[bBGTk.U'j;>86]hBp4i?q"?&Y@`"mAP;n76Q2ic)Uuf-52W@hKn;bS,B9&t]bp?A[!I3Ap=EXrtPj.aCJ&-nN2MSW!.PHpa8$H!rT(I(S5G,(s&GPT3#_AY(j^`PIlZSO1XF[*&3&5g.r:-):MZ_[ep(8H`4!Ta<+^8bI%Kin[Eo#d'!L+i"?hL_g>(I'[QQL`eDaB[s=!_M2`Sa>E'gJ@c_OGa#A8B'450>DWkUgcGe"7t@qU`prs[u=?S.U4cH67SN)8k=Xd.niKf0>gISL"#c&WUOH4$)qmX64'W1]g<%)E+O%rWGoR<$)qlT9F7]f7B_AD\=B"L$^,k/\6Y)U#?L%@=q$jS=)Tga2mM5_mR"T_ie/iaZb[c?P@$3?YKkn:HqqJ4J)/rPB2mu3oFGJSq\LQt!]^j="9h'^3.OGbL+_)M!K0#<9+OUs]Lg_16&da8J=nNe#+f<.cbIjo`J3jZ'5U!RZm`,3>Xkdp_^-:BJr\Z+B]!hJuXN.A"G=OX[[tI(9hebn5a92g'n>uTU((FV/Fp\pMnJDr#i:GP<+:!U%GqH(1a.3Nfn':u-#VOdV'Z0YU>mh"%+GZWW'BJ)WrP_#3'mr;4$558>b(TS6,qpKWY;:\8K$6U`9IO=L!-1V<67h+A0YnP35:eM)gf:eu"In*H/Lf`\6[p]/!=INa]S&%Y#Zq-c00p-q"Bni4.UXnD#sl2)]Th$b*$in:l=HOeJ4'?8i!Y-/k_(VEACZUT(N:!7.,).,aMS-3'FM2Y$@+5p(CslW:rn^2Tk!j]R_JtjN\])S^kA0:+NSmE^]];s*cbYLOWQ6GdJ,oV^]_JGgFgU%YI#Z2+m94u]BmJ-0=82-p3`PsMQ(jo6Hr.7KH.gIe[u$=]l5DP\tlagCck>*/rU1FP_]E0*$-D&it<%3%3>gagOjmclk#C'08j/LQHM#-F@?ik_.3F?E;`QJ=b&dee"qc9lBCKWe^Y>m@g"BI[>QQSi5:>mK1KW4OEp1GKX"D]iJ]?AS2=Y)5lfN%\i\;Pf;F(X-04+)?gfJ@d)b'#(_$Xn]A&W(f$=#ol(IIQ$&phC,`D[aa/\6RQ+)8`MNRd'[/o*G_(JCR=.E"VG4VJI!uRb6pi"Fs=kL/:$Bk9-OMR*s=$Dm5D.Kl!Y;httlY6p's8XB_Zr`XCMMpXY5_.#7YXr:;+^tpTSKYmJ?QZ2d"l?EWO_HigG`SLZu$@>(/#UQJpBN9U!WmCpJMILp=$;,;]*b[G;^0RDIgPTWV*=bb\qFJ3j:o7[!01RVWbsQ%kC:H\X=t,P8m$D85XL]G6D0#Q!.gHds77'4bSYr:\+%B2dDCR0rZ=NISoJ/0i3d<[K:o.]>4i=[J%4[^hTfd0RXMfe_6X8ZNe8J2/$r.P,[`s3Jl][?!7HLOqNCH9W0*>KND"pcYHOr"?srdaTN@bksegX4UjD*Xp6P4XVV"a!QI0OQQTD76VFZR,1*WNaS4(kNI[>q7pM"d:i[k5Ac#Cp.m@8s?p_)fjT-#QoE)frR=#-8G_uQ'"nj-tQ=.+?GufWl3q6[\MOFi;B]74u[HutUBF0c8Jp&FR_W_A+umQ9CY^(?6GY:JV/0pQ&"!nZK6SiGOa*.K:]:%'W\Bd2!LQ\_a++)/'9D\Klik3D8-)E"A)uBE!ttfE&UFd<6#a"!EIeERj?R*+J_!o*AAo@2!\Hen_:Tu`]:iLB.)^3eCmgX_$W)ZD"t7F@cJ>uPOU",K.MQ>tgO1-oV4"pgj]<'%i=,GeKa:,tKL5HGm=[ecrKU1bf-3&F&ADs66U_"3h[*KX!SOtj+r@TpmddL#hNQ[."lC&'+3\[%_W\n_?^-(jT)b%:8'ucgDkE&Ej.O>dfcae^H+62B)kMDE5nE+OWu)gSY#?4(M80rH`rW,i/F\g_&'==Z>AE`R0ZF*XjiId[BC/B7"e$d[Ql>T!'u*GH+`H\g\mAW'?;(=KmroWf%_-bQH))"E(5,c_@?W!+@:<)Rt#Be878SOgNVaO="E#Y$Rf>]Y1a]M?3T^_TW,*Ma7g26$321cH@]&$"Cb0s;CmC#s,T5#>4qnRMdc@I5BobcJBnmQ`=`_%p*NGJ[p2^pJB+Uq'K-KcrZt/Zim<$=#m_$+&gcHTH=#q)h8T/(.]EQbr9^)S"GA(a8e;A`msn$W%pdr_gTd"-g4!B=2,FVA)lNmL\$Z+`H`.)-n]&e"QW/R4'&4,fP=jaoBM9n,DcN<,!b]SG.Y5pH8Lc)UM',sVVp?PtMn&tk\!5SCR/.R?cA&1h/k.(R!bho>Fp3*;Ef_JQ)[oJue5@6?kWm.M[GfM/e@HlCK[>!e+Wg*.1,GligH;T'QWI]`e$.a^,6BYBRcgQk"m'o(DZ%hm7e?i~>endstream +endobj +xref +0 12 +0000000000 65535 f +0000000061 00000 n +0000000112 00000 n +0000000219 00000 n +0000000328 00000 n +0000000438 00000 n +0000000642 00000 n +0000000846 00000 n +0000000914 00000 n +0000001175 00000 n +0000001240 00000 n +0000007378 00000 n +trailer +<< +/ID +[<63855c7bc76a79cee3aa8636e1b19d6f><63855c7bc76a79cee3aa8636e1b19d6f>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 8 0 R +/Root 7 0 R +/Size 12 +>> +startxref +14094 +%%EOF diff --git a/generate_qr.py b/generate_qr.py index 6a36228..60f217b 100644 --- a/generate_qr.py +++ b/generate_qr.py @@ -5,14 +5,19 @@ from reportlab.pdfgen import canvas from reportlab.graphics.barcode import qr from reportlab.graphics.shapes import Drawing -def generate_xxl_qr_pdf(start_num, count): +def generate_xxl_qr_pdf(domain, start_num, count): + # URL-Formatierung sicherstellen + domain = domain.strip().rstrip('/') + if not domain.startswith("http"): + domain = f"https://{domain}" + end_num = start_num + count - 1 filename = f"Homebox_QR_XXL_HB{start_num:03d}_bis_HB{end_num:03d}.pdf" c = canvas.Canvas(filename, pagesize=A4) page_width, page_height = A4 - # Layout: 2 Spalten x 4 Zeilen = 8 Labels pro A4-Seite + # 2 Spalten x 4 Zeilen = 8 Labels pro A4-Seite cols, rows = 2, 4 col_width = page_width / cols row_height = page_height / rows @@ -31,15 +36,17 @@ def generate_xxl_qr_pdf(start_num, count): y_center = row * row_height + (row_height / 2) code_str = f"HB-{current_num:03d}" + # Der Direkt-Such-Link fĂźr die Homebox-Weboberfläche + qr_url = f"{domain}/items?q={code_str}" # Gestrichelte Schnittlinie c.setDash(2, 2) c.setStrokeColorRGB(0.6, 0.6, 0.6) c.rect(col * col_width + 3*mm, row * row_height + 3*mm, col_width - 6*mm, row_height - 6*mm) - # QR-Code (50mm x 50mm XXL) + # QR-Code (50mm x 50mm) qr_size = 50 * mm - qr_widget = qr.QrCodeWidget(code_str) + qr_widget = qr.QrCodeWidget(qr_url) bounds = qr_widget.getBounds() w = bounds[2] - bounds[0] h = bounds[3] - bounds[1] @@ -51,7 +58,7 @@ def generate_xxl_qr_pdf(start_num, count): render_y = y_center - (qr_size / 2) + 2*mm d.drawOn(c, render_x, render_y) - # Große Beschriftung darunter (Courier-Bold 16pt) + # Leserlicher Text darunter c.setFont("Courier-Bold", 16) c.setFillColorRGB(0, 0, 0) c.drawCentredString(x_center, render_y - 7*mm, code_str) @@ -59,28 +66,20 @@ def generate_xxl_qr_pdf(start_num, count): current_num += 1 c.save() - print(f"\n✅ PDF wurde erfolgreich erstellt: {filename}") + print(f"\n✅ PDF mit Homebox-Links wurde erstellt: {filename}") if __name__ == "__main__": - # Fall 1: Parameter wurden direkt im Befehl Ăźbergeben (z.B. python generate_qr.py 17 16) - if len(sys.argv) >= 3: - try: - start = int(sys.argv[1]) - anzahl = int(sys.argv[2]) - except ValueError: - print("❌ Fehler: Bitte gĂźltige Zahlen angeben.") - sys.exit(1) - # Fall 2: Keine Parameter -> Interaktive Eingabe auffordern - else: - print("--- Homebox XXL Label Generierung ---") - try: - start_input = input("Startnummer eingeben (z. B. 17): ").strip() - start = int(start_input) if start_input else 1 - - anzahl_input = input("Anzahl Etiketten eingeben (z. B. 16): ").strip() - anzahl = int(anzahl_input) if anzahl_input else 16 - except ValueError: - print("❌ Fehler: Bitte gĂźltige Zahlen eingeben.") - sys.exit(1) + print("--- Homebox XXL Label Generierung (mit URL) ---") + domain_input = "homebox.prinz-pilaw.de".strip() + + try: + start_input = input("Startnummer (Standard 1): ").strip() + start = int(start_input) if start_input else 1 + + anzahl_input = input("Anzahl Etiketten (Standard 16): ").strip() + anzahl = int(anzahl_input) if anzahl_input else 16 + except ValueError: + print("❌ Fehler: Bitte gĂźltige Zahlen eingeben.") + sys.exit(1) - generate_xxl_qr_pdf(start, anzahl) + generate_xxl_qr_pdf(domain_input, start, anzahl) \ No newline at end of file