Summary
Using SVG for charting purposes is gratifying. Both completely new kinds of charts and those resembling the obsolete CT Chart Array-command. Besides enhancing the chart-capabilities another requirement was to include the customers-logo as part of the chart. First I thought about parsing that logo.svg … sounds like too much work.
Histogramme und Business-Graphik in SVG zu erstellen führt zu guten Ergebnissen. Einerseits sollte der obsolete CT Chart Array-Befehl ersetzt werden, andererseits komplett fachspezifische Chart-Typen möglich machen. Eine Anforderung war, das Logo des Kunden in den Chart einzubetten. Erst dachte ich, das Logo.svg zu parsen … doch hört sich das nach zu viel Arbeit an.
Oct 24, 2017: resulting images added
$svgPictureRef:=SVG_New_embedded_image ($svgCopyrightLayer_Ref;$interPicture)
funktioniert, doch erzeugt es ein zu gering aufgelöstes PNG im SVG.
Danach experimentierte ich mit dem definierten Codec „svg“
$svgPictureRef:=SVG_New_embedded_image ($svgCopyrightLayer_Ref;$interPicture;5;0;“svg“)
Kam nichts bei raus.
Glücklicherweise habe ich den Source als Handbuch zur Hand. Mit Codec ist eigentlich die Extension gemeint, also „.svg“. Diese Zeile Code
$svgPictureRef:=SVG_New_embedded_image ($svgCopyrightLayer_Ref;$interPicture;5;0;“.svg“)
liefert genau was ich will: 4D kann das SVG im SVG rendern.
Alle anderen SVG-Renderer scheitern am base64-codierten SVG im SVG. Mich stört das nicht, solange 4D hochauflösende JPEG und PNG aus dem SVG erzeugt.
$svgPictureRef:=SVG_New_embedded_image ($svgCopyrightLayer_Ref;$interPicture)
results in a low-resolution PNG inside the SVG.
Next I tried the defined codec-option „svg“
$svgPictureRef:=SVG_New_embedded_image ($svgCopyrightLayer_Ref;$interPicture;5;0;“svg“)
to no avail.
Finally I checked my manual of the source. Actually codec means extension, ergo „.svg“. This line of code
$svgPictureRef:=SVG_New_embedded_image ($svgCopyrightLayer_Ref;$interPicture;5;0;“.svg“)
delivers what I was looking for: 4D renders SVG inside SVG perfectly well.
All other SVG-renderer fail to render the base64-encoded SVG inside a SVG. Doesn’t bother me, as long as 4D delievers high-resolution JPEG and PNG from that kind of SVG.
Result-Images
I ran the code 4 times using these extensions: .svg
, svg
, .png
, png
as codec-parameter to SVG_New_embedded_image. Then I exported the picture containing the SVG into JPEG, which is another story. Finally I open the jpegs using GraphicConverter, enlarged to 400%, shot screenshots and cut the same small peace out of every screenshot.
Here are the JPEG-results at 300 dpi * for comparison:
first what’s all about: send „.svg“-extension as codec to SVG_New_embedded_image
second what seemed obvious at first place: send „.png“-extension as codec to SVG_New_embedded_image
just for the sake of completeness: send any codec, both „svg“ and „png“ to SVG_New_embedded_image
Yes, just an empty white area and I didn’t include the other one.
* wouldn’t have made sense to use the SVG, as no other SVG-renderer than 4D renders embedded, base64-encoded SVGs at all. ↵