ข้อผิดพลาด FPDF: ข้อมูลบางส่วนถูกส่งออกไปแล้ว ไม่สามารถส่ง PDF ได้

ฉันกำลังใช้ไลบรารี fpdf สำหรับโปรเจ็กต์ของฉัน และฉันใช้สิ่งนี้เพื่อขยายหนึ่งในโมดูล drupal เส้นเหล่านี้

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();

ขอแจ้งข้อผิดพลาด: ข้อผิดพลาด FPDF: ข้อมูลบางส่วนได้ส่งออกไปแล้ว ไม่สามารถส่ง PDF ได้

ฉันพยายามสร้างสิ่งนี้ในไฟล์แยกต่างหากนอกชื่อพื้นที่ drupal test.php และเมื่อดูแล้วก็ใช้งานได้ ใครที่นี่รู้ว่าทำไมมันไม่ทำงาน? หรือใครก็ตามที่นี่สามารถชี้ไลบรารี PDF ที่ถูกต้องให้ฉันซึ่งฉันสามารถใช้ใน drupal เพื่อดูรูปแบบ HTML เป็น PDF


person Wondering Coder    schedule 28.02.2012    source แหล่งที่มา


คำตอบ (15)


เพื่อให้ fpdf ทำงานได้อย่างถูกต้อง จะไม่มีเอาต์พุต ใดๆ เลย นอกเหนือจากสิ่งที่ fpdf สร้างขึ้น ตัวอย่างเช่น สิ่งนี้จะได้ผล:

<?php
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>

ขณะนี้จะไม่ (สังเกตช่องว่างนำหน้าแท็กเปิด <?)

 <?php
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>

นอกจากนี้สิ่งนี้จะไม่ทำงานเช่นกัน (echo จะพัง):

<?php
echo "About to create pdf";
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>

ฉันไม่แน่ใจเกี่ยวกับสิ่งต่าง ๆ ด้าน drupal แต่ฉันรู้ว่าเอาต์พุตที่ไม่ใช่ fpdf เป็นศูนย์อย่างแน่นอนนั้นเป็นสิ่งจำเป็นสำหรับ fpdf ในการทำงาน

person Gordon Bailey    schedule 28.02.2012
comment
โอ้ ตกลง เพราะฉันเพิ่งใส่โค้ดในไฟล์ .tpl มีบล็อกโค้ดที่ใช้แท็ก echo/print หรือแท็ก html และไวยากรณ์จาวาสคริปต์ - person Wondering Coder; 28.02.2012
comment
อย่างไรก็ตาม - ฉันไม่ได้ใช้แท็กสั้น ๆ ใน php ใช้สิ่งนี้ ‹?php ?› - person Wondering Coder; 28.02.2012
comment
ใช่. นั่นคือปัญหาของคุณ การใช้ echo จะทำลาย fpdf ด้วย (ฉันจะแก้ไขคำตอบเพื่อแสดงสิ่งนั้น) แท็กแบบสั้นกับแท็กแบบยาวไม่ควรสร้างความแตกต่าง แต่คุณจะต้องแน่ใจว่าไม่มีอักขระแม้แต่ตัวเดียวนอกแท็ก php ของคุณ - person Gordon Bailey; 28.02.2012
comment
@GordonBailey อะไรจะเป็นแนวทางในการใช้ fpdf ในกรอบงาน PHP MVC เช่นใน phalconphp แต่คำตอบเชิงแนวคิดสำหรับ MVC นั้นยินดีเป็นอย่างยิ่ง - person eomeroff; 26.11.2013
comment
ลบการปิด ?> ที่ส่วนท้ายของไฟล์ PHP แต่ละไฟล์ โดยเฉพาะไฟล์ PHP ใด ๆ ที่อาจรวมอยู่ในโค้ด การมีอยู่ของ ?› หมายความว่าอาจมี \r\n EOL ในภายหลัง ขึ้นอยู่กับโปรแกรมแก้ไขของคุณ และ \r\n จะถูกส่งไปในการตอบกลับเอาต์พุต และทำให้ PDF ของคุณปนเปื้อน - person UncaAlby; 11.11.2016
comment
ขอบคุณ @gordeon ฉันมีปัญหาเดียวกันเกิดขึ้นใน mpdf แต่ localhost ให้เอาต์พุต pdf แต่เซิร์ฟเวอร์ไม่ให้เอาต์พุต จากนั้นฉันจะลบช่องว่างก่อนที่แท็ก ‹?php และปัญหาของฉันก็ได้รับการแก้ไข - person Bhavin Thummar; 23.06.2017
comment
echo เป็นปัญหาในกรณีของฉัน! ขอบคุณ - person Zaheer; 01.06.2019

เพิ่ม ob_start (); ที่ด้านบนและท้ายสุดให้เพิ่ม ob_end_flush();

<?php
    ob_start();
    require('fpdf.php');
    $pdf = new FPDF();
    $pdf->AddPage();
    $pdf->SetFont('Arial','B',16);
    $pdf->Cell(40,10,'Hello World!');
    $pdf->Output();
    ob_end_flush(); 
?>
person Behlum Noman    schedule 18.06.2015
comment
นี่คือคำตอบที่ช่วยแก้ไขปัญหาของฉันได้ดีมาก - person Humphrey; 18.04.2016
comment
นี่คือวิธีแก้ปัญหาข้อผิดพลาด FPDF: ข้อมูลบางส่วนได้ถูกส่งออกไปแล้ว ไม่สามารถส่ง PDF ได้ - person Ravi Shrimali; 13.01.2018

แจ้งข้อผิดพลาดให้ฉันทราบด้านล่าง:
FPDF error: Some data has already been output, can't send PDF

เกินกว่าจะเกิดข้อผิดพลาดนี้: ไปที่ fpdf.php จากนั้นไปที่บรรทัดที่ 996

function Output($name='', $dest='')

หลังจากนั้นให้ทำการเปลี่ยนแปลงดังนี้:

function Output($name='', $dest='') {   
    ob_clean();     //Output PDF to so
person raghavendra    schedule 19.10.2012
comment
ฉันตรวจสอบคำตอบนี้อีกครั้งเพราะมันใช้งานได้ โดยเฉพาะอย่างยิ่งในกรณีที่คุณมีช่องว่างหรือขึ้นบรรทัดใหม่นอกแท็ก ‹?php ?› และไม่พบคำตอบทั้งหมด การโทร ob_clean จากฟังก์ชันการโทรอาจปลอดภัยกว่า แทนที่จะเรียกใช้ภายในฟังก์ชัน Output ได้รับการเตือนว่ามันจะซ่อนข้อความแสดงข้อผิดพลาดที่ถูกต้องตามกฎหมายที่อาจทำให้เกิดปัญหาด้วย หากคุณแก้ไขข้อผิดพลาดซึ่งคุณควรทำต่อไป นั่นอาจช่วยแก้ปัญหาของคุณได้โดยไม่ต้องอาศัยการแฮ็กเช่นนี้ - person UncaAlby; 26.10.2016
comment
ฉันใช้มัน แต่มันแสดงให้ฉันเห็น - หมายเหตุ: ob_clean(): ไม่สามารถลบบัฟเฟอร์ ไม่มีบัฟเฟอร์ให้ลบใน /var/www/html/-------/fpdf.php ออนไลน์ 981 - person Kashmiri; 04.08.2017
comment
นี่เป็นการทำงานที่สมบูรณ์แบบสำหรับฉัน โหวตจากด้านข้างของฉัน - person Naren Verma; 06.11.2017
comment
ฉันพบข้อผิดพลาดที่ OP ระบุไว้หลังจากย้ายไฟล์ไปยังเซิร์ฟเวอร์ใหม่ ไม่มีการเปลี่ยนแปลง เพียงอัปเดตจาก Windows Server 2012 ถึง 2016 การเพิ่ม ob_clean(); แก้ไขปัญหาแล้ว - person Burndog; 02.01.2018
comment
ทำงานไม่มีที่ติสำหรับฉัน ฉันกำลังประสบปัญหานี้เมื่อพยายามเปรียบเทียบสองสาย - person Keno Clayton; 07.05.2018
comment
ฉันใช้ไลบรารีนี้: github.com/myokyawhtun/PDFMerger และสิ่งนี้ได้ผลสำหรับฉัน ฉันแก้ไข /tcpdf/tcpdf.php แทน - person mike; 26.03.2019

ลองบันทึกไฟล์โดยไม่มีตัวเลือก: "ความคิดเห็น BOM" เช่น ใน Adobe Dreamweaver คุณบันทึกไฟล์เป็น... ยกเลิกการเลือกช่องด้านล่างชื่อไฟล์ที่ระบุว่า "รวมลายเซ็น Unicode (BOM)".

บน Notepad++ คุณควรเลือกเมนู: การเข้ารหัส, "เข้ารหัสใน UTF-8 โดยไม่มี BOM"

และตั้งให้เป็นค่าเริ่มต้นสำหรับไฟล์อื่น ๆ ที่คุณสร้าง มันจะช่วยให้คุณไม่ต้องปวดหัวอีกมากในอนาคต

person Andrey Aires    schedule 03.10.2012

สวัสดี คุณมีส่วนหัวของเซสชันที่ด้านบนของหน้าหรือไม่ หรือการรวมใดๆ หากคุณได้ลองเพิ่มโค้ดนี้ที่ด้านบนสุดของเพจของคุณแล้ว มันก็ควรจะทำงานได้ดี

<?

while (ob_get_level())
ob_end_clean();
header("Content-Encoding: None", true);

?>

ไชโย :-)

person Cino Jose    schedule 05.06.2012

ในกรณีของฉันฉันได้ตั้งไว้:

ini_set('display_errors', 'on');
error_reporting(E_ALL | E_STRICT);

เมื่อฉันส่งคำขอเพื่อสร้างรายงาน มีคำเตือนบางอย่างแสดงในเบราว์เซอร์ (เช่น การใช้ฟังก์ชันที่เลิกใช้แล้ว)
เมื่อเปลี่ยนตัวเลือก off display_errors รายงานก็ถูกสร้างขึ้นสำเร็จ

person Victor    schedule 02.02.2015

ข้อความแสดงข้อผิดพลาด FPDF จะนำคุณไปยังบรรทัด PHP ที่กำลังส่งเนื้อหาบางส่วน

หากคุณไม่ได้รับคำใบ้ว่า File & Line ใดส่งเนื้อหาบางส่วน คุณอาจมีการเข้ารหัสที่ไม่ตรงกันในไฟล์ include / need Files ของคุณ

สำหรับฉัน

  • fpdf.php มีการเข้ารหัส ANSI
  • pdf-generator.php ของฉันมีการเข้ารหัส UTF-8 และ
  • การเชื่อมต่อฐานข้อมูลรวมของฉันคือการเข้ารหัส UTF-8 (การเข้ารหัส UTF-8 นี้ทำให้เกิดข้อผิดพลาด FPDF ฉันต้องเปลี่ยนกลับเป็น ANSI)
person HansWurst    schedule 10.09.2012

ขั้นตอนแรกตรวจสอบสิทธิ์ในโฟลเดอร์ขั้นตอนที่สองใส่สิ่งนี้

ob_start(); 

ก่อนถึงเส้น

$pdf->Output();
person Santos L. Victor    schedule 08.03.2016

หากคุณส่งโค้ดแจ้งเตือน/คำเตือนก่อนการสร้าง PDF ให้ลองปิดมัน error_reporting(0). จากนั้นจึงดำเนินการตามคำเตือนหลังจากนั้น

person Cliff Ombachi    schedule 18.04.2016
comment
สิ่งนี้ควรโพสต์เป็นความคิดเห็น - person Marko Popovic; 18.04.2016

ฉันใช้สิ่งต่อไปนี้และมันได้ผลสำหรับฉัน

require_once ('pdf/fpdf.php');

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output(F,'/var/www/html/PATH/filename.pdf');
ob_end_flush();
person Kashmiri    schedule 04.08.2017

เพิ่มที่จุดเริ่มต้นของสคริปต์

ob_start();
require ('fpdf.php');

และท้ายที่สุด หลังจาก output()

ob_end_flush();

มันได้ผลสำหรับฉัน! =)

person JavierMD    schedule 09.12.2019
comment
ข้อผิดพลาดนี้แสดงในวันนี้ มันใช้งานได้ตั้งแต่ 3 ปีที่แล้วและวันนี้ไม่ทำงาน - person Rajesh; 20.05.2020

คุณต้องโทรไปที่ห้องสมุด

ต้องการ ('fpdf.php');

<?php
require('fpdf.php');

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'¡Hola, Mundo!');
$pdf->Output();
?>

http://www.fpdf.org/

http://www.fpdf.org/es/tutorial/tuto1.htm

person Proyecto Pi    schedule 11.03.2015

ข้อผิดพลาดร้ายแรง: ข้อยกเว้นที่ไม่ได้รับการตรวจสอบ 'ข้อยกเว้น' พร้อมข้อความ 'ข้อผิดพลาด FPDF: ข้อมูลบางส่วนได้ถูกส่งออกแล้ว ไม่สามารถส่งไฟล์ PDF ได้ (เอาต์พุตเริ่มต้นที่ /home/asri123/public_html/bill/invoice/invoice.php:743)' ใน /home/asri123/public_html/bill/invoice/fpdf.php:271 การติดตามสแต็ก: #0 /home/asri123/public_html/bill/invoice/fpdf.php(1052): FPDF->ข้อผิดพลาด('ข้อมูลบางส่วนมี a. ..') #1 /home/asri123/public_html/bill/invoice/fpdf.php(1012): FPDF->_checkoutput() #2 /home/asri123/public_html/bill/invoice/mirasbill.php(262): FPDF->Output('MSFS/2018-19/76...', 'D') #3 {main} โยนใน /home/asri123/public_html/bill/invoice/fpdf.php ออนไลน์ 271

person Rajesh    schedule 20.05.2020
comment
มันใช้งานได้ตั้งแต่ 3 ปีที่แล้ว แต่วันนี้มันหยุดในทุกไซต์ โปรดช่วยฉันด้วย - person Rajesh; 20.05.2020

แม้แต่ช่องว่างเดียวในไฟล์ php ที่รวมอยู่ก็ทำให้เกิดคำเตือนนั้น ไม่ควรจะมีผลลัพธ์ใดๆ ทั้งสิ้น

person mguven guven    schedule 02.08.2020

คำตอบอื่นที่ไม่มีใครโพสต์ที่นี่... ตรวจสอบการเข้ารหัสไฟล์ PHP ของคุณอีกครั้ง และตรวจสอบให้แน่ใจว่าไม่ใช่อย่างอื่นนอกจาก UTF-8 โปรแกรมแก้ไขโค้ดที่ไม่ถูกต้อง (หรืออัปโหลด FTP) อาจทำให้การเข้ารหัสของไฟล์ยุ่งวุ่นวายได้ ซึ่งในกรณีนี้ การแก้ไขอื่นๆ ที่กล่าวถึงในชุดข้อความนี้จะช่วยไม่ได้

person justanotherguy    schedule 05.11.2020