fpdf einbinden

am 16.11.2012 - 11:10 Uhr in
Hallo zusammen,
ich bastel gerade an einem Modul, wo ich Daten per pdf-Datei ausgeben möchte. Wie binde ich die fpdf.php ein um die entsprechende Klasse nutzen zu können.
In einer "händischen" Lösung geht das ja relativ einfach....
require('fpdf/fpdf.php');
$pdf=new FPDF();
$pdf->AddPage();
Aber ich bekomme es unter Drupal nicht hin.
Ati
- Anmelden oder Registrieren um Kommentare zu schreiben
FPDF
am 16.11.2012 - 12:15 Uhr
Kommt eine Fehlermeldung oder passeirt garnichts? Schau mal in den aktuellen Protokollnachrichten nach. Ansonsten kommt es drauf an was du als PDF erstellen willst. Liest du eine Datei ein oder liest du daten aus der DB aus, die zb in einer node stehen?
//EDIT:
FPDF muss laut deinem require im hauptordner von drupal liegen ist das so?
Du kannst auch diese Modul benutzen :
Print, email, PDF
Danke für Deine Antwort....
am 16.11.2012 - 12:22 Uhr
Danke für Deine Antwort.... wie so oft bei mir ist es etwas komplizierter. Ohne das ganze drumherum zu erzählen.... ich will eigentlich nur den Inhalt einer
DB-Tabelle als PDF erstellen (Das ganze wird anschliessend per view zum Download angeboten). Nun bezüglich des Pfades habe ich schon etliche Varianten probiert...wobei mein Beispiel-Code aus einem funktionierendem Projekt ist und nicht aus dem Drupalmodul. Das Modul "print" hatte ich mir auch schon angeguckt um vllt aus dem Quellcode schlau zu werden, aber aktuelle verstehe ich nichts davon.
Ok
am 16.11.2012 - 13:08 Uhr
Das print modul bentuzt auch noch Fremdprogramme um eine PDF zu erstellen.
Da ich jetzt aber nicht weiß wie dein Modul genau funktioniert könnte ich dir leere Ratschläge geben wie z.b. bau die PDF lokal mit FPDF vor (Was ich dir wirklich empfehlen kann) und später fügst du sie als neue function in deinem Modul ein. Danach füllst du die Lücken mit den erforderlichen Daten aus der DB.
Okay dann eben doch bissl
am 16.11.2012 - 13:41 Uhr
Okay dann eben doch bissl mehr drumherum.... ich bastel an einem Stichprobenmodul. Es sollen für ein Aussenlager x-Anzahl an Artikel generiert werden, wo der IST mit dem EDV-Bestand verglichen werden soll. Die Artikel die generiert wurden sollen in einer Tabelle gespeichert werden, damit eine erneute Generierung nicht mehr erfolgen kann. Also wird im ersten Schritt eine temporäre Tabelle gefüllt... dann soll dieser Inhalt als pdf-Datei (Excel würde auch gehen) gespeichert werden (eigener Inhaltstyp) und danach sollen die Artikel in eine Tabelle gespeichert werden, wo eben alle geprüfte Artikel festgehalten werden...klingt etwas umständlich aber aktuell fällt mir kein besserer Weg ein. Hier mal mein Code wie er aktuell aussieht (natürlich noch nicht alle Funktionen enthalten).
<?php
function stichproben_menu() {
$items = array();
$items['stichproben/form'] = array(
'title' => t('Stichproben'),
'page callback' => 'stichproben_form',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function stichproben_form(){
return drupal_get_form('stichproben_my_form');
}
function stichproben_my_form($form, &$form_state){
$result = db_query('Select lager,bezeichnung from filialen');
$filialen = array();
foreach ($result as $row) {
$filialen[$row->lager] = $row->bezeichnung;
}
$form['lager']= array(
'#type' => 'select',
'#title' => t('Filiale'),
'#options' => $filialen,
'#description' => t('Bitte das Lager angeben angeben!!'),
);
$form['anzahl'] = array(
'#type' => 'textfield',
'#title' => t('Anzahl'),
'#description' => t('Wieviele Artikel sollen generiert werden!'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Speichern',
);
return $form;
}
function stichproben_my_form_submit($form, &$form_state) {
$lg = $form_state['values']['lager'];
$anzahl = $form_state['values']['anzahl'];
$sqlartlgtmp="INSERT INTO artlgtmp
SELECT DISTINCT Atbestminmaxschwarz.Art, Atbestminmaxschwarz.MC1 , Atbestminmaxschwarz.lager AS lg, Atbestminmaxschwarz.hf AS Lagerf, artikel_geprueft.Art
FROM Atbestminmaxschwarz
LEFT JOIN artikel_geprueft ON Atbestminmaxschwarz.Art = artikel_geprueft.Art
WHERE (
((Atbestminmaxschwarz.lager) = '".$lg."')
AND
((artikel_geprueft.Art) IS NULL )
AND
((Atbestminmaxschwarz.hf) <> '')
) ORDER BY RAND() LIMIT ".$anzahl;
$artlgtmp = db_query($sqlartlgtmp);
$sql="Select art,mc1,lg,fach from artlgtmp";
require('drupal7/sites/all/libraries/fpdf/fpdf.php');
$pdf=new FPDF();
$pdf->AddPage();
$filename = 'stichproben_'.$lg;
$pdf->SetFillColor(255);
$pdf->SetFont('Arial','B',16);
$pdf->Cell(45,6,'Artikel',1,0,'L',1);
$pdf->Cell(60,6,'MC1',1,0,'L',1);
$pdf->Cell(20,6,'LG',1,0,'L',1);
$pdf->Cell(35,6,'Fach',1,0,'L',1);
$pdf->Cell(30,6,'Bestand',1,0,'L',1);
$pdf->Ln();
$result = db_query($sql);
while ($row = $result->fetchAssoc()) {
fputcsv($fp, $row,';')."\n";
$pdf->SetFillColor(255);
$pdf->SetFont('Arial','B',16);
$pdf->Cell(45,6,$row['art'],1,0,'L',1);
$pdf->Cell(60,6,$row['mc'],1,0,'L',1);
$pdf->Cell(20,6,$row['lg'],1,0,'L',1);
$pdf->Cell(35,6,$row['lgfach'],1,0,'L',1);
$pdf->Cell(30,6,$row['tmp'],1,0,'L',1);
$pdf->Ln();
}
$pdf->Output($filename,"F");
$pdf->Output($datname,"D");
$node = new stdClass();
$node->type = 'stichproben';
node_object_prepare($node);
$node->title = $filename;
$node->language = LANGUAGE_NONE;
$filepath = drupal_realpath($filecsv);
// Create managed File object and associate with Image field.
$file = (object) array(
'uid' => 1,
'display' => 1,
'filename' => $filename,
'uri' => $filepath,
'filemime' => file_get_mimetype($filepath),
'status' => 1,
);
$file = file_move($file, 'public://');
$node->field_csvfile[LANGUAGE_NONE][0] = (array)$file;
$path = 'content/' . $filename;
$node->path = array('alias' => $path);
node_save($node);
drupal_set_message('Datei wurde erstellt');
drupal_goto('stichproben');
}
function stichproben_views_api() {
return array('api' => 3.0,
'path' => drupal_get_path('module', 'buschcsv'),
);
}
function stichproben_views_plugins_alter(&$plugins) {
$plugins['display']['embed'] = array_merge($plugins['display']['embed'], array(
'handler' => 'embed_views_plugin_display_embed',
'theme' => 'views_view',
));
}
Egal welchen Pfad ich zur fpdf.php benutze nichts funktioniert...entweder kann die Seite nciht geladen werden oder aber es kommt
Fatal error: require() [function.require]: Failed opening required 'drupal7/sites/all/libraries/fpdf/fpdf.php' (include_path='.;C:\xampplite\php\PEAR') in C:\xampplite\htdocs\drupal7\sites\all\modules\stichproben\stichproben.module on line 70
Ich hoffe man wird schlau aus diesem Quellcode!!!
Ati
Probier mal
am 16.11.2012 - 14:15 Uhr
Falls du es noch nicht probiert hast leg den ordner von FPDF in dein drupal hauptordner ordner und geb das als require/include an:
<?php
include("fpdf/fpdf.php");
?>
Und ich glaube arial als schrifart erkennt er nicht. du musst dir mal die fond dateien anschauen.
Werde ich mal
am 16.11.2012 - 23:31 Uhr
Werde ich mal testen...wahrscheinlich aber erst Montag!!!
So habe es gerade mal
am 19.11.2012 - 08:47 Uhr
So habe es gerade mal getestet....hat auch nicht funktioniert. Nachdem ich das Lager mit der Anzhal von Artikeln abgesendet habe kommt "Seite kann nciht angezeigt werden". Setze ich die include-Anweisung in function stichproben_init (war mal ein spontaner Test) kommt
Fatal error: Class 'FPDF' not found in C:\xampplite\htdocs\drupal7\sites\all\modules\stichproben\stichproben.module on line 74
Habe auch fpdf...
am 19.11.2012 - 14:24 Uhr
Mein fpdf-Ordner liegt innerhalb meines Modul-Ordners und wird
in meinem .module so eingebunden:
include_once 'fpdf/fpdf.php';
Und zwar ganz zu Beginn des Moduls, nicht innerhalb einer Function.
Hallo, sorry war beruflich
am 22.11.2012 - 14:11 Uhr
Hallo,
sorry war beruflich unterwegs. Wie so oft saß das Problem vor dem Bildschrim. Das einbinden hatte schon die ganze Zeit
funktioniert...nur der anschliessende Code was mit der Datei passieren soll war fehlerhaft. *rotwerd*