[Gelöst]BinaryReader

25. April 2023 13:59

Hallo,
ich versuche immer noch, ein PDF als Hintergrund/Wasserzeichen in einem RDLC-Report zu drucken.
Dabei bin ich auch auf diesen Link gestoßenhttps://stackoverflow.com/questions/37404789/display-blob-field-containing-text-in-rdlc-report-dynamics-nav
Ich wollte das dann sogleich ausprobieren, dummerweise finde ich den binary-Reader schlicht und ergreifend nicht, unter den Assemblys wird er mir nicht angezeigt. Oder wurde der durch etwas anderes ersetzt?
Muss der separat installiert werden? Die verwendete Navision-Version ist BC365 14.0.45810
Zuletzt geändert von FragenFrager am 27. April 2023 09:45, insgesamt 1-mal geändert.

Re: BinaryReader

25. April 2023 15:18

Hallo,

den Binray- Reader gibt es nur als Dotnet, und kostet damit Geld in neueren BC- Versionen, da der Code damit nicht CloudReady ist.

Aber in den Antworten steht doch schon einen Antwort ohne Binary Reader drin.

Gruß Fiddi

Re: BinaryReader

25. April 2023 15:31

Hallo Fiddi,
danke für die Info.
InStream (Variante 2) scheidet aus, da ich den in den DataItems nicht als Column angeben kann (oder doch?)
Die dritte Variante (BigText) würde ich nochmal ausprobieren.

Re: BinaryReader

25. April 2023 16:29

Hallo,
nStream (Variante 2) scheidet aus, da ich den in den DataItems nicht als Column angeben kann (oder doch?)


Was meinst du wie Bilder in den Report kommen?
Du musst den Stream in BC einfach nur Mime-encoden bevor du Ihn als ganz normales Textfeld an den Report übergibst. Im Report holst du dann - wie bei den Bildern - die Binärdaten wieder per Mime-decode wieder aus dem Text raus.

Gruß fiddi

Re: BinaryReader

26. April 2023 11:25

Habe ich versucht, bin wie folgt vorgegangen:

Code:
gtxWatermark   Text      
lrtTempBLOB   Record   TempBlob   
lisWatermark   InStream      

 IF lrtTempBLOB.Blob.HASVALUE THEN BEGIN
   lrtTempBLOB.CALCFIELDS(Blob);
   lrtTempBLOB.Blob.CREATEINSTREAM(lisWatermark,TEXTENCODING::UTF8);
   lisWatermark.READTEXT(gtxWatermark);   
 END;



Dann im RDLC Layout für BackgroundImage als Source Embedded angegeben und für Value den folgenden Ausdruck

Code:
=System.Convert.ToBase64String(Fields!gtxWatermark.Value)


klappt leider immer noch nicht, es wird kein Hintergrund angezeigt. Was mache ich falsch?

Re: BinaryReader

26. April 2023 13:20

Hallo,

ich gehe mal davon aus, das in deinem BLOB ein Bild ist. Dann solltest du beim BLOB nicht mit TETXENCODING arbeiten, dadurch wird das Bild nicht zu transportablem Text, sondern zu Kauderwelsch.
Die Daten aus dem nicht encodierten Blob.Stream müssen mit der Codeunit "Base64 Convert" in Base64 konvertiert werden, erst dann kannst du das als Text weitergeben.

Im Bericht musst du dann aus dem Base64 wieder dein Bild machen, das wird eher mit der Funktion
Code:
System.Convert.FromBase64String
funktionieren.

Gruß Fiddi

Re: BinaryReader

26. April 2023 14:53

Hallo Fiddi,
erstmal danke für die Infos.
Der Briefbogen ist ein PDF mit einem Firmenlogo rechts oben in der Ecke.
Ich habe meinen Code jetzt wie folgt geändert.

Code:
IF lrtTempBLOB.Blob.HASVALUE THEN BEGIN
    lrtTempBLOB.CALCFIELDS(Blob);
    gtxWatermark := lrtTempBLOB.ToBase64String;


Und im Design des Reports entsprechend:
Code:
=System.Convert.FromBase64String(Fields!gtxWatermark.Value)


Leider wird immer noch nichts angezeigt, egal, ob ich als Source Database (mit dem MIMEType image/bmp) oder Embedded angebe.
Vielleicht einmal zur Info, wenn ich das Firmenlogo (nur das Logo als PNG, nicht den Briefbogen) direkt im Feld 29 in der Tabelle 79 abspeichere, geht es, zumindest wird etwas ausgedruckt.
Nur, wenn ich zur Laufzeit das komplette PDF als BLOB in der TempBlob abspeichere, scheint es irgendwo auf dem Weg verloren zu gehen.

Ich habe dann noch versucht, mir den Inhalt des BLOBs nach dem CALCFIELDS hierüber auszugeben:

Code:
MESSAGE('%1',lrtTempBLOB.ToBase64String);


Es wird nur ein leeres Fenster angezeigt. Keine Ahnung, ob das mit der MESSAGE überhaupt gehen kann, den Trick habe ich hier geklaut
https://community.dynamics.com/nav/f/microsoft-dynamics-nav-forum/364294/convert-pdf-to-base64-using-outstream

Re: BinaryReader

26. April 2023 16:59

Hallo,

bei TempBlob (Tabelle) solltest du kein CalcFields machen, da du damit den Inhalt des Blobs löschst, weil er ja gar nicht gespeichert wurde, sondern nur durch die Gegend geschoben wird.

Ich fürchte aber, das du dann zwar Daten siehst, aber immer noch kein Wasserzeichen. Da für muss es sich zwingend um ein Image handeln (BMP/Jpeg/PNG)

Gruß Fiddi

Re: BinaryReader

27. April 2023 09:31

Hallo Fiddi,
das CALCFIELDS habe ich jetzt weggelassen und mir den Inhalt des BLOBs parallel zum Ausdruck per MESSAGE ausgeben lassen. Dort sehe ich die Daten, der Hintergrund beim Ausdruck bleibt jedoch immer noch penetrant weiss. :?: :-(
Aber okay, ich halte für mich fest, dass es unter RDLC anscheinend nicht so ohne weiteres möglich ist, ein PDF als Briefpapier zu hinterlegen.
Danke trotzdem für die Tipps und Hinweise.

Re: BinaryReader

27. April 2023 11:09

Hast du mal probiert das PDF in ein Image umzuwandeln (BMP/Jpeg/PNG) und dieses im "Blob" zu hinterlegen? :shock:

Re: [Gelöst]BinaryReader

27. April 2023 11:17

Nein, habe ich nicht. Ich habe nach einer Möglichkeit gesucht, ein PDF in ein Image umzuwandeln und bin auf diesen Beitrag gestoßen:

https://community.dynamics.com/ax/f/microsoft-dynamics-ax-forum/242173/convert-pdf-as-image/938625

Demnach geht es nur mit 3rd-Party-Tools und/oder viel Programmierarbeit. Dann kann ich den Report aber auch gleich in ForNav konvertieren, damit lässt sich auch ein PDF hinterlegen.
Vielleicht mal zur Erklärung, wir haben diverse Custom-Reports, alle ForNav-konvertiert. Für die ist das Briefpapier als PDF hinterlegt, was ja auch problemlos geht.
Nun sollte aber auch für die Gelangensbestätigung (Standard-Report 780) dieses Briefpapier als Hintergrund erscheinen. Dieser Report hat jedoch noch RDLC-Layout.
Nach langem hin- und her bin ich mit der Projektleitung übereingekommen, eine Kopie von der Gelangensbestätigung zu erstellen, diese ForNav zu konvertieren und dann anstelle von Report 780 einzubinden.

Re: [Gelöst]BinaryReader

27. April 2023 12:35

Aber das umwandeln ist doch ein einmaliger Vorgang, dazu kann doch z.B. ein online Tool wie https://pdftoimage.com/de/ verwendet werden. Dann hast du das Briefpapier als Image und kannst es in ein "Blob" Feld speichern.

Re: [Gelöst]BinaryReader

27. April 2023 13:02

danke für die Info, ich werd's ausprobieren.