Thumb-Katalog erstellen
Verfasst: So, 21.06.2009 07:19
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:
Unterprogramme und Funktionen:
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:
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
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

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.