--- ECHO_content/ECHO_collection.py 2004/11/24 15:17:04 1.189 +++ ECHO_content/ECHO_collection.py 2004/11/29 21:55:29 1.193 @@ -9,7 +9,13 @@ class ECHO_externalLink contains informa """ +from reportlab.pdfgen import canvas +from reportlab.lib.pagesizes import A4 + + + import string +import tempfile import re import os import OFS.Image @@ -222,127 +228,11 @@ def manage_addECHO_layoutTemplate(self, REQUEST.RESPONSE.redirect(u+'/manage_main') return '' -class ECHO_fullText(ZopePageTemplate,ECHO_basis): +class ECHO_fullText(ZopePageTemplate,ECHO_basis,ECHO_language): """echo fulltext in xml""" meta_type="ECHO_fullText" - def donatusVariant2Lemma(self,nr='1'): - """analyze by donatus""" - return donatusVariant2Lemma(donatus(self.lemmatize(nr))) - - def tagLex(self,nr="1"): - """generate Links""" - global retLex - global toggle - - toggle=0 - retLex="" - - lemmatized=self.lemmatize(nr)[0:] - #print "ho",repr(lemmatized) - variants=donatusVariant2Lemma(donatus(lemmatized)) - - def createTag(name,attrs): - global toggle - - if name=="w": - toggle=1 - return "" - else: - tag="<" - tag+=name - for attr in attrs.keys(): - tag+=""" %s="%s" """%(attr,attrs[attr]) - tag+=">" - return tag - - def createData(data): - global toggle - astring="""%s """ - if toggle: # tag war ein w - toggle=0 - if variants.has_key(data): - return astring%(variants[data][0],data) - else: - return astring%(data,data) - - - - # 3 handler functions - def start_element(name, attrs): - global retLex - - retLex+=createTag(name,attrs) - def end_element(name): - global retLex - if not name=="w": - retLex+=""%(name.encode('utf-8')) - - - def char_data(data): - global retLex - if data: - try: - retLex+=createData(data) - except: - """no""" - - p = xml.parsers.expat.ParserCreate() - - p.StartElementHandler = start_element - p.EndElementHandler = end_element - p.CharacterDataHandler = char_data - - p.Parse(lemmatized.encode('utf-8'),1) - #print repr(lemmatized.encode('utf-8')) - - return retLex - - - def lemmatize(self,nr='1',lang="de"): - """lemmatize""" - global ret - ret="" - - def createTag(name,attrs): - tag="<" - tag+=name - for attr in attrs.keys(): - tag+=""" %s="%s" """%(attr,attrs[attr]) - tag+=">" - return tag - - def insertW(str): - splitted=str.split() - wordlist=["%s"%split for split in splitted] - return string.join(wordlist,'\n') - - # 3 handler functions - def start_element(name, attrs): - global ret - ret+=createTag(name,attrs) - def end_element(name): - global ret - ret+=""%(name.encode('utf-8')) - - def char_data(data): - global ret - ret+=insertW(data) - - p = xml.parsers.expat.ParserCreate() - - p.StartElementHandler = start_element - p.EndElementHandler = end_element - p.CharacterDataHandler = char_data - - p.Parse(self.getPage(nr), 1) - txt=""" -
%s
-
""" - ret=txt%(lang,ret) - - return ret def getPage(self,nr='1'): """get page n""" @@ -388,6 +278,7 @@ def manage_addECHO_fullText(self, id, ti REQUEST.RESPONSE.redirect(u+'/manage_main') return '' + class ECHO_resource(Folder,Persistent,ECHO_basis): """ECHO Ressource""" security=ClassSecurityInfo() @@ -399,65 +290,97 @@ class ECHO_resource(Folder,Persistent,EC security.declareProtected('View','index_html') - def showRDF(self): - """showrdf""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - ret="""\n\n""" - ret+=self.getRDF(urn="echo:colllectionroot")+"\n" - - ret+="""""" - return ret + + + security.declareProtected('View','createPDF') + def createPDF(self,RESPONSE=None,local=None,dpi=150): + """erzeuge pdf file""" + pages=1 + dpi=float(dpi) + imagePath=self.getImagePath().replace("/mpiwg/online","") + + + image="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler?fn="+imagePath+"&dw=%i&dh=%i&pn=%i" + xmlInfo="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/dlInfo-xml.jsp?fn="+imagePath + + dom=xml.dom.minidom.parse(urllib.urlopen(xmlInfo)) + for parameter in dom.getElementsByTagName('parameter'): + if parameter.getAttribute('name')=="pt": + pages=int(parameter.getAttribute('value')) + break + + tempdir="/tmp/archivesImageServer" + if not os.path.exists(tempdir): + os.mkdir(tempdir) + + tmpPath=tempfile.mkdtemp(dir=tempdir) + - def getRDF(self,urn=None): - """rdf""" - ret=getRDFDescription(self,self.link,urn=urn) - return ret+self.createSubElementRDF(urn=urn) + tmpZip=tempfile.mktemp(dir=tempdir) + tmpFn=os.path.split(tmpZip)[1] - def createSubElementRDF(self,urn=None): - """rdf list""" - if not urn: - urn=self.absolute_url() - ret="" - rettemp="""\n"""%urn - flag=0 - - li="""\n""" - if not ('' in self.getFullTextXML(noredirect='Yes')): - nurn=self.absolute_url()+'/getFullTextXML' - rettemp+=li%nurn - flag=1 - if not ('' in self.getImageView(noredirect='Yes')): - nurn=self.absolute_url()+'/getImageView' - rettemp+=li%nurn - flag=1 + + + if RESPONSE: + RESPONSE.setHeader("Content-Type","text/html") + RESPONSE.write("

I am creating the pdf

") + txt="

1. step: getting the images( %i pages)

"%pages + RESPONSE.write(txt) - if not ('' in self.showMetaDataXML()): - nurn=self.absolute_url()+'/showMetaDataXML' - rettemp+=li%nurn - flag=1 + c=canvas.Canvas(tmpZip) + for i in range(1,pages+1): + if RESPONSE: + RESPONSE.write(str("

Get Page: %i
\n"%i)) + faktor=dpi/72.0 - rettemp+="" + fn=tmpPath+"/%i"%i - if flag==1: - ret+=rettemp - - if not ('' in self.getFullTextXML(noredirect='Yes')): - nurn=self.absolute_url()+'/getFullTextXML' - ret+=getRDFDescription(self,self.absolute_url()+'/getFullTextXML',urn=nurn,nameDef="Fulltext",typeName="ECHO_fulltext") - - if not ('' in self.getImageView(noredirect='Yes')): - nurn=self.absolute_url()+'/getImageView' - ret+=getRDFDescription(self,self.absolute_url()+'/getImageView',urn=nurn,nameDef="Image View",typeName="ECHO_imageview") - - if not ('' in self.showMetaDataXML()): - nurn=self.absolute_url()+'/showMetaDataXML' - ret+=getRDFDescription(self,self.absolute_url()+'/showMetaDataXML',urn=nurn,nameDef="Metadata",typeName="ECHO_metaData") + width,height=A4 + #print image%(width*faktor,height*faktor,i) + url=urllib.urlopen(image%(width*faktor,height*faktor,i)).read() + fh=file(fn,"w") + fh.write(url) + fh.close() - return ret - + + + c.drawImage(fn,0,0,width=width,height=height) + c.showPage() + c.save() + if RESPONSE: + RESPONSE.write("

finished
\n") + + if RESPONSE: + len=os.stat(tmpZip)[6] + downloadUrl=self.absolute_url()+"/downloadPDF" + RESPONSE.write("""

Click here for download ( %i Byte)

\n"""%(tmpFn,len)) + RESPONSE.write("""

The file will be stored for a while, you can download it later, the URL is:

+

%s?fn=%s\n"""%(tmpFn,downloadUrl,tmpFn)) + RESPONSE.close() + + + def downloadPDF(self,fn): + """download prepared set""" + filename="/tmp/archivesImageServer/"+fn + namePDF=self.getId()+".pdf" + self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%namePDF) + self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") + len=os.stat(filename)[6] + self.REQUEST.RESPONSE.setHeader("Content-Length",len) + images=file(filename).read() + self.REQUEST.RESPONSE.write(images) + self.REQUEST.RESPONSE.close() + + + def getRDF(self,urn=None): + """rdf""" + ret=getRDFDescription(self,self.link,urn=urn) + return ret+self.createSubElementRDF(urn=urn) + + def getAccessRightSelectorHTML(self,outlook="select"): """htmlselector""" values=['free','mpiwg'] @@ -805,8 +728,11 @@ class ECHO_resource(Folder,Persistent,EC else: return "no fulltext available" - - def getImageView(self,noredirect=None): + def getImagePath(self): + """gibt pfad zum image aus""" + return self.getImageView(noredirect="yes",onlyPath="yes") + + def getImageView(self,noredirect=None,onlyPath=None): """getImages; give Imageviewr and if somthing goes wrong.""" try: fh=ECHO_helpers.urlopen(self.metalink) @@ -825,7 +751,10 @@ class ECHO_resource(Folder,Persistent,EC self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') self.REQUEST.RESPONSE.redirect(imageurl) else: - return imageurl + if not onlyPath: + return imageurl + else: + return archivepath+"/"+imagetemp except: if not noredirect: @@ -1067,9 +996,13 @@ class ECHO_resource(Folder,Persistent,EC RESPONSE.redirect('manage_main') - def getMDValue(self,fieldName): - return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType) - + def getMDValue(self,fieldName,empty=None): + if empty: + return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType) + + else: + return self.metaDataHash.get(fieldName,empty) + def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,digiliburlprefix=None): """new index.meta""" self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') @@ -1353,10 +1286,27 @@ class ECHO_resource(Folder,Persistent,EC def ECHO_getMD(self,item): """Ausgabe der MD""" return getattr(self,item) - + + def checkRDF(self,path): + """check if pdf in the path""" + try: + for fileName in os.listdir(path): + if os.path.splitext(fileName)[1]==".pdf": + return os.path.join(path,fileName) + return None + except: + return None + + def index_html(self): """standard page""" - + pdf=self.checkRDF(self.link) + if pdf: + fh=file(pdf,'r').read() + self.REQUEST.RESPONSE.setHeader('Content-Type','x-Application/pdf') + self.REQUEST.RESPONSE.write(fh) + self.REQUEST.RESPONSE.close() + return return self.REQUEST.RESPONSE.redirect(self.link) def startpage_html(self): @@ -1571,17 +1521,6 @@ class ECHO_collection(Folder, Persistent ret+=li%nurn return ret+"" - - def showRDF(self): - """showrdf""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - ret="""\n\n""" - ret+=self.getRDF(urn="echo:collectionroot")+"\n" - - ret+="""""" - - return ret - def changeLabels(self): @@ -2365,15 +2304,6 @@ class ECHO_group(ECHO_collection): security.declareProtected('View','index_html') - def showRDF(self): - """showrdf""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - ret="""\n\n""" - ret+=self.getRDF(urn="echo:collectionroot")+"\n" - - ret+="""""" - - return ret def getRDF(self,urn=None): """rdf of the collection""" @@ -2820,15 +2750,6 @@ class ECHO_root(Folder,Persistent,Implic ) - def showRDF(self): - """showrdf""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - ret="""\n\n""" - ret+=self.getRDF(urn="echo:collectionroot")+"\n" - - ret+="""""" - return ret - def reloadMetaDataFromStorageWarning(self,RESPONSE=None): """warning"""