Ein Hallo in die Runde. In unseren Anwendungen haben wir .ll Dateien, die wir je nach Situation gerne noch nachträglich modifizieren würden. Also z.B. wird die Datei nicht modifiziert, wenn Sie gedruckt wird, jedoch soll eine Grafik eingebaut werden, wenn Sie in ein PDF konvertiert (via LlStgsysConvert) wird. Beim flüchtigen lesen der Doku dachte ich das Problem via Metafilemanipulation lösen zu können, aber das ist wohl ein Irrtum. Die Hoffnung stirbt ja bekanntlich zuletzt und vielleicht hat ja jemand eine Idee … ?
Gruß, Lars
Naja, das mit dem Metafile ist schon OK, denn die einzelne Seiten sind EMF-Dateien… aber wenn Du nicht grad LL_OPTION_COMPRESSSTORAGE auf 0 gesetzt hast, siehst Du nicht viel davon im Stream, und wenn das auf 0 ist, sind die LL-Dateien ziemlich viel größer…
Idee (keine Ahnung ob’s geht):
LlStgsysStorageOpen()
LsConversionJobOpen(,,"PDF")
for (page = 1; page <= LlStgsysGetPageCount(); ++page)
{
HENHMETAFILE hEMF = LlStgsysGetPageMetafile()
// ... modifiziere EMF-Daten
LsConversionConvertEMFToFile(hEMF)
}
LsConversionJobClose()
LlStgsysStorageClose()
Ich drücke Dir die Daumen!
Paulchen
Vielen Dank schon einmal!
Das ist ja mal eine Spur, die Funktionen LsConversionXXX kannte ich vorher nicht und wenn ich es richtig sehe, schweigt sich die Programmierer-Referenz dazu aus.
Ein erster schneller Test ergab, das LsConversionConvertEMFToFile, wie der Name impliziert, eine EMF Datei nimmt und konvertiert. Wenn man nun über alle Seiten einer .LL Datei iteriert und immmer LsConversionConvertEMFToFile mit dem jeweiligen PageMetafilehandle aufruft hat man eine Datei mit der letzten Seite.
Immerhin etwas und eine Idee wäre die einzelnes Pages zu einem großen Metafile zusammenzubauen und dabei die modifikationen vorzunehmen. Da das alles Neuland für mich ist, hilft wohl nur viel Doku lesen. Auch mit den Begriffen “Stream” kann ich in diesem Kontext noch nichts anfangen, habe aber die entsprechende Funktionen gefunden.
Gruß, Lars
Schade, daß nur eine Seite rauskommt… war nur eine Idee… vielleicht doch besser über combit?
Wichtig: Logging einschalten (LsSetDebug() oder LlSetDebug(LL_DEBUG_CMBTLS). Und DEBWIN laufen lassen. Vielleicht ist ein Parameter falsch?
Und ich vergaß: am Ende in der Schleife sollte man LlStgsysDestroyMetafile() benutzen, um das EMF freizugeben.
Die API kann man im Header-File finden, sozusagen ein Hobby von mir, wenn’s eine neue Version gibt. Sicher “subject to change” etc. wie bei Microsoft auch, aber das muß einen ja nicht abhalten.