From 4431f4836ec8d9cfc43107ddd86b8734310e7af8 Mon Sep 17 00:00:00 2001 From: dan Date: Thu, 10 Jun 2021 00:48:01 -0400 Subject: [PATCH] Added logic to generate barcodes and generate a PDF with them all. Included free barcode fonts. Also added gitignore file. --- .gitignore | 2 + main.py | 40 +++++++- requirements.txt | 1 + .../barcodeFont/LibreBarcode128-Regular.ttf | Bin 0 -> 22144 bytes static/barcodeFont/LibreBarcode39-Regular.ttf | Bin 0 -> 14776 bytes .../LibreBarcode39Extended-Regular.pkl | Bin 0 -> 131689 bytes .../LibreBarcode39Extended-Regular.ttf | Bin 0 -> 17292 bytes static/barcodeFont/OFL.txt | 93 ++++++++++++++++++ test.py | 48 +++++++-- 9 files changed, 177 insertions(+), 7 deletions(-) create mode 100644 .gitignore create mode 100644 static/barcodeFont/LibreBarcode128-Regular.ttf create mode 100644 static/barcodeFont/LibreBarcode39-Regular.ttf create mode 100644 static/barcodeFont/LibreBarcode39Extended-Regular.pkl create mode 100644 static/barcodeFont/LibreBarcode39Extended-Regular.ttf create mode 100644 static/barcodeFont/OFL.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9883a88 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/static/barcodeFont/*.pkl +/static/barcodes.pdf diff --git a/main.py b/main.py index 555a4d0..dbd9e38 100644 --- a/main.py +++ b/main.py @@ -4,6 +4,7 @@ from sqlalchemy import create_engine, Column, Integer, String, TEXT from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from fastapi.staticfiles import StaticFiles +from fpdf import FPDF # Declare Base and setup tables Base = declarative_base() @@ -98,6 +99,43 @@ async def checkin(BookCase: str = Form(...), Shelf: str = Form(...)): return {"Location Added": location} +@app.post('/barcodes') +async def barcodes(userid: int = Form(...)): + + temp = [] + + barcode = {'CheckIn': 'Check In', 'CheckOut': 'Check Out'} + pdf = FPDF() + # pdf.add_font('barcode', '', '.\\static\\barcodeFont\\LibreBarcode128-Regular.ttf', uni=True) + pdf.add_font('barcode', '', '.\\static\\barcodeFont\\LibreBarcode39-Regular.ttf', uni=True) + + pdf.add_page() + + result = session.query(Location).filter(Location.userid == userid) + + for each in result: + code = (each.Bookcase + each.Shelf).replace(' ','') + display = each.Bookcase + ' - ' + each.Shelf + barcode['Loc.' + code] = display + temp.append(code) + + for each in barcode: + pdf.set_font('barcode', '', 25) + pdf.cell(0, 5, '*'+each+'$M*') + w = pdf.get_string_width('*'+each+'$M*') + pdf.ln() + pdf.set_font('Arial', '', 5) + pdf.cell(w, 5, barcode[each], align='C') + pdf.ln() + pdf.ln() + + try: + pdf.output(name='.\\static\\barcodes.pdf') + return {'Barcodes': 'Ready'} + except: + return {'Barcodes': 'Failed'} + + async def getMeta(isbn): info = meta(isbn, service='wiki') - return info + return info \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 33e3299..df41ab2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ asgiref==3.3.4 click==8.0.1 colorama==0.4.4 fastapi==0.65.1 +fpdf==1.7.2 greenlet==1.1.0 gunicorn==20.1.0 h11==0.12.0 diff --git a/static/barcodeFont/LibreBarcode128-Regular.ttf b/static/barcodeFont/LibreBarcode128-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cee5b6502373da1e0418903e8b971abd44f1b4b8 GIT binary patch literal 22144 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 S=>7TX`bO>V{}CwG2Y&$gSQfhg literal 0 HcmV?d00001 diff --git a/static/barcodeFont/LibreBarcode39Extended-Regular.ttf b/static/barcodeFont/LibreBarcode39Extended-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..32ad6de19624bc8c3cab4de5a93c4ee71c09562c GIT binary patch literal 17292 zcmdU0du*H6b-#yiN#sY;diX)d`Dj{>Eq#r_t(#CC~%w4jzTeB@)<}PcqwdY*D ze(S%?&de{I>U$ky?=%>5ZkV0R&Hme=zxx_v?c-?w4Q64H>$C8hC55whvWBkPP;0d? z>se+2u-wHg7P!xb9302X9d;XQ%Y&|e?)2P5#*^($apfAjjR^_>qkMXZl8 zJNjVg^O*2ig}JR}$*#D|VYApU7e}=UkJD|hvQ}0A_~Dq(=XSeXHX5q-Rd4XSy>74O zaaFmhDl2SG8=?wOuXAH#i@(+MI=v15@Z+@Q*oVu-?_Y5&GLZ6!<+Ml&=B79&B>&3u zf;lOZ8d1McEaj0GtWw#;A`?>%>xfb!5>pnvi_uV#$|4pDr95I0HKK6JA}=DEvWP|O zyO@`<>6bF85mgA^Ws(Lyc50 zWzoBZ#FRx|#9mhx_au}S(K2O`7j-&*;#d-0UGlyW*rnC?jpsh;T_fJAu6Nf+%UPu5 z6G!rYdIu|OR3@>MO}Aj0P2LtexpDvuh8 z-lfcxL0)J%i!zl(EaG0eEY^|eTS`nhE+Mh1%c4dqmhw1{D3}s^ z-3@$}fsYif;M0Je>=tC5%nCnZY#qI=gx+34?nme9LO=qpO-D@*9BO6c7s^qvxW zt%TlJLhmo3-%vtdT|!?|LSI`#UspoEv4nn83H|00`Yk2&ffD+yCjE{QeI@ngzLI)# zUrD{WucY4GSG!B#O1&9Z>dm-PZ^o7SQn==RmiFd;mU?qPOZ}>Trl)om2Wu=^pVH3U z$5OwlkJa_T!u3k7FUV>ikk_s1XJyw^uv2oVNDddt_)JsoBg$Scl5Z`NcNNL_v~$h% z+lu7v1$j-}rTWiY57{^7dPu#w9#X%m9tv0L&HIbguUc;^57t85O12fr_=I-Nyd6cd zvq*Lo$rVL%WszJ}B)f}bPm!z@$=)IvpLMT^7oWGUkv9~{_`H72cukRv&+pfa*A>Yd zi{wp3^5!CWOOYHXlD8J*HT5*FCt1%`>uHU>x5U0@J};!7RqJbwAM-xEv&23o_2zv{ z>dpI@)SLG)sW2Qg2>2Qg2>2Qg2>2Qg2>2Qg6<`)SL4!_2&Fby*d9hH=oy1Z$7W3-h5t5z4^SBdh>ZL^{e&|)hAM4s!z=4wX`>%*HT||LRpKvTwy`9;jJi{r8zmZT5U*MG7wiLw z!{hMxmKw`x%X5~WSPko(^_um%t=qO_`v-fS{T}-j`#X*%$AaT!Cv)~VpLG7fwb6CP z^>x?3R_v)*toW-+sO+u0T=|bxo2%}tdcNx4-7W6@?!)er?yP&tebIf%{j~d8_Y3Y9 z-LJaeaKGh#+x=7bhn@;gttaRSd-i&go&nDp&xB{u^Qh;t=NWuG@5y_<=lQKy~SJa4SS>B{obVasQ0Azj5p_<@-BKmpPft_D?tbZ!7vPWB8Mz zEBMPK#vE7|@dxkGZ=n?bBP`|rqqp@Hybt;{yeUVY1b4MvA+K~@f&V!AQ5YY0?f=&J zN5$~#8Y|3=75;FCv81lg%Brw!)+=H)6h?`1X0!YNo}yoAS(d~K=#v!g#r~&X`mOvu zf^Jp>WO@e^gRF}&-7PUJDfA=vJO)qUT{sR2JX%q7WetAPo>#+cYzV0jU(%zSdDz43 zIrf_Fmfx1p&cigJsX~o~HQjiRg_-BZf8cfG7U$$l^ryHp6z8r`94mmAWWwAb(v6wW zNAu3%xK4vK-GB_AKG7~Y!tD(~98Bm-`VwO0o9*?Op@CGUKad?vr$XsqTIXFSQaBc% zyr@vZ+-dNNMB_5Hk;u9W#ZWwi?GlP-xn+2a!w3R!XG54*7&=9(;k0aQ7)>zVu1uOt zGTkEDN@KY~V~J$EA-K{wRmR#za!W7Jh#@3!>KQ$`6v|RjMY36d3c~dO23d#_OB>2| zO9)Si%lQtx3NK!n+Ukom>ijW&Ni0zy6ihc@6MK!k#ggQs+3qm+88`)9=ibDf zG&5wdLfl8vAWA+_FF!i+iKOV5gAojz`x6;`DWh{grY+1j7=1&jylu2Qy@Pvlp$lPN zZS)PK`c6n?Ac*>Ep|3IWY(wH?D!*X^mM|OV{zh7I*jn+tmp**>!J!UoVXf~^OoGL5EjCcPMcFKX8ot3(O&j8%s)$qCL5ECYb(hgt)_ zq*;VYe*9T+JRYYE)ZiFo^EIwU{$yidJGOTn&at*J z%r_c&Ai4?jO?0!7w-ViA5$&U;S8;oFgI2W)~yUaAP2*%26wIu&dEXDVBFhSa-KM;7v)rGo~!2<#QEtM*LIvA z(Gbp$=nkA8(R!R8(VaLyqPOAvi0;Dq5#5dRBiexTBidx>onj&FG4u@Il+kh1gADaV z7AbF{o^3Yxo<_b0*JBGVguZR`y5j*m0N#vVcQy;vevSFbney|g7@Y7Z|h^@e(J3rgX^hr2GGNF4yR zHJIVsaqp_*8_~>$+iATp%ez^eS0x&AOHCnN?_5Hk`_`K2P0}BCgyIEjoo8rI=^98~ zwdr;}aMiZcz9k)}owgD;ZN$e2LOmJoz-q5uuDG(GQJzY+L}oO^?Rco-W@k%e1ITC6 zxIYwMlf}?*{}1(KI|3m@=)rj+5h&JQ+Vs&}TF^370#>-ON9(ZN9fn$h^0(ZaQ>{S{x4F!=3_s|^Yl6#%;pzOQi!+mCu| z30Hcl*s!2Yyct7GiYZeY@06L(;uo~IoI1602v=GYt~@!R9wT3gXAO0~==@)-rF++F zuwSN&Dc`h@b%r_u!BzbdOshD1aRa`+v5=KRDD7(uQq3qYYBnn=IE*Q%mCGK#o!|26NoGQovau@h%*AK(Yssouj0a8IPkh zk7q5iWV0YyvRM>1G(a}z@Z$X|Ue60jTya6Nbj3x2F&!Fvr z6@Q-hh zNPkaAmJF68O9oFG%T?l=Eq4T#Z5C@1Z<_EdOUE0zE61%n`Y#j?^f1F4z`q^Duaod4 zJnQ5w-)x>aKuY|#b36*f=yV3+KTwgtV{4O(G6;Meg`~0fcF89 zr$`>{&hH}mnu|#V>rMyqw~^{)*CPyUU5}3p2}>NHzpFk6Xbsok#wBjMj3;yVRr{!e zb$8P@0rTHB{8z%$tOB2o;S2A|#V665JYH16<}ehn;qwvpI=&?jc+dX2;w^ap{9lT< zvO%E#P)GJQ7Kc-cx3eDjs^T526aHE89@uW#qIiwPteq^uX4ovdh^Q0nEE{JFcyAwJ z&8&sB<9#`C^w#mdew^iy9znZdv?e~zvdE2~hfyK-qcp?rM}9>3Imi}~j-zgl&7=J; z;eP?~=GpCR55CT#H?mknpH0Hkl+ezh=ULQG2pysAVUsJ!!)tJNe`HLpY%d}w*#*SO zv1t+MC>uonETT>dPc4YujISu$$9i!rf$x2*ysn)mc`Wu9F7o(MSz13Ly~x8UjF7T6 zf!UkJ8LW;`$GI%9F^rw^J0tQmjT~k8oUrV`8MU(2nfb-%Koy@5b?Xr^kpC0NjUm!` zkvHlAX+gCa5&50R&r#Gbs$9<@PZcKH6YMZ%RcFVswp0t9-SkWuyXnEevGp=QS&+TB z9&RC;EM_5#{;0ac_(|C3QKmR_)DiAMHX!%~>_i>)l+l}gIghc>ikL<1JYrHECXrGn zpT%B0jvkKul2=*e)^OuRTv_Y=;jJwGXIU%Qzzz;@f(t635~{!r9?-xGKKviA8=x9$ zpcd+2BW!}rumu9J6>foTa4YB#gzXT59Z(ND;WpR>yP*LZ!GJI{!5(Oa7KlJAv_TYN z&<-827jB1r&(?1&<_JJ2q$0&PQod; z3sR7V({MN3183k~xDPUrg<%+hQOLm7#@K~;dAhLcnmJV7vPKd?Boepf+yiO;4*v(eiNR8r{TBYx8ck1 z75E+aUHB?I1HT8q4}Sp9!q?yr;W_vtxB_2?KZfVwPv9HyO?UzR6#fjp1>c50hwlJ~ zyd^PcJ9hHO5y!~PXs+p?BymX+l5|Uwl%z+JUP%r~a#)f(CFzqy`8+D6W0D+~q+gN& zNd_f3A<2*=CnY&0$z779BuPthx=KVnIx{($ovRdlZsP3tLWN+*CeGy)H?ydQrzWNs z=cRIbVmjv%hBMPSw_s*-b0fLw1?d%qiJ4JpJ3F~JFa6Kw&gG`%W%Cmklx{LRKd#u> z>_|=%&gK`ga|`neGqZAJVSFy9@D|R`NVgB>=4PCW(-Y0j%`J*X6m3+oEt=6mCnm z!cq7w3O}OoBMLvF@FNO8qVOXMKces>3O}OoBMLvF@FNO8qVOXMKces>3cpq1w<`Qr zh2N_1TNQq*!f#dhtqQ+Y;kPRMR)ycH@LLsrtHN(p_^k@RP2smG{5FN(rtsSoew)H? zQ}}HPzfIw{Df~8t-=^@}6n>k+Z&Ubf3O}mwqY6K&@S_Sps_>%%eAhDKl{JGp>5vZuFAQ5RAN Kp6lp^9sM6(?OAUC literal 0 HcmV?d00001 diff --git a/static/barcodeFont/OFL.txt b/static/barcodeFont/OFL.txt new file mode 100644 index 0000000..f755237 --- /dev/null +++ b/static/barcodeFont/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2017-2019 The Libre Barcode Project Authors (https://github.com/graphicore/librebarcode) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/test.py b/test.py index ed3e46d..3960334 100644 --- a/test.py +++ b/test.py @@ -1,10 +1,46 @@ -from isbnlib import meta +# from isbnlib import meta +# isbn = '9780747532743' +# infowiki = meta(isbn, service='wiki') +# infoopenl = meta(isbn, service='openl') +# print(infowiki) +# print(infoopenl) -isbn = '9780747532743' -infowiki = meta(isbn, service='wiki') -infoopenl = meta(isbn, service='openl') +from fpdf import FPDF +code = 'Location:1' +test = {'CheckIn': 'Check In', 'CheckOut': 'Check Out', 'test': 'testing'} -print(infowiki) -print(infoopenl) \ No newline at end of file +pdf = FPDF() +pdf.add_font('barcode', '', '.\\static\\barcodeFont\\LibreBarcode128-Regular.ttf', uni=True) +pdf.add_page() + +for each in test: + pdf.set_font('barcode', '', 25) + pdf.cell(0, 5, each) + w = pdf.get_string_width(each) + pdf.ln() + pdf.set_font('Arial', '', 5) + pdf.cell(w, 5, test[each], align='C') + pdf.ln() + pdf.ln() +# +# pdf.set_font('barcode', size = 24) +# pdf.cell(0,10,txt="CheckIn", ln=2, align='C') +# +# pdf.set_font('Arial', size = 3) +# pdf.cell(0,1,txt="Check In", ln=1, align='C') +# +# pdf.set_font('barcode', size = 24) +# pdf.cell(0,10,txt="CheckOut", ln=2, align='C') +# +# pdf.set_font('Arial', size = 3) +# pdf.cell(0,1,txt="Check Out", ln=1, align='C') +# +# pdf.set_font('barcode', size = 24) +# pdf.cell(0,10,txt="Location:1", ln=2, align='C') +# +# pdf.set_font('Arial', size = 3) +# pdf.cell(0,1,txt="Location: 1", ln=1, align='C') + +pdf.output(name='.\\static\\barcodes.pdf') \ No newline at end of file