From 94d8c43b1bf27438d9332380ee487144f9a63dcd Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Tue, 29 Jun 2021 22:01:10 -0500 Subject: [PATCH] Add save PDF in memory --- doc/build/.doctrees/environment.pickle | Bin 65044 -> 66511 bytes doc/build/.doctrees/main/application.doctree | Bin 11600 -> 13273 bytes doc/build/.doctrees/main/paths.doctree | Bin 38496 -> 41594 bytes doc/build/_sources/main/application.rst.txt | 28 ++++++++++ doc/build/_sources/main/paths.rst.txt | 41 +++++++++++++++ doc/build/main/application.html | 24 +++++++++ doc/build/main/easymacro.html | 4 ++ doc/build/main/paths.html | 38 ++++++++++++++ doc/build/searchindex.js | 2 +- doc/source/main/application.rst | 28 ++++++++++ doc/source/main/paths.rst | 41 +++++++++++++++ source/easymacro.py | 52 ++++++++++++++++--- 12 files changed, 249 insertions(+), 9 deletions(-) diff --git a/doc/build/.doctrees/environment.pickle b/doc/build/.doctrees/environment.pickle index f0ffb0ed332cc0c7004e192a3d67ab5b11a6e3f5..1fd38c9a073fb1ae10999904b0cd8f8b00e30abf 100644 GIT binary patch literal 66511 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 OXDHG-L1JcU&;JL5WpQ%= literal 65044 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 diff --git a/doc/build/.doctrees/main/application.doctree b/doc/build/.doctrees/main/application.doctree index 19e8a01fab2b04f7a727e193554c070edc621c6c..6ca9a937ade13ff621af0a111c33724983533dd3 100644 GIT binary patch delta 1259 zcma)6OH30{6s0rmI0b={pdiv=N~wGbt-nZ!!Jzns(4eRbBf)=6-=$fMmDJ48{lUgFRPC$d`?#M+E za(GaVDhA26kOC=*TQj?iW@9l;_6hNKY9GN?UJLI;r#MNo6;x1=D~lRUmNEG$*5AYq zlN0M9hf;)%eR{9lC@axuKUG#qy zj#V>-|3WGL8w_-pYy+S7i1=t-Agnq(7xS455jCO@jc#%&Z)2aS_`RHV%Fdfkar6gV z++Hz3*?wdiwZ@FX&L55PZZ@i~pZb(xNy?7@noX%A0_7~F(qcUd6c!zHJVp)BBo*!u z484w;ow1R$BGU@)NgncxnuJ$YCE}eg zxk}Gy*Jy|lzxEUXq}Df9ySd`BZ6^7mf^fEP$>Pc+&xLtdsc{QScxDk+Yg(FL(|ypA z81`T>fT0D$2@LZX<}f5N%+e4Wa}FvI)fkPc!}z(;mY~ZY^dU~j#0Z(^L+06#dG3CU lcyMwNru?UZCRqX*O)}g;iwrNuB11n-GVK|kT=So^{Q?@4h$H|2 delta 278 zcmcbaej$prfpw~@?nc(Ba+Blac_u$p(Vu)s&UOQ88Op~S6N+wT|*P6UjEsJv( z69YqrbQVxlM|~|w^0s;c({-lFflAu^Syy3_3=E}7sgo6XBqvYM;9;Et)UaUkMo>>%Iq!K8={l`!#z~uBX=N}m+HMZk z-OS9ihiNj0p)8v?Gf^{$VzR&Y~&biP1_?-Ij zfim_R$Am|d#;*g`vw?^c#KXOTNQyIcq`0CHS~sDBgs1P|5g`h^(8tDuq7%f}ZU_Ql zAaW4@4?*A!L}8aGM0>#HfXM0gFmYCa&KfM;DQVlWc*B~-&PiDmwNxT?Ep;_z=ZycL zv_yz2;XO3^87$qIyQoB5VGb!+&%@>7oflDg!ij`Xp28;4VLE z#=w9t5QMahu*RX*n5TMFwz@%Ugim5goMRB@s7C$A^GrDue!Nbj$!;5(*w0XXGtIH6UBY)F(Dr9f}jCZ)^b7!)`r-4ZBXzFHL-4gB^_Z!&W#(uel`-RA&)WAkX;UQ z(8TJ6p19wxZgr@|Wg^|QR&A|M3FJ8G%8vR^Y%}GOF576tx*ewr2q*0#t-!cpiCZmq znN>@~zm(8dakYH1cc591t*a1sBWWAtE2#YW*0>KAx-WAjfSJ|ZEU)86j=1Ul9 zFcdRrzN5}$C7HL7O5~}qnUSV~Rl3BS`Z6z_3*;J;x4)7m^E0-5D7cl{^-)0k@T?D$ z`7Q<2(*XbUkrCEr#nOa9Z4&*5j2aN>EOzT>QKp>5wBJ&Oo2-_2@|QLXr9*g_P#(O|wJNA}8*b&Dbm$z}tU)FbyOzOkF%3ht69TT7#2 z8XYR7?lI`)&}fO`X_7s9sr(ZLof&R5IMUCCFHzKICT+bnn{ArHLi{@h<=^A>v|Fh)MF{1k)sp$CA3yQEN;6qb}il5wt_Y{EId cqhA%0d>ft_vOIw)%imY!`KL^p89Qb84Z8W~5&!@I delta 338 zcmex$gz3Q=Ce{YlsiD(0vc74V{BeTDWXaa>$psUgIa0V77&4@@k|rm%n@)b!#y^=; zj(aoLBz8uo0CQOrIn$IoC`3o_YTb_JP>DLBvWBu?$3P0}-2nL}?Fa zUSe))No7H5@s!#r8d=A +
+

Save

+
+
+

To PDF

+
    +
  • Save in path

  • +
+
doc = app.active
+path = '/home/mau/test.pdf'
+doc.to_pdf(path)
+
+
+
    +
  • Save in memory

  • +
+
doc = app.active
+pdf = doc.to_pdf()
+
+
+
+
+

Export

+

Call dispatch

You can call any dispatch command used only if property or method no exists in original object or in easymacro.py

diff --git a/doc/build/main/easymacro.html b/doc/build/main/easymacro.html index 530556f..967bab9 100644 --- a/doc/build/main/easymacro.html +++ b/doc/build/main/easymacro.html @@ -110,6 +110,7 @@
  • Open any type file
  • Save and read json
  • Save and read csv
  • +
  • Zip, unzip
  • Copy files
  • @@ -125,6 +126,9 @@
  • Get by name
  • New
  • Open
  • +
  • Save
  • +
  • To PDF
  • +
  • Export
  • Call dispatch
  • diff --git a/doc/build/main/paths.html b/doc/build/main/paths.html index bfb279f..7f0b6e9 100644 --- a/doc/build/main/paths.html +++ b/doc/build/main/paths.html @@ -484,6 +484,44 @@
    +
    +

    Zip, unzip

    +

    For default, save in the same directory with the same name + .zip

    +
      +
    • Zip file

    • +
    +
    source = '/home/mau/logo.svg'
    +path_zip = app.paths.zip(source)
    +app.debug(path_zip)
    +
    +
    +
      +
    • Zip directory

    • +
    +
    source = '/home/mau/test'
    +path_zip = app.paths.zip(source)
    +app.debug(path_zip)
    +
    +
    +
      +
    • Set target

    • +
    +
    source = '/home/mau/logo.svg'
    +target = '/home/mau/myfile.zip'
    +path_zip = app.paths.zip(source, target)
    +app.debug(path_zip)
    +
    +
    +
      +
    • Read content of zip

    • +
    +
    path_zip = '/home/mau/test.zip'
    +names = app.paths.zip_content(path_zip)
    +for n in names:
    +    app.debug(n)
    +
    +
    +

    Copy files

    Copy with the same name

    diff --git a/doc/build/searchindex.js b/doc/build/searchindex.js index 93ecc61..0564764 100644 --- a/doc/build/searchindex.js +++ b/doc/build/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["index","main/application","main/base","main/calc","main/config","main/easymacro","main/email","main/examples","main/examples_app","main/examples_base","main/examples_calc","main/examples_draw","main/examples_writer","main/intro","main/paths","main/tools","main/tools_for_debug","main/writer"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["index.rst","main/application.rst","main/base.rst","main/calc.rst","main/config.rst","main/easymacro.rst","main/email.rst","main/examples.rst","main/examples_app.rst","main/examples_base.rst","main/examples_calc.rst","main/examples_draw.rst","main/examples_writer.rst","main/intro.rst","main/paths.rst","main/tools.rst","main/tools_for_debug.rst","main/writer.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[4,8,12,13,14,16],"02":13,"04":13,"06":[14,15],"07":13,"080315":15,"082211":15,"09":15,"0k":15,"1":[4,9,13,14,15,16],"100":10,"11":[13,15],"12":15,"126446":15,"128487":15,"13":15,"14":15,"15":15,"16":15,"17":15,"18":15,"19":15,"2":[4,9,14,15,16],"20":[13,15],"200":10,"2001":9,"2002":9,"2003":9,"2004":9,"2005":9,"2021":[13,14,15],"21":[14,15],"22":15,"23":[13,15],"24":14,"26":15,"27":15,"29":14,"3":[4,9,13,14],"300":10,"34":15,"35":15,"3m":15,"4":[9,14,15],"40":13,"400":10,"41":13,"42":15,"43":15,"46":15,"47":[14,15],"48":15,"5":[9,15],"50":13,"500":[10,16],"53":[13,15],"6":15,"7":13,"8859":14,"9":4,"abstract":5,"case":15,"catch":5,"class":9,"default":[1,14,15],"do":14,"extensi\u00f3n":4,"final":13,"function":[13,16],"import":[1,2,3,5,6,9,14,15,16,17],"new":[4,5,9,11,13],"null":9,"opci\u00f3n":4,"public":4,"return":[8,9,10,11,12,15,16],"super":15,"true":[1,4,9,11,14,15],"while":1,A:4,And:16,FOR:4,For:[0,1,4,7,15],If:[4,16],In:[4,13,15],Is:[4,15],It:[4,5],Of:15,Ons:4,Or:14,The:4,With:[1,13],a1:10,absolut:4,academ:12,act:14,action:[14,15],activ:[1,5,12,16,17],active_sheet:[3,10],add:[4,13,14,16],addin:[4,13],addonmenu:4,all:[4,14],along:4,alt:[4,8],alwai:[1,2,3,5,6,14,15,16,17],an:[5,14],ani:[1,4,5,15,16],api:[5,14,15],app:[1,2,3,5,6,8,9,10,11,12,14,15,16,17],app_nam:[14,15],applic:[0,4,5,7,15],april:10,apt:13,ar:[5,14,15],arbitrari:1,archlinux:13,arg:[1,15],argument:[1,4],ask:14,automat:[4,10,16],autostyl:7,awt:1,b:14,base:[0,4,5,7],base_insert_data:9,base_select_data:9,basedatefield:9,basemodel:9,basic:[13,15],befor:[4,16],bergman:[9,15],best:15,better:[15,16],between:5,bin:[4,14],binari:5,blank:4,bmp:4,bool:4,born:9,both:15,box:5,build:14,c:13,cach:14,calc:[0,1,4,5,7,8,13,14],calc_data_to_cel:10,calcul:[10,15],call:5,call_dispatch:1,call_macro:15,can:[1,4,5,9,13,14,15,16],captur:15,catch_except:16,caution:[14,15],cd:[4,13],cell:7,chang:14,charfield:9,clipboard:7,clock:15,clone:13,close:11,code:[4,5,16],com:1,command:[1,15],commandurl:8,complex:[5,15],compon:[4,13],compress:13,con:5,conf:[4,15],config:[14,15],configur:[0,5],confirm:14,connect:[2,9],contact:[9,15],contacto:9,content:14,context:[1,4,14],copi:[4,5,13,16],correctli:4,cotillar:9,count:5,cours:[13,15],creat:[4,5,7,13],create_inst:1,create_t:9,cryptographi:15,csv:5,ctrl:[4,8],cuat:13,current:[4,5,15],custom:[5,7],danger:15,darken:14,data:[5,7,8,15,16],data_to_dict:15,databas:[5,9],database_proxi:9,databaseproxi:9,date:[5,9,16],datetim:9,db:[2,9],de:4,debug:[0,5,8,14,15],decrypt:5,def:[8,9,10,11,12,15,16],defin:14,delet:[5,7],delete_menu:8,delin:14,descript:4,desktop1:1,desktop2:1,desktop:[1,15],detail:4,dev:13,develop:[4,5,13],dialog:1,dialogprovider2:1,dict:9,dict_to_properti:15,dictionari:[4,5],difficult:16,digest:5,dir:5,dir_tmp:14,directli:[5,15],directori:[5,13],dispatch:5,displai:4,display_nam:4,displaynam:4,distribut:4,doc:[2,5,9,11,12,14],document:[1,5,11,15],domain:13,don:[13,14],done:13,download:[13,14,15],draw:[0,1,4,7],drwxr:15,dt:14,each:4,easi:15,easili:5,easymacro:[0,1,2,3,6,9,14,15,16,17],echochar:15,edit:4,either:4,el:4,elmau:[4,13,14],els:9,email:[0,5],en:[4,5],encod:14,encrypt:5,encrypt_decrypt:15,end:15,epoch:15,error:5,errorbox:15,es:4,even:4,everi:15,exactli:4,exampl:[0,1,4,8],except:5,execut:[5,9,15],exist:[1,5,9],exists_app:14,exit:14,ext:14,extens:[0,5,16],extensionnam:4,extern:5,f:[1,4,14],fals:9,februari:10,file:[0,1,5,13],file_nam:[14,15],file_test:4,filter:14,finish:15,first:0,fit:4,folder:[4,14],fonda:9,forget:13,format:[1,4,5,15],foundat:4,frame:1,free:4,fresh:13,from:[5,7,9,13],from_csv:14,from_id:14,from_json:14,galleri:1,gener:[4,13],get:[5,9],get_config:15,get_desktop:1,get_dir:14,get_epoch:15,get_fil:14,get_json:15,get_queri:9,git:13,gnome:15,gnu:[4,15],gran:4,great:4,happi:5,have:[4,16],he:14,hello:15,hi:14,hidden:[1,11,15],himself:14,home:[1,2,4,5,9,11,15,16],hope:4,html:14,http:[4,13,15],httpx:15,i18n:4,i:[13,15],id:[5,9],id_ext:14,id_fold:14,id_par:14,idea:14,identityfield:9,idl:4,idlc:4,imag:[4,7,14],immedi:14,impli:4,impress:[1,4],includ:4,index:[0,8,14],info:[4,5,8,13],info_debug:[5,8,15],inform:[14,16],ingrid:[9,15],init:14,initi:9,inputbox:5,insert:[7,8],insert_menu_in_calc:8,instal:[0,4,5,9,15,16],instanc:5,instruct:14,integ:4,intern:4,introduct:0,invers:4,ipifi:15,is_dir:14,is_fil:14,is_mac:15,is_win:15,iso:14,issu:16,iter:5,jane:9,januari:10,jefferson:14,join:5,json:5,json_dump:15,json_load:15,jun:15,kei:4,keyboard:4,kill:14,kim:9,know:14,label:[4,8],lang:15,languag:[4,15],languaj:15,later:4,layer:5,legacy_table_nam:9,len:1,lessen:14,letmein:[1,15],letter_lov:15,lh:15,lib:4,librari:[0,1,2,3,6,8,14,15,17],libre_offic:14,libreoffic:[1,4,5,13,15,16],license_:4,license_en:4,light:14,like:4,line:15,link:4,linux:15,list:5,list_of_list:15,local:13,log:5,logo:4,look:4,loren:9,ls:15,lu20665x29msz:14,m:8,mac:15,macro:[4,5,7,8,13],mai:[10,15],main:15,major:5,make:[5,7,13],manag:4,march:10,marion:9,mau:[1,2,4,9,11,14,15,16],me:14,measur:15,menu:7,menu_main:4,merchant:4,messag:5,meta:9,method:[1,14],mi:4,mine:14,model:9,modifi:4,modul:[0,15],module1:15,month:10,more:[4,5,15],move:[4,13],mri:5,msg:[1,16],msgbox:[1,2,3,5,6,8,11,14,15,16,17],multi:4,multipl:14,my:[0,4,8,15,16],my_app:15,my_extens:15,mydoc:1,myfil:14,myfirstextens:13,myfirstextension_v0:13,mygreatextens:4,mymacro:8,n:[4,13],name:[3,5,8,9,14,15,16],name_16:4,name_26:4,need:[9,15,16],net:[4,13,14],new_nam:14,nombr:4,none:15,normal:[4,15],nosoffic:14,novak:9,now:[13,14,15],obj:[5,16],object:[1,5,16],od:[1,4,14],odb:[2,9],odt:[1,14,15],officemenubar:4,ok:15,one:[4,14,16],onli:[1,4,15],open:[4,5,11,16],oper:15,option1:4,option:[4,14],org:[4,15],origin:[1,5],os:[6,14,15],other:[1,14,15],other_nam:14,ott:14,out:15,output:15,overview:0,oxt:[13,14],p:14,pacman:13,page:[0,4],paramet:0,part:4,particular:4,pass:4,password:[1,15],past:11,path:[0,1,2,5,9,11,15],path_dir:14,path_fil:14,path_hom:14,path_new:14,path_pygettext:4,path_python:14,path_temp:14,path_tmp:14,path_url:14,pathlib:14,pc:5,pdf:14,peewe:9,pictur:[11,14,15],pip:9,planet:16,pleas:[4,16],png:[4,14,15],popen:15,possibl:4,pot:[4,13],print:9,privat:15,probabl:5,problem:16,process:16,product:[7,16],program:5,project:[4,13,14,15,16],properti:[1,4,5],provid:13,prueba:4,publish:4,purpos:4,py:[0,1,4,13],python3:4,python:[5,13,15],pyuno:16,queri:9,question:5,r:[15,16],rang:10,rapid:13,rdb:4,read:5,read_bin:14,receiv:[4,14],recommend:[4,13],recurs:14,redistribut:4,regard:15,regmerg:4,rel:4,rememb:[1,2,3,6,14,15,17],remerg:4,remov:8,render:5,replac:5,replace_ext:14,repositori:13,request:15,requir:0,result:[14,15],row:9,run:15,run_in_thread:15,rw:15,s:[4,5,13],safe_for_delet:14,same:[4,14,15],save:[5,7,16],save_bin:14,save_data:15,save_image_from_clipboard:11,save_log:16,save_tmp:14,script:13,sdk:[4,13],search:0,second:15,secret:15,see:4,select:[5,7],semant:4,send:[5,15],servic:1,set:[4,7],set_config:15,sha256:15,sha512:15,share:4,sheet:[5,10],shell:16,shift:[4,8],shortcut:[4,8],should:4,show:[4,5,8,16],show_info_debug:8,show_messag:15,show_tim:15,simpl:5,size:[10,14],sleep:15,soffic:[4,14],sofia:9,softwar:4,sometim:16,sourc:13,space:4,standard:15,star:1,start:[4,13,15,16],start_clock:15,start_tim:15,stop:15,stop_clock:15,stop_tim:15,string:[4,5],style:12,sub:15,subdirectori:14,submenu:8,successfulli:13,sudo:13,sun:1,support:[1,13,15],system:[5,15],t:[4,13,14],t_shift_mod1_mod2:4,tabl:7,taper:14,target:[11,14],technic:15,temp:5,temp_dir:14,templat:15,tempor:5,teresa:16,term:4,test:[9,13,14,15,16],text:[4,5,15],thi:[4,13,14,15,16],thoma:14,thread:5,three:[14,16],ticket:16,time:[5,16],timer:5,timer_nam:15,titl:[1,4,15],tmp:14,tmp_:14,to_csv:14,to_json:14,to_system:14,to_url:14,todai:15,token:15,too:[4,15],tool:[0,4,5,8],toolbar:4,toolkit:1,total:[10,15],tu:4,tupl:[4,5,9,14],tuple_of_tupl:15,two:[4,14],txt:[14,16],type:[1,2,3,5,15,17],type_extens:4,u:9,ubuntu:13,under:4,uniqu:4,uno:[1,5],uno_packag:14,unopkg:[4,13],urd:4,url:[4,5],url_open:15,us:[1,4,5,7,13,14,15,16],use_local:4,user:[13,14,15],usr:4,utf8:14,v:4,valor:4,valu:4,variant:15,verifi:[5,16],version:15,video:15,vim:4,visibl:1,wai:14,walk:14,walk_dir:14,want:[4,14],warn:5,warranti:4,what:4,when:[4,14],where:4,who:14,window:15,without:[1,4,14],wizard:4,work:15,writer:[0,1,4,5,7],writer_table_set_styl:12,www:4,x:15,xlsx:1,xml:14,xpathset:14,xr:15,you:[1,4,5,9,13,14,15,16],your:[4,5,15,16],yournam:4,zaz:[4,8,13,14],zazeasymacro_v0:14},titles:["Welcome to ZAZ\u2019s documentation!","Application","Base","Calc","Configuration","Library easymacro.py","Email","Examples","For Application","For Base","For Calc","For Draw","For Writer","Introduction","Paths and files","Tools","Tools for debug","Writer"],titleterms:{"catch":16,"default":4,"function":4,"new":[1,2],For:[8,9,10,11,12],activ:3,ani:14,applic:[1,8,14],author:4,autostyl:12,base:[2,9],binari:14,box:[15,16],calc:[3,10],call:[1,15,16],cell:10,clipboard:11,configur:[4,14,15],content:[0,5,7],copi:14,count:1,creat:[1,9],csv:14,current:[1,3,17],custom:8,data:[9,10,14],databas:2,date:15,debug:16,decrypt:15,delet:[8,14],dictionari:15,digest:15,dir:14,directori:14,dispatch:1,doc:[1,3,17],document:[0,14],domain:4,draw:11,easymacro:5,email:6,encrypt:15,error:[15,16],exampl:7,except:16,execut:14,exist:14,extens:[4,13,14],extern:15,file:[4,14,16],first:13,format:14,from:[11,14,15],get:[1,14,15],home:14,icon:4,id:[4,14],imag:11,indic:0,info:[14,15,16],info_debug:16,inform:4,inputbox:15,insert:9,instal:[13,14],instanc:1,introduct:13,iter:1,join:14,json:[14,15],librari:5,libreoffic:14,licens:4,list:15,local:4,log:16,macro:15,main:4,make:[8,15],menu:[4,8],messag:[15,16],mri:16,my:13,name:[1,4],open:[1,14,15],overview:13,paramet:4,parent:4,path:[4,14],pc:15,program:[4,15],properti:15,py:5,pygettext:4,python:14,question:15,read:14,render:15,replac:14,requir:13,s:0,save:[11,14,15],select:[9,14],send:6,set:12,sheet:3,show:15,simpl:15,string:15,system:14,tabl:[0,9,12],temp:14,tempor:14,test:4,text:14,thread:15,time:15,timer:15,tool:[15,16],tupl:15,type:[4,14],url:[14,15],verifi:14,version:4,warn:15,welcom:0,writer:[12,17],zaz:0}}) \ No newline at end of file +Search.setIndex({docnames:["index","main/application","main/base","main/calc","main/config","main/easymacro","main/email","main/examples","main/examples_app","main/examples_base","main/examples_calc","main/examples_draw","main/examples_writer","main/intro","main/paths","main/tools","main/tools_for_debug","main/writer"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["index.rst","main/application.rst","main/base.rst","main/calc.rst","main/config.rst","main/easymacro.rst","main/email.rst","main/examples.rst","main/examples_app.rst","main/examples_base.rst","main/examples_calc.rst","main/examples_draw.rst","main/examples_writer.rst","main/intro.rst","main/paths.rst","main/tools.rst","main/tools_for_debug.rst","main/writer.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[4,8,12,13,14,16],"02":13,"04":13,"06":[14,15],"07":13,"080315":15,"082211":15,"09":15,"0k":15,"1":[4,9,13,14,15,16],"100":10,"11":[13,15],"12":15,"126446":15,"128487":15,"13":15,"14":15,"15":15,"16":15,"17":15,"18":15,"19":15,"2":[4,9,14,15,16],"20":[13,15],"200":10,"2001":9,"2002":9,"2003":9,"2004":9,"2005":9,"2021":[13,14,15],"21":[14,15],"22":15,"23":[13,15],"24":14,"26":15,"27":15,"29":14,"3":[4,9,13,14],"300":10,"34":15,"35":15,"3m":15,"4":[9,14,15],"40":13,"400":10,"41":13,"42":15,"43":15,"46":15,"47":[14,15],"48":15,"5":[9,15],"50":13,"500":[10,16],"53":[13,15],"6":15,"7":13,"8859":14,"9":4,"abstract":5,"case":15,"catch":5,"class":9,"default":[1,14,15],"do":14,"export":5,"extensi\u00f3n":4,"final":13,"function":[13,16],"import":[1,2,3,5,6,9,14,15,16,17],"new":[4,5,9,11,13],"null":9,"opci\u00f3n":4,"public":4,"return":[8,9,10,11,12,15,16],"super":15,"true":[1,4,9,11,14,15],"while":1,A:4,And:16,FOR:4,For:[0,1,4,7,14,15],If:[4,16],In:[4,13,15],Is:[4,15],It:[4,5],Of:15,Ons:4,Or:14,The:4,To:5,With:[1,13],a1:10,absolut:4,academ:12,act:14,action:[14,15],activ:[1,5,12,16,17],active_sheet:[3,10],add:[4,13,14,16],addin:[4,13],addonmenu:4,all:[4,14],along:4,alt:[4,8],alwai:[1,2,3,5,6,14,15,16,17],an:[5,14],ani:[1,4,5,15,16],api:[5,14,15],app:[1,2,3,5,6,8,9,10,11,12,14,15,16,17],app_nam:[14,15],applic:[0,4,5,7,15],april:10,apt:13,ar:[5,14,15],arbitrari:1,archlinux:13,arg:[1,15],argument:[1,4],ask:14,automat:[4,10,16],autostyl:7,awt:1,b:14,base:[0,4,5,7],base_insert_data:9,base_select_data:9,basedatefield:9,basemodel:9,basic:[13,15],befor:[4,16],bergman:[9,15],best:15,better:[15,16],between:5,bin:[4,14],binari:5,blank:4,bmp:4,bool:4,born:9,both:15,box:5,build:14,c:13,cach:14,calc:[0,1,4,5,7,8,13,14],calc_data_to_cel:10,calcul:[10,15],call:5,call_dispatch:1,call_macro:15,can:[1,4,5,9,13,14,15,16],captur:15,catch_except:16,caution:[14,15],cd:[4,13],cell:7,chang:14,charfield:9,clipboard:7,clock:15,clone:13,close:11,code:[4,5,16],com:1,command:[1,15],commandurl:8,complex:[5,15],compon:[4,13],compress:13,con:5,conf:[4,15],config:[14,15],configur:[0,5],confirm:14,connect:[2,9],contact:[9,15],contacto:9,content:14,context:[1,4,14],copi:[4,5,13,16],correctli:4,cotillar:9,count:5,cours:[13,15],creat:[4,5,7,13],create_inst:1,create_t:9,cryptographi:15,csv:5,ctrl:[4,8],cuat:13,current:[4,5,15],custom:[5,7],danger:15,darken:14,data:[5,7,8,15,16],data_to_dict:15,databas:[5,9],database_proxi:9,databaseproxi:9,date:[5,9,16],datetim:9,db:[2,9],de:4,debug:[0,5,8,14,15],decrypt:5,def:[8,9,10,11,12,15,16],defin:14,delet:[5,7],delete_menu:8,delin:14,descript:4,desktop1:1,desktop2:1,desktop:[1,15],detail:4,dev:13,develop:[4,5,13],dialog:1,dialogprovider2:1,dict:9,dict_to_properti:15,dictionari:[4,5],difficult:16,digest:5,dir:5,dir_tmp:14,directli:[5,15],directori:[5,13],dispatch:5,displai:4,display_nam:4,displaynam:4,distribut:4,doc:[2,5,9,11,12,14],document:[1,5,11,15],domain:13,don:[13,14],done:13,download:[13,14,15],draw:[0,1,4,7],drwxr:15,dt:14,each:4,easi:15,easili:5,easymacro:[0,1,2,3,6,9,14,15,16,17],echochar:15,edit:4,either:4,el:4,elmau:[4,13,14],els:9,email:[0,5],en:[4,5],encod:14,encrypt:5,encrypt_decrypt:15,end:15,epoch:15,error:5,errorbox:15,es:4,even:4,everi:15,exactli:4,exampl:[0,1,4,8],except:5,execut:[5,9,15],exist:[1,5,9],exists_app:14,exit:14,ext:14,extens:[0,5,16],extensionnam:4,extern:5,f:[1,4,14],fals:9,februari:10,file:[0,1,5,13],file_nam:[14,15],file_test:4,filter:14,finish:15,first:0,fit:4,folder:[4,14],fonda:9,forget:13,format:[1,4,5,15],foundat:4,frame:1,free:4,fresh:13,from:[5,7,9,13],from_csv:14,from_id:14,from_json:14,galleri:1,gener:[4,13],get:[5,9],get_config:15,get_desktop:1,get_dir:14,get_epoch:15,get_fil:14,get_json:15,get_queri:9,git:13,gnome:15,gnu:[4,15],gran:4,great:4,happi:5,have:[4,16],he:14,hello:15,hi:14,hidden:[1,11,15],himself:14,home:[1,2,4,5,9,11,15,16],hope:4,html:14,http:[4,13,15],httpx:15,i18n:4,i:[13,15],id:[5,9],id_ext:14,id_fold:14,id_par:14,idea:14,identityfield:9,idl:4,idlc:4,imag:[4,7,14],immedi:14,impli:4,impress:[1,4],includ:4,index:[0,8,14],info:[4,5,8,13],info_debug:[5,8,15],inform:[14,16],ingrid:[9,15],init:14,initi:9,inputbox:5,insert:[7,8],insert_menu_in_calc:8,instal:[0,4,5,9,15,16],instanc:5,instruct:14,integ:4,intern:4,introduct:0,invers:4,ipifi:15,is_dir:14,is_fil:14,is_mac:15,is_win:15,iso:14,issu:16,iter:5,jane:9,januari:10,jefferson:14,join:5,json:5,json_dump:15,json_load:15,jun:15,kei:4,keyboard:4,kill:14,kim:9,know:14,label:[4,8],lang:15,languag:[4,15],languaj:15,later:4,layer:5,legacy_table_nam:9,len:1,lessen:14,letmein:[1,15],letter_lov:15,lh:15,lib:4,librari:[0,1,2,3,6,8,14,15,17],libre_offic:14,libreoffic:[1,4,5,13,15,16],license_:4,license_en:4,light:14,like:4,line:15,link:4,linux:15,list:5,list_of_list:15,local:13,log:5,logo:[4,14],look:4,loren:9,ls:15,lu20665x29msz:14,m:8,mac:15,macro:[4,5,7,8,13],mai:[10,15],main:15,major:5,make:[5,7,13],manag:4,march:10,marion:9,mau:[1,2,4,9,11,14,15,16],me:14,measur:15,memori:1,menu:7,menu_main:4,merchant:4,messag:5,meta:9,method:[1,14],mi:4,mine:14,model:9,modifi:4,modul:[0,15],module1:15,month:10,more:[4,5,15],move:[4,13],mri:5,msg:[1,16],msgbox:[1,2,3,5,6,8,11,14,15,16,17],multi:4,multipl:14,my:[0,4,8,15,16],my_app:15,my_extens:15,mydoc:1,myfil:14,myfirstextens:13,myfirstextension_v0:13,mygreatextens:4,mymacro:8,n:[4,13,14],name:[3,5,8,9,14,15,16],name_16:4,name_26:4,need:[9,15,16],net:[4,13,14],new_nam:14,nombr:4,none:15,normal:[4,15],nosoffic:14,novak:9,now:[13,14,15],obj:[5,16],object:[1,5,16],od:[1,4,14],odb:[2,9],odt:[1,14,15],officemenubar:4,ok:15,one:[4,14,16],onli:[1,4,15],open:[4,5,11,16],oper:15,option1:4,option:[4,14],org:[4,15],origin:[1,5],os:[6,14,15],other:[1,14,15],other_nam:14,ott:14,out:15,output:15,overview:0,oxt:[13,14],p:14,pacman:13,page:[0,4],paramet:0,part:4,particular:4,pass:4,password:[1,15],past:11,path:[0,1,2,5,9,11,15],path_dir:14,path_fil:14,path_hom:14,path_new:14,path_pygettext:4,path_python:14,path_temp:14,path_tmp:14,path_url:14,path_zip:14,pathlib:14,pc:5,pdf:[5,14],peewe:9,pictur:[11,14,15],pip:9,planet:16,pleas:[4,16],png:[4,14,15],popen:15,possibl:4,pot:[4,13],print:9,privat:15,probabl:5,problem:16,process:16,product:[7,16],program:5,project:[4,13,14,15,16],properti:[1,4,5],provid:13,prueba:4,publish:4,purpos:4,py:[0,1,4,13],python3:4,python:[5,13,15],pyuno:16,queri:9,question:5,r:[15,16],rang:10,rapid:13,rdb:4,read:5,read_bin:14,receiv:[4,14],recommend:[4,13],recurs:14,redistribut:4,regard:15,regmerg:4,rel:4,rememb:[1,2,3,6,14,15,17],remerg:4,remov:8,render:5,replac:5,replace_ext:14,repositori:13,request:15,requir:0,result:[14,15],row:9,run:15,run_in_thread:15,rw:15,s:[4,5,13],safe_for_delet:14,same:[4,14,15],save:[5,7,16],save_bin:14,save_data:15,save_image_from_clipboard:11,save_log:16,save_tmp:14,script:13,sdk:[4,13],search:0,second:15,secret:15,see:4,select:[5,7],semant:4,send:[5,15],servic:1,set:[4,7,14],set_config:15,sha256:15,sha512:15,share:4,sheet:[5,10],shell:16,shift:[4,8],shortcut:[4,8],should:4,show:[4,5,8,16],show_info_debug:8,show_messag:15,show_tim:15,simpl:5,size:[10,14],sleep:15,soffic:[4,14],sofia:9,softwar:4,sometim:16,sourc:[13,14],space:4,standard:15,star:1,start:[4,13,15,16],start_clock:15,start_tim:15,stop:15,stop_clock:15,stop_tim:15,string:[4,5],style:12,sub:15,subdirectori:14,submenu:8,successfulli:13,sudo:13,sun:1,support:[1,13,15],svg:14,system:[5,15],t:[4,13,14],t_shift_mod1_mod2:4,tabl:7,taper:14,target:[11,14],technic:15,temp:5,temp_dir:14,templat:15,tempor:5,teresa:16,term:4,test:[1,9,13,14,15,16],text:[4,5,15],thi:[4,13,14,15,16],thoma:14,thread:5,three:[14,16],ticket:16,time:[5,16],timer:5,timer_nam:15,titl:[1,4,15],tmp:14,tmp_:14,to_csv:14,to_json:14,to_pdf:1,to_system:14,to_url:14,todai:15,token:15,too:[4,15],tool:[0,4,5,8],toolbar:4,toolkit:1,total:[10,15],tu:4,tupl:[4,5,9,14],tuple_of_tupl:15,two:[4,14],txt:[14,16],type:[1,2,3,5,15,17],type_extens:4,u:9,ubuntu:13,under:4,uniqu:4,uno:[1,5],uno_packag:14,unopkg:[4,13],unzip:5,urd:4,url:[4,5],url_open:15,us:[1,4,5,7,13,14,15,16],use_local:4,user:[13,14,15],usr:4,utf8:14,v:4,valor:4,valu:4,variant:15,verifi:[5,16],version:15,video:15,vim:4,visibl:1,wai:14,walk:14,walk_dir:14,want:[4,14],warn:5,warranti:4,what:4,when:[4,14],where:4,who:14,window:15,without:[1,4,14],wizard:4,work:15,writer:[0,1,4,5,7],writer_table_set_styl:12,www:4,x:15,xlsx:1,xml:14,xpathset:14,xr:15,you:[1,4,5,9,13,14,15,16],your:[4,5,15,16],yournam:4,zaz:[4,8,13,14],zazeasymacro_v0:14,zip:5,zip_cont:14},titles:["Welcome to ZAZ\u2019s documentation!","Application","Base","Calc","Configuration","Library easymacro.py","Email","Examples","For Application","For Base","For Calc","For Draw","For Writer","Introduction","Paths and files","Tools","Tools for debug","Writer"],titleterms:{"catch":16,"default":4,"export":1,"function":4,"new":[1,2],For:[8,9,10,11,12],To:1,activ:3,ani:14,applic:[1,8,14],author:4,autostyl:12,base:[2,9],binari:14,box:[15,16],calc:[3,10],call:[1,15,16],cell:10,clipboard:11,configur:[4,14,15],content:[0,5,7],copi:14,count:1,creat:[1,9],csv:14,current:[1,3,17],custom:8,data:[9,10,14],databas:2,date:15,debug:16,decrypt:15,delet:[8,14],dictionari:15,digest:15,dir:14,directori:14,dispatch:1,doc:[1,3,17],document:[0,14],domain:4,draw:11,easymacro:5,email:6,encrypt:15,error:[15,16],exampl:7,except:16,execut:14,exist:14,extens:[4,13,14],extern:15,file:[4,14,16],first:13,format:14,from:[11,14,15],get:[1,14,15],home:14,icon:4,id:[4,14],imag:11,indic:0,info:[14,15,16],info_debug:16,inform:4,inputbox:15,insert:9,instal:[13,14],instanc:1,introduct:13,iter:1,join:14,json:[14,15],librari:5,libreoffic:14,licens:4,list:15,local:4,log:16,macro:15,main:4,make:[8,15],menu:[4,8],messag:[15,16],mri:16,my:13,name:[1,4],open:[1,14,15],overview:13,paramet:4,parent:4,path:[4,14],pc:15,pdf:1,program:[4,15],properti:15,py:5,pygettext:4,python:14,question:15,read:14,render:15,replac:14,requir:13,s:0,save:[1,11,14,15],select:[9,14],send:6,set:12,sheet:3,show:15,simpl:15,string:15,system:14,tabl:[0,9,12],temp:14,tempor:14,test:4,text:14,thread:15,time:15,timer:15,tool:[15,16],tupl:15,type:[4,14],unzip:14,url:[14,15],verifi:14,version:4,warn:15,welcom:0,writer:[12,17],zaz:0,zip:14}}) \ No newline at end of file diff --git a/doc/source/main/application.rst b/doc/source/main/application.rst index 8e20fd2..338f4a8 100644 --- a/doc/source/main/application.rst +++ b/doc/source/main/application.rst @@ -142,6 +142,34 @@ With arguments. doc = app.docs.open(path, args) +Save +^^^^ + + +To PDF +^^^^^^ + +* Save in path + +.. code-block:: python + + doc = app.active + path = '/home/mau/test.pdf' + doc.to_pdf(path) + +* Save in memory + +.. code-block:: python + + doc = app.active + pdf = doc.to_pdf() + + +Export +^^^^^^ + + + Call dispatch ^^^^^^^^^^^^^ diff --git a/doc/source/main/paths.rst b/doc/source/main/paths.rst index 902731e..b439799 100644 --- a/doc/source/main/paths.rst +++ b/doc/source/main/paths.rst @@ -508,6 +508,47 @@ You can used the same way that `python csv`_ app.msgbox(data) +Zip, unzip +^^^^^^^^^^ + +For default, save in the same directory with the same name + `.zip` + +* Zip file + +.. code-block:: python + + source = '/home/mau/logo.svg' + path_zip = app.paths.zip(source) + app.debug(path_zip) + +* Zip directory + +.. code-block:: python + + source = '/home/mau/test' + path_zip = app.paths.zip(source) + app.debug(path_zip) + +* Set target + +.. code-block:: python + + source = '/home/mau/logo.svg' + target = '/home/mau/myfile.zip' + path_zip = app.paths.zip(source, target) + app.debug(path_zip) + +* Read content of zip + +.. code-block:: python + + path_zip = '/home/mau/test.zip' + names = app.paths.zip_content(path_zip) + for n in names: + app.debug(n) + + + Copy files ^^^^^^^^^^ diff --git a/source/easymacro.py b/source/easymacro.py index 359ecb2..bd1e225 100644 --- a/source/easymacro.py +++ b/source/easymacro.py @@ -101,6 +101,8 @@ from com.sun.star.awt.grid import XGridDataListener from com.sun.star.awt.grid import XGridSelectionListener from com.sun.star.script import ScriptEventDescriptor +from com.sun.star.io import IOException, XOutputStream + # ~ https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1awt_1_1FontUnderline.html from com.sun.star.awt import FontUnderline from com.sun.star.style.VerticalAlignment import TOP, MIDDLE, BOTTOM @@ -1201,21 +1203,31 @@ class LODocument(object): """ https://wiki.documentfoundation.org/Macros/Python_Guide/PDF_export_filter_data """ - path_pdf = path + stream = None + path_pdf = 'private:stream' + if path: + path_pdf = _P.to_url(path) + filter_name = '{}_pdf_Export'.format(self.type) filter_data = dict_to_property(args, True) args = { 'FilterName': filter_name, 'FilterData': filter_data, } + if not path: + stream = IOStream.output() + args['OutputStream'] = stream + opt = dict_to_property(args) try: - self.obj.storeToURL(_P.to_url(path), opt) + self.obj.storeToURL(path_pdf, opt) except Exception as e: error(e) - path_pdf = '' - return _P.exists(path_pdf) + if not stream is None: + stream = stream.buffer + + return stream def export(self, path: str, ext: str='', args: dict={}): if not ext: @@ -3965,7 +3977,6 @@ class LOBasic(LODocument): class LODocs(object): _desktop = None - # ~ 'private:stream' def __init__(self): self._desktop = get_desktop() @@ -6553,7 +6564,7 @@ class Paths(object): return @classmethod - def zip(cls, source, target='', pwd=''): + def zip(cls, source, target=''): path_zip = target if not isinstance(source, (tuple, list)): path, _, name, _ = _P(source).info @@ -6572,7 +6583,7 @@ class Paths(object): with zipfile.ZipFile(path_zip, 'w', compression=compression) as z: for f in files: z.write(f[0], f[1]) - return + return path_zip @classmethod def zip_content(cls, path): @@ -6591,7 +6602,7 @@ class Paths(object): if isinstance(members, str): members = (members,) z.extractall(path, members=members, pwd=pwd) - return True + return @classmethod def merge_zip(cls, target, zips): @@ -6642,6 +6653,27 @@ class Dates(object): return d +class OutputStream(unohelper.Base, XOutputStream): + + def __init__(self): + self._buffer = b'' + self.closed = 0 + + @property + def buffer(self): + return self._buffer + + def closeOutput(self): + self.closed = 1 + + def writeBytes(self, seq): + if seq.value: + self._buffer = seq.value + + def flush(self): + pass + + class IOStream(object): @classmethod @@ -6655,6 +6687,10 @@ class IOStream(object): stream.initialize((uno.ByteSequence(buffer.getvalue()),)) return stream + @classmethod + def output(cls): + return OutputStream() + @classmethod def qr(cls, data, **kwargs): import segno