SVG-Datei durch HTML-Formular anpassen

HanZ

Aktiver NGBler
Registriert
16 Juli 2013
Beiträge
997
Hallo zusammen,

ich habe hier eine SVG-Datei erstellt, die ich gerne je nach Eingabe eines Formulars auf einer Webseite verändert haben möchte und dann idealerweise als PDF oder PNG exportiert und dieses dem Nutzer zum Download anbieten möchte.
Der zu ändernde Bereich sieht wie folgt aus ("000" soll geändert werden):
[src=html4strict]<text
transform="matrix(1.3562 0 0 1 209.8261 165.4809)"
class="st8 st11"
id="text1064">000</text>[/src]


Aktuell habe ich auch bereits ein Python-Skript, dass die Angaben per sys.argv[] ausliest und via BeatifulSoup entsprechend einfügt. Das funktioniert auch alles. Der Plan war jetzt das Python-Skript via PHP aufzurufen und dann die SVG/PDF/PNG zum Download anzubieten.
Python kenne ich recht gut, PHP eher weniger, daher der Schritt das alles mit dem Python-Skript zu erledigen.

Wie man ein Python-Skript per PHP aufruft wird ja im Netz zur genüge erklärt; leider klappt das bei mir nicht: Der Quelltext ist leer.

Aktuell habe ich es damit ausprobiert:

[src=php]$command = escapeshellcmd('python svg.py $GET_PARAM0 $GET_PARAM1 usw.');
$output = shell_exec($command);
echo $output;[/src]

Aktuell führt das Python-Skript am Ende ein print() aus mit dem Inhalt der SVG-Datei; da hatte ich gedacht, dass das von PHP dann übernommen wird und ausgegeben wird. Hier wäre dann generell noch die Frage, wie ich das am besten übergebe?

Oder fabriziere ich hier gerade Murks und ich sollte das am besten mit PHP alles machen?

Die SVG enthält halt noch 2 Schriftarten, die in dieser Optik auch genau so benötigt werden. Daher der Plan des Exportes als PDF oder PNG.

LG
HanZ
 
Versuch mal:
[src=php]passthru('python svg.py '.escapeshellarg($_GET[...]).' '.escapeshellarg($_GET[...]));[/src]

Falls das nicht funktioniert, schau mal ob du damit eine Fehlermeldung im HTML-Code der Seite finden kannst:
[src=php]passthru('python svg.py '.escapeshellarg($_GET[...]).' '.escapeshellarg($_GET[...]) . ' 2>&1');[/src]

Wenn der Code aber wirklich so simpel ist wie im Beispiel kann man das auch schnell in PHP machen:
Das Template in [kw]xyz.svg.php[/kw] umbenennen, statt [kw]000[/kw] sowas wie [kw]<?= htmlentities($_GET['...']) ?>[/kw] schreiben, und am Ende entweder direkt aus dem Browser aufrufen oder mit [kw]<?php include('xyz.svg.php') ?>[/kw] inline einbinden.

Um svg in png zu konvertieren könnte man bspw. ImageMagick nutzen - sprich die Ausgabe des Python-Scripts einmal durch [kw]convert[/kw] pipen.
Wenn man direkt PHP nutzt muss man evtl mit der ImageMagick-Erweiterung von PHP spielen (von ):
[src=php]$im = new Imagick();
$im->readImageBlob($svg);

/*png settings*/
$im->setImageFormat("png24");
$im->resizeImage(720, 445, imagick::FILTER_LANCZOS, 1); /*Optional, if you need to resize*/

// Entweder speichern
$im->writeImage('/path/to/colored/us-map.png');/*(or .jpg)*/
// Oder direkt ausgeben
header('Content-Type: image/'.$im->getImageFormat());
echo $im;

$im->clear();
$im->destroy();[/src]
 
  • Thread Starter Thread Starter
  • #3
Danke für deine Antwort. Ich merk schon, dass PHP nicht mein Fachgebiet ist :D Mit 2>&1 konnte ich einige Fehler beseitigen wie falsche Dateirechte und so weiter. Jetzt geht das mit der Ausgabe.
Der Tipp mit der .svg.php klingt aber sehr spannend, ich denke damit werde ich mich eher noch beschäftigen, sieht nach einer schönen Lösung aus.

Wenn das dann alles klappt, beschäftige ich mit ImageMagick :)
 
  • Thread Starter Thread Starter
  • #4
So, wollte mich jetzt mit Imagick beschäftigen. Ich stoße jetzt aber auf das Problem, dass das SVG immer ausgegeben wird. Das Python-Skript printed das SVG auf die Konsole. In der PHP-Datei steht am Ende lediglich folgendes:

[src=php]<?php
putenv("PYTHONIOENCODING=utf-8");
$command = passthru('python3 svg_to_pdf.py ...');
$svg = shell_exec($command);

//generate png from svg and save to forum
$im = new Imagick();
$im->readImageBlob("output.svg");

/*png settings*/
$im->setImageFormat("png24");
$im->resizeImage(720, 445, imagick::FILTER_LANCZOS, 1); /*Optional, if you need to resize*/


$im->writeImage('test.png');/*(or .jpg)*/

echo '<img src="data:image/jpg;base64,' . base64_encode($im) . '" />';

$im->clear();
$im->destroy();
?>[/src]

Hier ist also gar kein [src=php]echo $svg;[/src] dabei. Der print() in Python reicht scheinbar aus, dass PHP das direkt mit ausgibt. Wie umgehe ich das?

Vorher weiß ich ja gar nicht, ob das mit dem Bild immer klappt, da jedesmal das SVG angezeigt wird.

LG
HanZ

/edit: Aktuell bietet er mir zwar ein .png zum Download an, aber das hat den Inhalt des .svg. Also irgendwie will er zwanghaft dieses SVG übergeben als Quelltext.
 
Zuletzt bearbeitet:
passthru gibt direkt aus. Nur shell_exec sollte reichen.
Ansonsten liest du dein svg in $svg, konvertierst danach aber output.svg.
 
  • Thread Starter Thread Starter
  • #6
Danke für den Hinweis mit passthru. Das klappt jetzt.

Das mit dem output.svg war bewusst so, die Datei hat existiert. Ich denke aber, dass ich es mit Imagick leider nicht umsetzen kann, da dessen Installation auf meiner Synology wohl nicht möglich/einfach ist. Ich werde mir also wohl erstmal andere Wege suchen. Habe noch das hier gefunden, damit werd ich mal rumspielen:


--- [2020-08-22 18:06 CEST] Automatisch zusammengeführter Beitrag ---

So, es klappt jetzt alles, bis auf eine Sache: Ich würde gerne nach Abschicken des Formulars das Bild direkt zum Download anbieten und nicht in einer neuen Seite das Bild einblenden. Derzeit wird es als SVG in einem Javascript-Code zu einem Canvas umgewandelt und als Bild im Browser dargestellt.

Das ist der Javascript-Code im Browser. Wenn ich das hinzufüge:
[src=php]header("Content-Disposition: attachment; filename=image.png");[/src]

dann lädt er mir leider den Webseiteninhalt als .png-Datei runter.

[src=javascript]<script type="text/javascript">
var svgData = `<?php echo $svg ?>`;

var canvas = document.createElement("canvas");
canvas.width = 800;
canvas.height = 800;
var ctx = canvas.getContext("2d");

//display image
var img = document.createElement( "img" );
img.setAttribute("src", "data:image/svg+xml;base64," + btoa(svgData));


img.onload = function() {
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);

//image link
console.log(canvas.toDataURL("image/png"));


//open image (not working in chrome)
window.location.href=canvas.toDataURL("image/png");
};
document.body.appendChild(canvas);
</script>[/src]
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #7
Keiner eine Idee, wie ich das Canvas direkt als Bild herunterladen lassen kann? :/
 
So als Idee, warum verweist du nicht auf die gerenderte Image Datei:

[src=php]$im->writeImage('test.png');/*(or .jpg)*/

# Und dann so etwas wie? :
header("Location: test.png");

# bzw. einen korrekten Header liefern das es sich um ein Bild handelt was zurückgegeben wird
$im = file_get_contents('test.png');
header('content-type: image/png');
echo $im;
[/src]

Quelle:


Oder willst du das Bild erst runterladen lassen, nachdem es auf dem Canvas gerendert und sichtbar ist?
 
Zuletzt bearbeitet:
@theSplit: Er muss das Bild erst von svg nach png umwandeln, dazu fehlt bei ihm aber die Imagemagick-Php-Erweiterung.

@Hanz: check mal ob du das "normale" ImageMagick installiert bekommst, das scheint laut Google nicht schwer zu sein. Wenn du "convert" ausführen kannst könnte man damit was bauen.
Falls du bei Javascript bleiben willst könnte man versuchen den Inhalt des Canvas in einen "Blob" zu bekommen, die lassen sich dem User als Download präsentieren. Allerdings meine ich mich zuerinnern, dass "Canvas auslesen" relativ unbeliebt war, seit mal Leute damit eine Tracking-Methode gebaut haben.
 
  • Thread Starter Thread Starter
  • #10
Wie Rakorium schon schreibt, habe ich leider kein ImageMagick für PHP.

Genau genommen wäre es mir sogar am liebsten, wenn das Canvas nicht angezeigt wird, dann muss ich auch nicht zwangsläufig das SVG veröffentlichen.

@Rakorium: Im paketzentrum von der Synology gibt es eine ImageMagick Erweiterung, die glaube ich für (nur) für die Konsole ist. Dort kann ich auch convert ausführen.

Das Problem ist jedoch, dass glaube alle Bibliotheken o.ä. Probleme damit haben, eingebettete (@font-face {}) Schriftarten mitzukonvertieren. Das hat bis jetzt nur über Canvas funktioniert.
Ich bin eigentlich offen, wie das funktioniert. Am liebsten wäre mir ein PDF, damit auch die Größe des Bildes direkt richtig ausgedruckt werden kann; aber eben auch hier das Problem, dass die eingebettete Schriftart erhalten bleiben muss.
 
Zuletzt bearbeitet:
Kann sein dass du die in der svg vorhandenen Schriftarten auf dem Gerät installieren musst. Ich wüsste nicht dass Schriften in SVGs eingebettet werden können.
[kw]convert -list font[/kw] zeigt dir welche Fonts bekannt sind (und auch wo die liegen, evtl kannst du die passenden Fonts googeln und in den Ordner schieben).
 
  • Thread Starter Thread Starter
  • #13
Im Artikel:
(Updated) Read at the end of article. After many tests, I was unable to install the missing imagick extension.

Da kommt leider nur folgende Fehlermeldung:
Code:
Expand Collapse Copy
"Fontconfig error: Cannot load default config file
convert: UnableToOpenConfigureFile `type.xml' @ warning/configure.c/GetConfigureOptions/677."

Ich wüsste nicht dass Schriften in SVGs eingebettet werden können.
Erstaunlicherweise können das die meisten Softwares nicht (Inkscape auch nicht), im Browser geht es aber.
 
Du generierst das svg selber, oder? Falls das nicht zu privat ist, kannst du mal ein (evtl gekürztes) Beispiel posten?
 
  • Thread Starter Thread Starter
  • #15
Ich habe dir die Webseite per PN geschickt.

Für alle anderen, hier das SVG:

[src=xml]<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="ausstattungsaufkleber"
viewBox="0 0 243.78 238.11"
style="enable-background:new 0 0 243.78 238.11;"
xml:space="preserve"
height="84mm"
width="86mm">
<defs
id="defs3">
<style
type="text/css"
id="style2">
.st0{fill:#FFFFFF;}
.st1{font-family:TEXT;}
.st2{font-size:7.841px;}
.st3{font-size:8.307px;}
.st4{font-size:7.8304px;}
.st5{font-size:8.3534px;}
.st6{font-size:8.5877px;}
.st7{font-size:8.1725px;}
.st8{font-family:DOT;}
.st9{font-size:16.7099px;}
.st10{font-size:16.2547px;}
.st11{font-size:8px;}
@font-face {
font-family: DOT;
src: url(hier die schriftart in base64, ist zu lange für den beitrag)
}
</style>
</defs>

<rect
rx="3mm"
ry="3mm"
width="86mm"
height="84mm"
style="fill:#fff;stroke:#000000;stroke-opacity:1;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none"
id="rect1"
x="0"
y="0" />

<text
transform="scale(0.80026889,1.24958)"
class="st1 st2"
id="text101"
x="7.6186576"
y="24.725174"
style="font-size:8.25484085px;font-family:TEXT;stroke-width:1.05277908">FAHRZG. - IDENT-NR.</text>







<text
transform="scale(0.78326421,1.2767084)"
class="st1 st2"
id="text102"
x="7.8114839"
y="32.952709"
style="font-size:8.0794363px;font-family:TEXT;stroke-width:1.03040886">VEHICLE - IDENT - NO.</text>







<text
transform="scale(0.78114919,1.2801652)"
class="st1 st3"
id="text103"
x="9.2828522"
y="50.002277"
style="font-size:8.53649426px;font-family:TEXT;stroke-width:1.02762651">TYP / TYPE</text>







<text
transform="scale(0.79936933,1.2509862)"
class="st1 st4"
id="text104"
x="9.7211933"
y="114.98202"
style="font-size:8.2344141px;font-family:TEXT;stroke-width:1.05159557">MOTORKB. / GETR. KB.</text>







<text
transform="matrix(0.76441451,3.658034e-4,-5.53567e-4,1.3081905,0,0)"
class="st1 st5"
id="text105"
x="10.195369"
y="118.57578"
style="font-size:8.40027714px;font-family:TEXT;stroke-width:1.00561178">ENG.CODE / TRANS. CODE</text>







<text
transform="matrix(0.76210748,3.6876484e-4,-5.4915671e-4,1.3121506,0,0)"
class="st1 st6"
id="text106"
x="10.711925"
y="130.39525"
style="font-size:8.609828px;font-family:TEXT;stroke-width:1.00257671">LACKNR. / INNENAUSST.</text>







<text
transform="matrix(0.79346531,3.8180488e-4,-5.3039124e-4,1.2602943,0,0)"
class="st1 st7"
id="text107"
x="10.29211"
y="144.8502"
style="font-size:8.5306921px;font-family:TEXT;stroke-width:1.04382896">PAINT NO. / INTERIOR</text>







<text
transform="matrix(0.78136832,3.8845489e-4,-5.2107012e-4,1.2798059,0,0)"
class="st1 st7"
id="text108"
x="10.986253"
y="157.32935"
style="font-size:8.40063381px;font-family:TEXT;stroke-width:1.027915">M. - AUSST. / OPTIONS</text>






<text
transform="scale(0.78905392,1.2673405)"
class="st8 st9"
id="text201"
x="96.780899"
y="18.054523"
style="font-size:17.34529877px;font-family:DOT;stroke-width:1.03802538">0000</text>






<text
transform="scale(0.83422685,1.1987147)"
class="st8 st9"
id="text202"
x="154.55653"
y="19.206161"
style="font-size:18.33831024px;font-family:DOT;stroke-width:1.09745181">00-0-0000</text>






<text
transform="scale(0.83422685,1.1987147)"
class="st8 st9"
id="text203"
x="278.2692"
y="18.976952"
style="font-size:18.33831024px;font-family:DOT;stroke-width:1.09745181">000</text>





<text
transform="scale(1.0354191,0.96579249)"
class="st8 st9"
id="text204"
x="256.72617"
y="22.755833"
style="font-size:12.89135551px;font-family:DOT;stroke-width:0.77148002">0</text>





<text
transform="scale(0.77923744,1.2833059)"
class="st8 st9"
id="text205"
x="391.63577"
y="17.684277"
style="font-size:17.12951088px;font-family:DOT;text-align:end;text-anchor:end;stroke-width:1.02511144">000</text>





<text
transform="scale(1.1423266,0.87540639)"
class="st8 st11"
id="text206"
x="111.68889"
y="51.709427"
style="font-size:12.02213478px;font-family:DOT;stroke-width:1.50276685">WV2ZZZ</text>





<text
transform="scale(0.83413821,1.1988421)"
class="st8 st10"
id="text207"
x="220.2144"
y="37.855377"
style="font-size:17.34755898px;font-family:DOT;stroke-width:1.06723356">24</text>





<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text208"
x="181.49957"
y="52.683979"
style="font-size:12.25612354px;font-family:DOT;stroke-width:1.53201544">Z</text>





<text
transform="scale(0.79763421,1.2537075)"
class="st8 st10"
id="text209"
x="288.41241"
y="36.183838"
style="font-size:17.05626869px;font-family:DOT;stroke-width:1.04931307">AH000000</text>





<text
transform="scale(0.81849793,1.2217502)"
class="st8 st10"
id="text210"
x="155.91304"
y="59.75148"
style="font-size:17.50241089px;font-family:DOT;stroke-width:1.07675993">247 000</text>





<text
transform="scale(0.81135691,1.2325032)"
class="st8 st9"
id="text211"
x="132.11752"
y="124.66405"
style="font-size:17.8355732px;font-family:DOT;stroke-width:1.06736565">AA</text>





<text
transform="scale(0.79074205,1.2646349)"
class="st8 st9"
id="text212"
x="384.65472"
y="120.84859"
style="font-size:17.38241005px;font-family:DOT;text-anchor:end;stroke-width:1.04024625">AAA</text>






<text
transform="scale(0.79041087,1.2651648)"
class="st8 st9"
id="text213"
x="135.54445"
y="143.18431"
style="font-size:17.37512779px;font-family:DOT;stroke-width:1.03981054">LAAA</text>






<text
transform="scale(0.77923744,1.2833059)"
class="st8 st9"
id="text214"
x="390.21225"
y="139.83549"
style="font-size:17.12951088px;font-family:DOT;text-anchor:end;stroke-width:1.02511144">AA</text>






<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text220"
x="76.667679"
y="233.88994"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text221"
x="107.62225"
y="233.88994"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text222"
x="140.11166"
y="233.88994"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text223"
x="171.26178"
y="233.88994"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text224"
x="203.30907"
y="233.88994"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text225"
x="235.35645"
y="233.88994"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text226"
x="76.667679"
y="251.17522"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text227"
x="107.16678"
y="251.17474"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text228"
x="139.58278"
y="251.17522"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text229"
x="171.26178"
y="251.17522"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text230"
x="203.30917"
y="251.17566"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text231"
x="235.35645"
y="251.17522"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>






<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text232"
x="76.667679"
y="268.46048"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text233"
x="107.62225"
y="268.46048"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text234"
x="140.11166"
y="268.46048"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text235"
x="171.26178"
y="268.46048"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text236"
x="203.30907"
y="268.46048"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text237"
x="235.35645"
y="268.46048"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>






<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text238"
x="76.667679"
y="285.74573"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text239"
x="107.62225"
y="285.74573"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text240"
x="140.11166"
y="285.74573"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text241"
x="171.26178"
y="285.74573"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text242"
x="203.30907"
y="285.74573"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>







<text
transform="scale(1.16456,0.85869341)"
class="st8 st11"
id="text243"
x="235.35645"
y="285.74573"
style="font-size:12.2561245px;font-family:DOT;stroke-width:1.53201556">000</text>



</svg>[/src]
 
Wenn du die svg in einem canvas hast,
Z.b. auch hiermit


Kann man das wohl direkt in png konvertieren


Ich kann Javascript nur nicht wirklich aber ich denke man bekommt statt document.write auch etwas hin das Bild als Download zu schicken.
 
  • Thread Starter Thread Starter
  • #17
Zumindest bei Firefox geht das zumindest so, dass nur noch das Bild angezeigt wird. Chrome meckert hier rum:
Code:
Expand Collapse Copy
action.php:103 Not allowed to navigate top frame to data URL: data:image/png;base64,

Wenn sonst keiner eine Idee hat, bleibt wohl nichts anderes übrig, als dass das Bild lediglich angezeigt wird.
 
Wenn das nicht funktioniert, kannst du dein Formular auch dynamisch das SVG auf der selben Seite generieren lassen und dann gleich den Download Link bzw. das Bild mittels [kw]toDataURL[/kw] erstellen lassen. Das spart einmal das wechseln der Seite und wirkt dem "Seitenwechsel mit Image only" entgegen - wirkt also etwas eleganter.

Zur Referenz:
 
  • Thread Starter Thread Starter
  • #19
Ich denke ich werde es einfach so umsetzen, dass ich noch dazuschreiben, dass man es runterladen muss. Dann kann ich da direkt auch erwähnen, in welchen Maßen es ausgedruckt werden muss.
Komplizierter als ich dachte. Aber immerhin habe ich es jetzt umgesetzt :)

Danke an alle für die Hilfe!
 
Eine Sache noch, du kannst einen Stylesheet für "Print" (Druck) anlegen:

Vorteil ist, wenn man auf "Drucken" klickt, wird der Stylesheet hergenommen.
Damit kannst du also für den Druck entsprechend mit CSS anzeigen/verstecken und optimale Größen adaptieren.
 
Zurück
Oben