ReportLab: Dateien löschen nach pdf Erstellung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gopfish
User
Beiträge: 14
Registriert: Mittwoch 24. Oktober 2007, 16:45

Hi,

erstmal sorry für den Titel aber wusste nicht wie ichs besser kurz zusammenfassen könnte :?

Ich habe folgendes Problem:
Ich erstelle eine art Report-Datei als pdf die mir Messergebnisse auswertet. Hierfür werden unter anderem Grafiken mit matplotlib erstellt und gespeichert die ich dann in Tabellen (zwecks Anordnung nebeneinander) in die pdf -Datei einbinde.

Nachdem ich mein pdf erstellt habe will ich nun die gespeicherten Grafiken wieder löschen, da ich sie nicht nochmal extra brauche (sind ja nun in der pdf-Datei).
Ich erhalte aber einen Fehler für die Grafiken in der letzten Tabelle die erstellt wird: Error: [Errno 13] Permission denied: 'rta_cpu@TASK_P_1MS_rt.png'
Wenn ich die Erstellung des pdf auskommentiere. Also das "report.build(data)" dann löscht er alle Grafiken ohne zu meckern.
Es scheint also, dass der build befehl von ReportLab.platypus die Grafiken der letzten Tabelle noch irgendwie besetzt. Auch wenn die Tabbelle nicht das letzte Element in dem pdf ist.

Hatt vielleicht irgendjemand hier eine Idee wie ich die Grafik-Dateien freigeben kann um sie gleich mit den anderen zu löschen???
Danke schomal für jeden hilfreichen Tipp.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Da hält wohl Reportlab irgendwelche Referenzen offen und du nutzt Windows (denn unter Linux kannst du geöffnete Dateien durchaus löschen). Du solltest mal versuchen die PDF generierung komplett abzuschließen, dann müsste Reportlab die Referenzen fallen lassen (persönlich habe ich Reportlab vor längerer Zeit durch pdfLaTeX ersetzt). Am besten du zeigst auch ein wenig relevanten Code.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gopfish
User
Beiträge: 14
Registriert: Mittwoch 24. Oktober 2007, 16:45

So ... nach einiger abwesenheit wieder da :?

Also ich wüsste jetzt nicht wie ich die PDF erstellung noch weiter abschließen sollte :(

Hier mal ein wenig Code:

Code: Alles auswählen

a = lst.append
Pics = []
		
		#Write Details
		for task in tasks:
       ... bisschen anderer code ...			
			#Add Images
			ImageS = (self.CreateImages(task, graphsettings))
			
			if len(ImageS) > 0:
				for i in ImageS:
					Pics.append(i)
				ImgTableData = []		
				for i in range(0,len(ImageS),2):
					TmpData = []
					IMG = Image(ImageS[i], width = 8*cm, height = 6*cm)
					TmpData.append(IMG)
					try:
						IMG = Image(ImageS[i+1], width = 8*cm, height = 6*cm)
						TmpData.append(IMG)
					except:
						pass
					ImgTableData.append(TmpData)
				
				Widths = [8.1*cm, 8.1*cm]
				Heights = []
				for w in ImgTableData:
					Heights.append(6.1*cm)  
						
				ImgTable = Table(ImgTableData, colWidths = Widths, rowHeights = Heights)
				
				a(ImgTable)
			
			a(Spacer(0.5*cm, 0.5*cm))
			a(CondPageBreak(5*cm))
		
		#create PDF
		rep.build(lst)
	
		#delete Images
		for i in Pics:
			os.remove(i)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Gopfish hat geschrieben:Also ich wüsste jetzt nicht wie ich die PDF erstellung noch weiter abschließen sollte :(
Indem du ``save()`` aufrufst, wie in der Dokumentation beschrieben, nehme ich mal an.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gopfish
User
Beiträge: 14
Registriert: Mittwoch 24. Oktober 2007, 16:45

save() ist doch nur für Canvas Objekte oder? Die nutze ich ja nicht.
Ich machs mit SimpleDocTemplate und das hat kein save() attribut.
Gopfish
User
Beiträge: 14
Registriert: Mittwoch 24. Oktober 2007, 16:45

Ich bin jetzt ein wenig weiter gekommen, wobei mir das Ergebnis total unschlüssig vorkommt.
Ich habe den letzten 'ImgTable' und 'ImgTableData' nun vor dem build einfach mit anderen Daten überschrieben um ggf die Referenzen freizugeben.
Nun bleiben mir statt 4 Images noch 2 übrig die er nicht löschen kann.
Hat irgendwer noch ne Idee dazu??

Gibts vielleicht eine möglichkeit die Dateien unter Windows irgendwie "gewaltsam" zu löschen auch wenn sie benutzt werden?
Antworten