Seite 1 von 1

Thumb-Katalog erstellen

Verfasst: So, 21.06.2009 07:19
von saturus
Hallo,

ich suche schon lange ein Programm, was nach Eingabe eines Startverzeichnis dieses und alle Unterverzeichnisse durchforstet und die enthaltenden Bilder geordnet nach Verzeichnisse als Thumbs als PDF ausgibt. Bisher bin ich nicht fündig gewurden. Daher habe ich mich entschlossen es selbst mit Hilfe vom OpenOffice 3 umzusetzen.

Hier mein bisheriger Code:

Hauptprogramm:

Code: Alles auswählen

Private oDocument, oTxtRange As object
Private Bildnummer as integer
Private Liste(100000) as string
Private MaxGroesse as integer

Sub Main
	REM Rahmenbedingungen
	
	MaxGroesse = 4500
	
  	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	
	Dim Zaehler as integer
	Dim oViewC as Object, sText as String
	Dim VerzeichnisAlt,VerzeichnisNeu,VerzeichnisTemp as string
	
	REM Leeres Dokument erzeugen
		
	LeeresDokument  																					
	
	erg=getDirs(liste(),0,"C:\Users\Public\Pictures\2009\02\")
	
	VerzeichnisAlt = ""
	
	for Zaehler = 0 to (erg - 1)
		VerzeichnisTemp = ConvertFromURL(Liste(Zaehler))
		
		VerzeichnisNeu = DirectoryNameoutofPath(VerzeichnisTemp,"\")
		
		If VerzeichnisNeu = VerzeichnisAlt then
			GrafikEinfuegen(Liste(Zaehler))
		else 
			oViewC = oDocument.getCurrentController().getViewCursor()
			oDocument.getText().insertString(oViewC, chr(13) & VerzeichnisNeu & chr(13), False)
			
			GrafikEinfuegen(Liste(Zaehler))
		end if
		
		VerzeichnisAlt = VerzeichnisNeu
		 
	next Zaehler
	
end sub
Unterprogramme und Funktionen:

Code: Alles auswählen

Sub LeeresDokument
	Dim mArgs()
	oDocument = StarDesktop.loadComponentFromURL ("private:factory/swriter","_blank",0,mArgs())
	oDocument.title = "Katalog"
	
	REM Neues Dokument geöffnet
End Sub

function getdirs( liste(),z, folder) as integer
   sFolderUrl = ConvertToUrl( Folder )
   oSimpleFileAccess = createUnoService( "com.sun.star.ucb.SimpleFileAccess" )
   aFolders = oSimpleFileAccess.getFolderContents( sFolderUrl,true )
   For i = LBound( aFolders ) To UBound( aFolders )
     sFile = aFolders( i )
     
     Endung = lcase(right(sFile,4)) 
     If oSimpleFileAccess.isFolder( sFile ) Then
        getdirs( liste(),z, sFile)
     Else
     	if Endung = ".jpg" then
        	liste(z) = sFile	
       	 	z = z + 1
       	end if
     end if  
   next i      
   getdirs = z
end function

Sub GrafikEinfuegen(sURL) as String
	Dim oGrafik,_
		oDrawpage,_
		oBitMapGr as Object
	
	Const tpm = 0.017636684
	
	

	oDrawPage = oDocument.getDrawpage()
	
	oTxtRange = oDocument.text.getEnd()
	
	oGrafik = oDocument.createInstance("com.sun.star.drawing.GraphicObjectShape")
	
	oGrafik.GraphicURL = sURL
	
	oDocument.Text.insertTextContent(oTxtRange, oGrafik, False)
	
	oGrafik.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
	
	Dim oGrafGr as new com.sun.star.awt.Size
	
	oBitmapGr = oGrafik.GraphicObjectFillBitmap.GetSize
	
	if oBitMapGr.width > oBitMapGr.height then
		REM Querformat
		IstGroesse = oBitMapGr.width * TwipsPerPixelY * tpm * 100
		Faktor = MaxGroesse / IstGroesse
	else
		REM Hochformat
		IstGroesse = oBitMapGr.height * TwipsPerPixelX * tpm * 100
		Faktor = MaxGroesse / IstGroesse	
	end if
		
		
	
	oGrafGr.height = oBitMapGr.height * TwipsPerPixelX * tpm * 100 * Faktor
	oGrafGr.width = oBitMapGr.width * TwipsPerPixelY * tpm * 100 * Faktor
	
	oGrafik.setSize(oGrafGr)
	oGrafik.Opaque = true
	

End Sub
Bei der Erstellung hat mir Euer Forum bisher sehr weit geholfen. Danke erst einmal! Der Code ist auch noch nicht sauber, aber zum Probieren reicht es erst einmal. :)

Nun habe ich ein paar Fragen:
  • Gerne würde ich die Bilder verkleinern, damit die Datei bei der Erstellung nicht ins unermessliche wächst. Bei einem Testdurchlauf hatte OpenOffice im Arbeitsspeicher mehr als 1 GByte(!) verbraucht.
  • Kann es sein, dass sich manuell eingefügte Bilder in OpenOffice anders verhalten als welche aus meinen o. g. Macro. Das Kontext-Menü sieht ganz anders aus. Die Bilder sollen einen grauen, dünnen Rahmen bekommen und auch einen Abstand zum Nachbarobjekt. Das habe ich noch nicht hinbekommen.
Vielen Dank schonmal für die Hilfe.

Re: Thumb-Katalog erstellen

Verfasst: So, 21.06.2009 15:01
von komma4
* je nach Einstellung und Betriebssystem sind 1 GB "normal", da komme ich schon mit ein paar Dokumenten und ein paar geladenen Makros hin. 8)

* der "\" im Code deutet auf Windows hin, und da sage ich mal nix zur Speicherverwaltung (XP, Vista?) - oder zum Compiler.

* schon mein Betriebssystem erstellt aus Verzeichnissen HTML-Seiten mit Beschreibungen und Thumbnails, für Windows gibt es das besimmt auch. Wenn Du unbedingt PDF möchtest ...


Wenn Du das Ganze als Übung ansiehst:
meinst Du nicht, dass der Nutzer neben den Bildern auch weitere Infos (Name, Ort, Datum) gebrauchen könnte?
Wäre die Platzierung in einer Tabellenform nicht besser?

Viel Erfolg!

Re: Thumb-Katalog erstellen

Verfasst: Mo, 22.06.2009 07:43
von saturus
Hallo,

vielen Dank für die schnelle Antwort!

Leider bin ich unter Windows noch nicht fündig gewurden! Ob HTML oder PDF ist erstmal egal, jedoch fehlt bei allen Programmen, die ich gefunden habe, die optische Trennung nach Verzeichnissen.

Ich wollte auf Tabellen verzichten, da man so den Platz optimierter nutzen kann (Hochformat-Bilder sind schmaler als Querformat, also kann es gut sein, dass anstatt 4 Bilder pro Zeile 6 gehen).

Die weiteren Informationen unter den Bildern wäre der nächste Schritt gewesen, wenn der Rest seit passt.

Das Speicherproblem dürfte auch Linux in die Knie zwingen. OpenOffice importiert die Bilder in voller Auflösung, um den Nutzer immer noch die Möglichkeit zu geben, die Bildgröße nach oben hin seinen Wünschen anzupassen. Nur bei der Ausgabe als PDF werden die Bilder auf die nötige Größe runter gerechnet.