Seite On-the_Fly aus webform-submission erstellen
am 24.08.2016 - 06:41 Uhr in
Hallo,
ich versuche die Eingaben eines Webforms on-the-fly in einem PDF wiederzugeben. Das Ergebnis soll Spielkarten darstellen, deren Inhalt auf den Eingaben des Users beruht. Damit die Darstellung von Bildern und Text stimmt, benötige ich ein PDF.
Versuche bisher:
PDF auf der Confirmationpage erstellen. Das geht aber nicht, da die Daten vor dem Aufruf von FPDF übertragen werden.
Auf der Confirmationpage einen Link auf die PHP-Datei legen, die das PDF erstellen soll. Wenn diese Datei im gleichen Verzeichnis wie die Confirmationpage liegt, wird die URL einfach an die URL der Confirmationpage gehängt. Liegt sie in einem anderen Verzeichnis wird sie nicht gefunden, obwohl die URL richtig ist.
Webform auf eine Seite weiterleiten, auf die man ein PDF hochladen kann. Hier benennt Drupal die PHP-Datei in *.php.txt um.
Leider habe ich sonst nichts gefunden.
Hat jemand eine Idee, wie man solche Spielkarten realisieren könnte?
Vielen Dank für Eure Mühen
Hallo, schade, dass niemand eine Idee hat. Ich war im Urlaub und hatte gehofft, inzwischen findet jemand Zeit zu antworten.
Jetzt habe ich mal den alten Code aus einer nicht-Drupal-Site aber PHP-PDF gesucht. Vielleicht ist dann besser verständlich was ich realisieren will:
----------------------------------------------------------------------------
Erste Eingabeseite:
Boot
Name des Kindes:
Kurzhaar
langes Haar
Speichern der Angaben auf der nächsten Seite in einem Cookie und Kontrolle der Eingaben:
(Boot_Name_Speichern.php)
Boot
<?php
echo'Das Boot ist für ';
print( htmlspecialchars ($_POST["Name_Boot"]));
echo ' mit ';
if ($_POST["Haar"] == 'kurz'){
echo' kurzen Haaren.';
}
else{
echo ' langen Haaren.';
}
setcookie("Name_Boot",($_POST["Name_Boot"]),time()+(3600*24));
setcookie("Haar",($_POST["Haar"]),time()+(3600*24));
echo'<form id="form1" name="form1" method="post" action="Boot_Abholen2.php">';
echo'<p> <input type="submit" name="Submit" id="Submit" value="Hier geht\'s zum Bootssteg" /> </p></form>';
?>
Ausdrucken des Bootes mit Namen aus der Eingabeseite (Boot_Abholen2.php):
<?php
require('phpclasses/fpdf.php');
class PDF extends FPDF {
// Kopfzeile
function Header()
{
// Logo
$this->Image('Images/Allgemeinklein.png',10,8,33);
// Arial fett 15
$this->SetFont('Arial','B',15);
// nach rechts gehen
$this->Cell(80);
// Titel
$this->Cell(30,10,'Bootssteg',0,0,'C');
// Zeilenumbruch
$this->Ln(20);
}
// Fusszeile
function Footer()
{
// Position 1,5 cm von unten
$this->SetY(-15);
// Arial kursiv 8
$this->SetFont('Arial','I',8);
// Seitenzahl
$this->Cell(0,10,'Seite '.$this->PageNo().'/{nb}',0,0,'C');
}
}
class PDF_Rotate extends PDF{
var $angle=0;
function Rotate($angle, $x=-1, $y=-1)
{
if($x==-1)
$x=$this->x;
if($y==-1)
$y=$this->y;
if($this->angle!=0)
$this->_out('Q');
$this->angle=$angle;
if($angle!=0)
{
$angle*=M_PI/180;
$c=cos($angle);
$s=sin($angle);
$cx=$x*$this->k;
$cy=($this->h-$y)*$this->k;
$this->_out(sprintf('q %.5F %.5F %.5F %.5F %.2F %.2F cm 1 0 0 1 %.2F %.2F cm', $c, $s, -$s, $c, $cx, $cy, -$cx, -$cy));
}
}
function _endpage()
{
if($this->angle!=0)
{
$this->angle=0;
$this->_out('Q');
}
parent::_endpage();
}
function RotatedText($x,$y,$txt,$angle)
{
//Text rotated around its origin
$this->Rotate($angle,$x,$y);
$this->Text($x,$y,$txt);
$this->Rotate(0);
}
function RotatedImage($file,$x,$y,$w,$h,$angle)
{
//Image rotated around its upper-left corner
$this->Rotate($angle,$x,$y);
$this->Image($file,$x,$y,$w,$h);
$this->Rotate(0);
}
}
$pdf=new PDF_Rotate();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','',20);
// Linienbreite einstellen, 0.2mm
$pdf->SetLineWidth(0.2);
// Rahmenfarbe auf Schwarz einstellen
$pdf->SetDrawColor(0, 0, 0);
if ($_COOKIE["Haar"]=="kurzhaar"){
$pdf->Image("Images_Boot/Kurzhaar.jpg",70,40);
}
else{
$pdf->Image("Images_Boot/Langhaar.jpg",70,40);
}
$pdf->RotatedText(113,180,$_COOKIE["Name_Boot"],90);
$pdf->Output( 'Boot abholen.pdf', 'I');
?>
--------------------------------------------------------------------------------
So ähnlich soll das Ganze dann in Drupal funktionieren. Wichtig ist, das die Besucher am Ende ein PDF mit Bild und Text haben.
Diese Problemstellung taucht bei der zu realisierenden Seite immer wieder auf. Ich wäre wirklich dankbar für Hilfe.
Carla
- Anmelden oder Registrieren um Kommentare zu schreiben
Warum nicht einfach mit views
am 26.09.2016 - 19:27 Uhr
Warum nicht einfach mit views und views pdf versuchen und das Webform als View ausgeben?
https://drupal-tv.de
Drupal sehen und lernen
PDF aus Webform erzeugen und ausgeben
am 01.10.2016 - 10:56 Uhr
Hallo, vielen Dank für deine Antwort.
Aber ich finde bei views pdf keine Möglichkeit, php code wie if...; else... und Funktionen wie rotate_image und rotate_text zu integrieren. Ausserdem scheint nicht klar zu sein ob es überhaupt in drupal 8 kommt. Vielleicht weiss noch jemand eine andere Lösung zur Erstellung von personalisierten Spielkarten (die Rotierungsfunktion ist wichtig).
Trotzdem nochmal vielen Dank für Deine Idee.
Carla
Warum webforms?
am 01.10.2016 - 11:38 Uhr
werden die Daten später nicht mehr gebraucht?
Grüße
Ronald
Seite On-the_Fly aus webform-submission erstellen
am 01.10.2016 - 13:02 Uhr
Hallo,
nein, die Daten werden nicht mehr gebraucht und sollten darum die Datenbank auch nicht füllen. Bis jetzt habe ich das mit Cookies realisiert, aber wir möchten eigentlich die gesamte Seite mit allen Angeboten auf Drupal umstellen.
Vielen Dank für Eure Überlegungen
Carla
Unter diesen besonderen Umständen
am 01.10.2016 - 15:07 Uhr
würde ich zu einem eigenen Modul tendieren.
Die FormsAPI ist für dein Vorhaben bestens geeignet, und deine Anwendungslogik ist so speziell, dass hier nur eine eigene Anwendung dies zu 100% sinnvoll abdecken kann.
Wenn du die bisherige Lösung realisiert hast, ist der Umbau zu einem eigenen Modul nicht so furchtbar schwierig,
Arbeit steckt natürlich dennoch drin.
Aber ein Verwaltungssystem wie Drupal so sehr zu verbiegen, dass es eine Nichtverwaltungsanwendung wird, halte ich persönlich nicht für erstrebenswert.
Eine von Drupal "gehostete" Anwendung erscheint mir da logischer.
Grüße
Ronald