Übergabe Bild über DotNet an Word?

4. August 2015 11:50

Hallo Zusammen.

Hat es von Euch jemand fertig gebracht über den Datentyp DotNet ein Bild aus NAV an Word zu übergeben?

Ich operiere hier mit der DotNet Variable "Microsoft.Office.Interop.Word.Range.'Microsoft.Office.Interop.Word, Version=15.0.0.0".
Für alle Arten von Text funktioniert der nachfolgender Code auch:

Code:
 
FOR c := 1 TO Qty DO BEGIN
      WordFields := WordDocument.Fields;
      WordRange := WordFields.Item(c).Result;

      ArrFieldnames[c] := DELCHR(WordRange.Text,'<>','<>');
      ArrFields[c] := GetMailMergeFields(parMailMergeData."Data Field No.",ArrFieldnames[c],parMailMergeData."Root Data No.");
      WordFields := WordDocument.Fields;
      WordRange := WordFields.Item(c).Result;
      WordRange.Text := ArrFields[c];
END;

GetMailMergeFields(parMailMergeNo : Integer;parFilename : Text;parRootNo : Code[20]) : Text[1024]
WordFieldManagement.RESET;
WordFieldManagement.SETCURRENTKEY("Data Field No.","Field Name");
WordFieldManagement.SETRANGE("Data Field No.",parMailMergeNo);
WordFieldManagement.SETRANGE("Field Name",parFilename);
IF WordFieldManagement.FINDFIRST THEN
  EXIT(WordFieldAutomation.GetFieldValue(WordFieldManagement,parRootNo)); //hier wird über eine RecRef der Datensatz geholt


Jetzt ist bloß die Frage, wie ich die Bilder aus der DB raus bekomme, jmd. ne Idee?

Gruß,
Mr.Nav.

Re: Übergabe Bild über DotNet an Word?

4. August 2015 12:38

Ich denke, dass du das übers Streaming löst.
Vielleicht steckt hier schon die nötige Inspiration: http://nav-magno.be/2015/06/resize-image-using-dotnet/

Re: Übergabe Bild über DotNet an Word?

4. August 2015 13:45

Hallo Natalie,

danke für den Link.

Wenn ich das richtig verstehe wird über den Stream eine Datei erzeugt, die ich dann über Hyperlink im Word abrufen könnte, richtig?

Gibt es evtl. noch eine andere Möglichkeit in DotNet ein Blob Feld zu übertragen?
Wie geht NAV denn vor, wenn ich im Report (RDLC) ein Bild habe und danach auf "Sende an Word" gehen??

Da müsste es doch interne Umsetzungen geben, oder?

Danke und Gruß,
Mr.Nav

Re: Übergabe Bild über DotNet an Word?

14. August 2015 15:40

Hallo Zusammen.

Bei mibuso habe ich noch einen Ansatz gefunden:

Code:
LOCAL PROCEDURE GetItemPicture@1000000026(ItemNo@1000000005 : Code[20];VAR Picture@1000000006 : BigText);
VAR
Item@1000000007 : Record 27;
IStream@1000000004 : InStream;
MemoryStream@1000000003 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.MemoryStream";
Bytes@1000000001 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array";
Convert@1000000000 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Convert";
BEGIN
//**
// Function to convert a blobfield to a BigText base64 encoded string.
//*

Item.GET(ItemNo);
Item.CALCFIELDS(Picture);
IF NOT Item.Picture.HASVALUE THEN
EXIT;

Item.Picture.CREATEINSTREAM(IStream);
MemoryStream := MemoryStream.MemoryStream();
COPYSTREAM(MemoryStream, IStream);
Bytes := MemoryStream.GetBuffer();
Picture.ADDTEXT(Convert.ToBase64String(Bytes));
END;


Jetzt wäre nur noch die Frage wie ich die Funktionalität "Picture.ADDTEXT(Convert.ToBase64String(Bytes));" so umsetzte, dass Word erkennt hier ist ein Bild.

Mache ich es nach obiger Vorgehensweise bekomme ich logische Weise Buchstaben/Zahlen Kauderwelsch :mrgreen:

Jemand ne Idee wie ich Word über DotNet sage, dass er die Bytes als Bild darstellt?

THX im Voraus.