php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.09.2005, 15:28  
Gast
 
Beiträge: n/a
Standard [Erledigt] FPDF / FPDI - Probleme mit Adobe Reader 7.0 !?!

Hallo zusammen,

habe fogendes Problem: ich erzeuge eine PDF-Datei mit der FPDI Bibliothek. das klappt soweit auch wunderbar, nur sobald ich mir die erzeugte Datei direkt mit einem Adobe Reader 7.0 öffnen will erscheint die Fehlermeldung: "Beim Öffnen des Dokumentes ist ein Fehler aufgetreten. Diese Datei kann nicht gefunden werden". Wenn ich mir das Dokument via "Ziel speichern unter" speicher und danach öffne, klappt es auch einwandfrei.

Hier die zugehörigen Code-Schnipsel:

...
$pdf = new fpdi('P','mm','A4');
$pagecount = $pdf->setSourceFile("blablubb.pdf");
$tplidx = $pdf->ImportPage(1);

$pdf->addPage();
$pdf->useTemplate($tplidx,0,0);
...
$pdf->SetFont('Arial','B',11);
$pdf->SetXY(10,10);
$pdf->write(6,$Headline);
$pdf->SetFont('Arial','',9);
$pdf->SetXY(10,16);
$pdf->write(4,$Content);
...
$pdf->Output($PDF_Name,"D");
$pdf->closeParsers();

Kennt jemand eine Lösung? Vielen Dank schonmal.

Nachtrag:
mit dem Acrobat Reader 4.0 gibt es keine Probleme. Ich habe auch schon versucht das Dokument "inline" zu öffnen ($pdf->Output($PDF_Name,"I");), aber das funktioniert auch nicht.
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.09.2005, 15:36  
Gast
 
Beiträge: n/a
Standard

Das ist aber nicht das komplette Script oder ?

Ich kann nur vermuten:

Zitat:
Beim Öffnen des Dokumentes ist ein Fehler aufgetreten
Meist kommt sowas vor, wenn bei der Ausgabe zum Browser Zeichen fehlen oder Zeichen zuviel (die nicht vom erzeugten PDF sind) gesendet werden.
Manchmal ist es auch nur schlamperhafte Programmierung, sorry, aber selber gehabt

Wie wird das Script überhaupt aufgerufen ?
  Mit Zitat antworten
Alt 15.09.2005, 16:40  
Gast
 
Beiträge: n/a
Standard

Erstmal Danke für Deine Antwort,

Du hast natürlich Recht, der Code ist nur ein Ausschnitt. Die komplette Funktion sieht so aus:

function doc_generate()
{
define('FPDF_FONTPATH','font/');
require_once('fpdf/fpdi.php');

$pdf= new fpdi('P','mm','A4');
$pagecount = $pdf->setSourceFile(PATH_UPLOAD.PATH_DOCUMENTS.$this->SELF[$this->OBJNAME]->VAL);
$tplidx = $pdf->ImportPage(1);
$pdf->addPage();
$pdf->useTemplate($tplidx,0,0);

if($this->OBJ_CONTAINER["SRP"]->LOADED)
{
$ARR_Content = split("[\n]",$this->OBJ_CONTAINER["SRP"]->parse_Output());

$Headline = array_shift($ARR_Content);
$Content = implode("\n",$ARR_Content);
$pdf->SetFont('Arial','B',11);
$pdf->SetXY(10,10);
$pdf->write(6,$Headline);

$pdf->SetFont('Arial','',9);
$pdf->SetXY(10,16);
$pdf->write(4,$Content);
}

if($this->OBJ_CONTAINER["USR"]->LOADED)
{
$ARR_Content = split("[\n]",$this->OBJ_CONTAINER["USR"]->parse_Output());

$Headline = array_shift($ARR_Content);
$Content = implode("\n",$ARR_Content);

$pdf->SetLeftMargin(120);
$pdf->SetFont('Arial','B',11);
$pdf->SetXY(120,10);
$pdf->write(6,$Headline);
$pdf->SetFont('Arial','',9);
$pdf->SetXY(120,16);
$pdf->write(4,$Content);
}

$pdf->Output($this->SELF[$this->OBJNAME]->VAL,"D");
$pdf->closeParsers();

exit();
}

und ist Bestandteil einer umfassenderen PDF Klasse. Der Aufruf erfolgt über

$PDF->doc_generate().

Bei der Fehlermeldung, die ich erhalte, handelt es sich um eine Acrobat-Reader Fehlermeldung, und nicht um eine Browser-Fehlermeldung, die darauf hindeuten würde, dass irgendwas unzulässigerweise vor dem Erzeugen des PDF als header an den Browser gesendet wurde.

Wie oben im Nachtrag bereits geschrieben: Wenn ich die Datei mit Acrobat 4.0 Reader öffne, gibt es keine Probleme, ebenso nicht, wenn ich die Datei via "Link speichern unter" herunterlade. Danach kann ich die Datei auch mit dem Reader 7.0 öffnen !?!

Ich habe auch mal die ganze Contentausgabe und Templateeinbindung weggelassen, also ein leeres PDF erzeugt. Gleiches Ergebnis.

Was tun? Noch Ideen???
  Mit Zitat antworten
Alt 16.09.2005, 07:52  
Benutzer
 
Registriert seit: 12.09.2005
Beiträge: 41
flooooo
Standard

Schickst du auch header mit?
__________________
If nothing goes wrong I go wrong.
flooooo ist offline   Mit Zitat antworten
Alt 16.09.2005, 08:42  
Gast
 
Beiträge: n/a
Standard

Der Header wird erzeugt durch den Aufruf

$pdf->Output($this->SELF[$this->OBJNAME]->VAL,"D");

steckt also in der Funktion "Output" der FPDI Klasse drin. Ansosnten werden keine header gesendet und auch keine sonstige Ausgabe erzeugt.
  Mit Zitat antworten
Alt 16.09.2005, 09:37  
Gast
 
Beiträge: n/a
Standard

Problem gelöst.

Nachdem ich festgestellt habe, das das beschriebene Problem nur im Internet Explorer auftritt, habe ich mal die header - Ausgabe in fpdf->Output() angepasst, und siehe da ...

ursprünglicher Code:

Code:
function Output()
{
    ....
		case 'D':
			//Download file
			if(ob_get_contents())
				$this->Error('Some data has already been output, can\'t send PDF file');
			if(isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
				header('Content-Type: application/force-download');
			else
				header('Content-Type: application/octet-stream');
			if(headers_sent())
				$this->Error('Some data has already been output to browser, can\'t send PDF file');
			header('Content-Length: '.strlen($this->buffer));
			header('Content-disposition: attachment; filename="'.$name.'"');
			echo $this->buffer;
			break;
   ....
}
geänderter Code:

Code:
function Output()
{
   ...
		case 'D':
			//Download file
			if(ob_get_contents())
				$this->Error('Some data has already been output, can\'t send PDF file');
			if(isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
			{
				header("Pragma: public"); // required 
				header("Expires: 0"); 				
				header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 				
				header("Cache-Control: private",false); // required for certain browsers 
				
				header('Content-Type: application/force-download');
			}
			else
				header('Content-Type: application/octet-stream');
			if(headers_sent())
				$this->Error('Some data has already been output to browser, can\'t send PDF file');
			
			header('Content-Length: '.strlen($this->buffer));
			header('Content-disposition: attachment; filename="'.basename($name).'"');
			header("Content-Transfer-Encoding: binary"); 
			echo $this->buffer;
			break;
   ...
}
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
adobe reader beim öffnen dieses dokuments ist ein fehler aufgetreten, beim öffnen dieses dokuments ist ein fehler aufgetreten. diese datei kann nicht gefunden werden, a required resource cannot be loaded, a required resource cannot be loaded adobe, fpdi, es ist ein problem mit adobe acrobat reader aufgetreten, adobe reader a required resource cannot be loaded, adobe diese datei kann nicht gefunden werden, acrobat konnte nicht öffnen fpdf, adobe reader diese datei kann nicht gefunden werden, fpdf internet explorer, fpdf acrobat 7, fpdf fehler beim öffnen, \es ist ein problem mit adobe acrobat/reader aufgetreten\, adobe reader datei kann nicht gefunden werden, fpdf öffnen, beim öffnen dieses dokuments ist ein fehler aufgetreten. diese datei kann nicht gefunden werden., beim öffnen dieses dokuments ist ein fehler aufgetreten diese datei kann nicht gefunden werden, fpdf adobe reader konnte nicht öffnen, adobe a required resource cannot be loaded

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:17 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.