Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przeglądarka nie wczytuje pdf
Forum PHP.pl > Forum > Przedszkole
pawel06281990
Witam,

Tworze plik pdf z mpdf ale kiedy chce wygenerować testowy pdf to przeglądarka daje komunikat błędu "Nie udało się wczytać dokumentu PDF."


Tak wygląda mój plik testowy pdf wedle producenta

  1.  
  2. // Require composer autoload
  3. require_once __DIR__ . '/vendor/autoload.php';
  4. // Create an instance of the class:
  5. $mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8',
  6. 'tempDir' => __DIR__ . '/log/'
  7. ]);
  8.  
  9. $html ='Hello World';
  10.  
  11. // Write some HTML code:
  12. $mpdf->WriteHTML($html);
  13.  
  14. // Output a PDF file directly to the browser
  15. $mpdf->Output();


Dla czego tak się dzieje nawet jak dodam na początku pliku ob_start(); to nic to niedaje.
trueblue
Usuń ostatnią linijkę i sprawdź błędy.
pawel06281990
Cytat(trueblue @ 19.02.2022, 19:24:30 ) *
Usuń ostatnią linijkę i sprawdź błędy.


Jak usunąłem ostatnia linijkę

  1. $mpdf->Output();


To pokazuje, że nic niema w pliku a wpliku jest Hello World
dublinka
  1. require_once __DIR__ . '/vendor/autoload.php';
  2.  
  3. $mpdf = new \Mpdf\Mpdf();
  4. $mpdf->WriteHTML('<h1>Hello world!</h1>');
  5. $mpdf->Output();
pawel06281990
Cytat(dublinka @ 19.02.2022, 19:36:38 ) *
  1. require_once __DIR__ . '/vendor/autoload.php';
  2.  
  3. $mpdf = new \Mpdf\Mpdf();
  4. $mpdf->WriteHTML('<h1>Hello world!</h1>');
  5. $mpdf->Output();


W ten sposób dostaje błąd

  1. Fatal error: Uncaught Mpdf\MpdfException: Temporary files directory "/home/twoj-host/web/test.twoj-host.eu/public_html/wp-content/plugins/zamow_msze/inc/generator1/vendor/mpdf/mpdf/src/Config/../../tmp/mpdf" is not writable in /home/twoj-host/web/test.twoj-host.eu/public_html/wp-content/plugins/zamow_msze/inc/generator1/vendor/mpdf/mpdf/src/Cache.php:21 Stack trace: #0 /home/twoj-host/web/test.twoj-host.eu/public_html/wp-content/plugins/zamow_msze/inc/generator1/vendor/mpdf/mpdf/src/ServiceFactory.php(56): Mpdf\Cache->__construct() #1 /home/twoj-host/web/test.twoj-host.eu/public_html/wp-content/plugins/zamow_msze/inc/generator1/vendor/mpdf/mpdf/src/Mpdf.php(1066): Mpdf\ServiceFactory->getServices() #2 /home/twoj-host/web/test.twoj-host.eu/public_html/wp-content/plugins/zamow_msze/inc/generator1/test.php(5): Mpdf\Mpdf->__construct() #3 /home/twoj-host/web/test.twoj-host.eu/public_html/wp-content/plugins/zamow_msze/zamow_msze.php(113): include_once('/home/twoj-host...') #4 /home/twoj-host/web/test.twoj-host.eu/public_html/w in /home/twoj-host/web/test.twoj-host.eu/public_html/wp-content/plugins/zamow_msze/inc/generator1/vendor/mpdf/mpdf/src/Cache.php on line 21


Ze nie może znaleźć folderu na zapisywanie logów ten folder tworze sam podając nazwę folderu.
trueblue
Cytat(pawel06281990 @ 19.02.2022, 19:31:41 ) *
To pokazuje, że nic niema w pliku a wpliku jest Hello World

Gdzie nic nie ma i w jakim pliku jest "Hello World, skoro nie wygenerowałeś PDFa?
pawel06281990
Cytat(trueblue @ 19.02.2022, 19:49:42 ) *
Gdzie nic nie ma i w jakim pliku jest "Hello World, skoro nie wygenerowałeś PDFa?


Tak wygląda mój plik

Plik nazwałem test.php
  1. // Require composer autoload
  2. require_once __DIR__ . '/vendor/autoload.php';
  3. // Create an instance of the class:
  4. $mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8',
  5. 'tempDir' => __DIR__ . '/log/'
  6. ]);
  7.  
  8. $mpdf->AddPage('','E');
  9. $mpdf->SetHTMLHeader();
  10. $mpdf->AddPage();
  11. $mpdf->SetHTMLFooter();
  12. $mpdf->WriteHTML('Hello World');
  13.  
  14. // Output a PDF file directly to the browser
  15. $mpdf->Output();


I kiedy chce wygenerować pdf dostaje błąd o treści Nie udało się wczytać dokumentu PDF.

A jak usunąłem
  1. $mpdf->Output();


To nie generowało mi czystego pdf'a
trueblue
Cytat(pawel06281990 @ 19.02.2022, 19:55:40 ) *
A jak usunąłem
  1. $mpdf->Output();

To nie generowało mi czystego pdf'a

A jaki był wynik skryptu PHP? Nie dostałeś żadnych błędów?
pawel06281990
Jak sprawdzałem var_dump(); to było null nic mi nie wyświetliło żadnego błędu
trueblue
Czy możesz po prostu uruchomić ostatnio cytowany skrypt, dokładnie w takiej postaci jak wkleiłeś, ale bez ostatniej linijki i podać jego wynik?
pawel06281990
To mówię ze nic nie dostaje żadnego wyniku.

Takie coś dostaje bez ostatniej lini



trueblue
I ten skrypt wygenerował tekst o wordpressie?
pawel06281990
Nie ja pracuję na wordpressie bo tworze wtyczką i potrzebuje generowanie pdf
trueblue
A jeśli poproszę Cię trzeci raz o pokazanie wyniku kodu:

  1. // Require composer autoload
  2. require_once __DIR__ . '/vendor/autoload.php';
  3. // Create an instance of the class:
  4. $mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8',
  5. 'tempDir' => __DIR__ . '/log/'
  6. ]);
  7.  
  8. $mpdf->AddPage('','E');
  9. $mpdf->SetHTMLHeader();
  10. $mpdf->AddPage();
  11. $mpdf->SetHTMLFooter();
  12. $mpdf->WriteHTML('Hello World');


to pokażesz, czy nie?
pawel06281990
No podał bym ci jak bym miał wynik a ja nie mam żadnego wyniku.

taki mam kod

  1. require_once __DIR__ . '/vendor/autoload.php';
  2. // Create an instance of the class:
  3. $mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8',
  4. 'tempDir' => __DIR__ . '/log/'
  5. ]);
  6.  
  7. $mpdf->AddPage('','E');
  8. $mpdf->SetHTMLHeader();
  9. $mpdf->AddPage();
  10. $mpdf->SetHTMLFooter();
  11. $mpdf->WriteHTML('Hello World');
  12.  
  13. // Output a PDF file directly to the browser


I ten kod nie podaje mi wyniku tak jak pokazałem na zdjęciu pusto jest.
dublinka
A sprawdziles to osobnym pliku nie jako część wordpressa. Odpal to w osobnym pliku
pawel06281990
Ok zaraz sprawdzie


EDIT:

Dodałem to na serwer bez wordpress'a i też jest pusta strona

tu jest link test pdf

Po paru zmianach zadziałało mi na czystym bez wordpressa a jak to samo dodaje do wordpress'a to mi nie działa.
viking
Uruchom podgląd źródła tego pustego pliku bo pewnie jakiś fatal error czy coś leci. Jeśli zapisujesz to otwórz normalnie w notatniku.
pawel06281990
Sprawdziłem i żadnych błędów niema.

Zadziwia mnie to Że przeglądarka Mozilla FireFox otwiera PDF normalnie a chrome i opera ma problem z otwarciem pliku pdf nawet program mi nie otwiera, ale jak zapisze na serwerze i pobiorę to otworzy mi ten plik i zawsze mam ten zawsze komunikat "Nie udało się wczytać dokumentu PDF." i nie wiem czemu a wszystko zrobiłem ok bo dodałem go inaczej oparłem o function żeby wordpress mógł sobie poradzić.
trueblue
Otwórz w Notatniku ten PDF i zobacz czy na początku nie dodały się jakieś błędy z PHP.
pawel06281990
Błędów nie ma żadnych, ale za to widzie całą zawartość strony linki do styli i menu
trueblue
No to już wiesz gdzie leży problem.
pawel06281990
I pytanie jak mogę to naprawić questionmark.gif
trueblue
Spojrzeć na spokojnie w kod.
Być może magiczne ob_start, które stosujesz powoduje ten problem.
pawel06281990
Ale ja zmieniłem i nie mam już tego ob_start

Tak wygląda skrypt generowania faktur

  1. function mpdf_output_wp_zmarli($content ='',$outputToBrowser = true, $pdfName = '', $templatePath = '' ){
  2. // Require composer autoload
  3.  
  4.  
  5. require __DIR__ . '/generator/vendor/autoload.php';
  6.  
  7.  
  8. $pdf_ofilename = get_option('zmarli_name_pdf').'_'.date('d-m-Y H:i', time()).'.pdf';
  9. if ( ! empty( $pdfName ) ) {
  10. $pdf_filename = $pdfName . '.pdf';
  11. } else {
  12. $pdf_filename = $pdf_ofilename;
  13. }
  14.  
  15. global $pdf_html_header;
  16.  
  17. if (get_option('pdf_format')) {
  18. $pdf_format =get_option('pdf_format');
  19. }
  20.  
  21. if (get_option('pdf_margin_left') !== 0 && get_option('pdf_margin_left') == '' ) {
  22. $pdf_margin_left = get_option('pdf_margin_left');
  23. }
  24. if (get_option('pdf_margin_right') !== 0 && get_option('pdf_margin_right') == '' ) {
  25. $pdf_margin_right = get_option('pdf_margin_right');
  26. }
  27. if (get_option('pdf_margin_top') !== 0 && get_option('pdf_margin_top') == '' ) {
  28. $pdf_margin_top = get_option('pdf_margin_top');
  29. }
  30. if (get_option('pdf_margin_bottom') !== 0 && get_option('') == 'pdf_margin_bottom' ) {
  31. $pdf_margin_bottom = get_option('pdf_margin_bottom');
  32. }
  33. if (get_option('pdf_margin_header') !== 0 && get_option('pdf_margin_header') == '' ) {
  34. $pdf_margin_header = get_option('pdf_margin_header');
  35. }
  36. if (get_option('pdf_margin_footer') !== 0 && get_option('pdf_margin_footer') == '' ) {
  37. $pdf_margin_footer = get_option('pdf_margin_footer');
  38. }
  39. if (empty(get_option('pdf_html_header') )) {
  40. $pdf_html_header = false;
  41. }
  42. if (empty(get_option('pdf_html_footer'))) {
  43. $pdf_html_footer = false;
  44. }
  45.  
  46.  
  47. if (get_option("pdf_orientation")) {
  48. $pdf_orientation = get_option("pdf_orientation");
  49. }
  50.  
  51. $cp = 'utf-8';
  52. if (get_option('zmarli_code_pdf') != '' ) {
  53. $cp = get_option('zmarli_code_pdf');
  54. }
  55. $defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
  56. $fontDirs = $defaultConfig['fontDir'];
  57.  
  58. $defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
  59. $fontData = $defaultFontConfig['fontdata'];
  60.  
  61.  
  62. // Create an instance of the class:
  63. $mpdf = new \Mpdf\Mpdf([
  64. 'tempDir' => __DIR__ . '/generator/log',
  65. 'mode' =>$cp,
  66. 'format' => $pdf_format,
  67. 'orientation' => $pdf_orientation,
  68. 'margin_left' => $pdf_margin_left,
  69. 'margin_right' => $pdf_margin_right,
  70. 'margin_top' => $pdf_margin_top,
  71. 'margin_bottom' => $pdf_margin_bottom,
  72. 'margin_header' => $pdf_margin_header,
  73. 'margin_footer' => $pdf_margin_footer,
  74. 'fontDir' => array_merge($fontDirs, [
  75. __DIR__ . '/generator/vendor/mpdf/mpdf/ttfonts',
  76. ]),
  77. 'fontdata' => $fontData + [
  78. 'dejavusans' => [
  79. 'R' => 'DejaVuSans.ttf',
  80. ]
  81. ]
  82. ]);
  83.  
  84. $mpdf->charset_in = $cp;
  85. $mpdf->title2annots = false;
  86. //$mpdf->annotMargin = 12;
  87. $mpdf->onlyCoreFonts = false; // false is default
  88. $mpdf->SetBasePath( $templatePath );
  89.  
  90. //Set PDF Template if it's set
  91. global $pdf_template_pdfpage;
  92. global $pdf_template_pdfpage_page;
  93. global $pdf_template_pdfdoc;
  94.  
  95. if ( isset($pdf_template_pdfdoc) && $pdf_template_pdfdoc != '' ) {
  96. $mpdf->SetDocTemplate($templatePath.$pdf_template_pdfdoc, true );
  97. } else if (isset($pdf_template_pdfpage) && $pdf_template_pdfpage != '' && isset($pdf_template_pdfpage_page) && is_numeric($pdf_template_pdfpage_page)) {
  98. $pagecount = $mpdf->SetSourceFile($templatePath.$pdf_template_pdfpage );
  99. if ($pdf_template_pdfpage_page < 1 ) {
  100. $pdf_template_pdfpage_page = 1;
  101. } else if ($pdf_template_pdfpage_page > $pagecount ) {
  102. $pdf_template_pdfpage_page = $pagecount;
  103. }
  104. $tplId = $mpdf->ImportPage($pdf_template_pdfpage_page);
  105. $mpdf->UseTemplate($tplId);
  106. }
  107.  
  108. $mpdf->SetAuthor(get_option('Parafia'));
  109. $mpdf->SetCreator( 'wp-zmarli' );
  110. //The Header and Footer
  111. global $pdf_footer;
  112. global $pdf_header;
  113.  
  114. if (get_option('pdf_html_header') == True) {
  115. $mpdf->SetHTMLHeader( $pdf_header );
  116. } else {
  117. $mpdf->setHeader( $pdf_header );
  118. }
  119. if (get_option('pdf_html_footer') == True) {
  120. $mpdf->SetHTMLFooter( $pdf_footer );
  121. } else {
  122. $mpdf->setFooter( $pdf_footer );
  123. }
  124.  
  125. /**
  126. * Allow to override any settings before writing the output
  127. */
  128. $mpdf = apply_filters( 'wp-zmarli_adjust_settings', $mpdf );
  129.  
  130.  
  131. if (get_option('zmarli_theme_pdf') != '' && file_exists($templatePath.get_option('zmarli_theme_pdf').'.css' ) ) {
  132. //Read the StyleCSS
  133. $tmpCSS = file_get_contents($templatePath.get_option('zmarli_theme_pdf').'.css' );
  134. $mpdf->WriteHTML( $tmpCSS, \Mpdf\HTMLParserMode::HEADER_CSS );
  135. }
  136.  
  137.  
  138. $mpdf->WriteHTML($content);
  139.  
  140. /**
  141. * Allow to process the pdf by an 3th party plugin
  142. */
  143. do_action( 'mpdf_output_wp_zmarli', $mpdf, $pdf_filename );
  144.  
  145.  
  146. if ( get_option('zmarli_caching_pdf' ) == true ) {
  147. file_put_contents( mpdf_getcachedir_wp_zmarli() . get_option( 'zmarli_theme_pdf' ) . '_' . $pdf_ofilename . '.cache', date('d-m-Y', time()) );
  148. $mpdf->Output( mpdf_getcachedir_wp_zmarli().get_option( 'zmarli_theme_pdf' ).'_'.$pdf_ofilename, 'F' );
  149. if ( $outputToBrowser == true ) {
  150. $mpdf->Output($pdf_filename, 'D' );
  151. }
  152.  
  153. } else {
  154. if ( $outputToBrowser == true ) {
  155. $mpdf->Output($pdf_filename, 'I' );
  156. }
  157. }
  158. }

Tą function zapisuje wyniki

Tak wygląda skrypt wyjściowy to co ma być wygenerowane dla użytkownika i administratora

  1. <?php
  2.  
  3. global $wpdb;
  4. $current_user = wp_get_current_user();
  5. $generuj=$wpdb->get_row("SELECT zm.*, w.*, u.* FROM ".$wpdb->prefix."zamowienia_mszy zm
  6. LEFT JOIN ".$wpdb->prefix."wyszukiwarka w ON zm.zamowienia_mszy_id_zmarlej = w.Id
  7. LEFT JOIN ".$wpdb->prefix."users u ON zm.zamowienia_mszu_user_id = u.ID
  8. WHERE zamowienia_mszy_id=".$_GET['zamowienia_mszy_id']." OR zamowienia_mszu_user_id=".$current_user->ID."");
  9.  
  10. $dane_zmarłego = $generuj->imie." ".$generuj->nazwisko;
  11. $html ='<table border="0" valign="middle">
  12. <tr align="center" style="display:table-cell;vertical-align:middle;">
  13. <td height="20px" ></td><td height="20px"></td><td height="20px">'.get_option('miejscowosc').' '.date("d-m-Y", time()) .'</td>
  14. </tr>
  15. <tr>
  16. <td align="center"></td><td align="center" ></td><td align="center">'.__('Miejscowość, data','zamow_msze').'</td>
  17. </tr>
  18. </table>
  19. <div class="clear"></div>
  20. <table border="0">
  21. <tr align="center" style="display:table-cell;vertical-align:middle;">
  22. <td height="20px" >Miłosierdzia Bożego w Puławach'.get_option('parafia').'</td><td height="20px" border-color="#E0E0E0" ></td><td bordercolor="#E0E0E0" height="20px">'.$generuj->zamowienia_mszy_zamawiajacy.'</td>
  23. </tr>
  24. <tr>
  25. <td align="center">'.__('Nazwa Parafii ','zamow_msze').'</td><td align="center"></td><td align="center">'.__('Imię i nazwisko zamawiąjącego','zamow_msze').'</td>
  26. </tr>
  27. </table>
  28.  
  29. <h1 style="text-align:center;">'.__('POTWIERDZENIE ZAMÓWIENIA','zamow_msze').'</h1>
  30. <table border="0">
  31. <tr style="display:table-cell;vertical-align:middle;">
  32. <td height="20px" >'.sprintf(__('Szanowna/ny %s,','zamow_msze'), $generuj->zamowienia_mszy_zamawiajacy).'<br /><br />
  33. '.sprintf(__('Uprzejmie informuję, iż Msza Święta za zmarłą/łego %s,','zamow_msze'), $dane_zmarłego).''.sprintf(__('Złozona/ny w sektorze %s,','zamow_msze'), $generuj->sektor).''.sprintf(__('Rządzie %s,','zamow_msze'), $generuj->rzad).''.sprintf(__('pole Grobu %s,','zamow_msze'), $generuj->pole_grobu).''.__('Została zamówiona. <br />','zamow_msze').'
  34. '.__('Wszystkie informacje są informacjami, dla zamawiającego Mszę. To potwierdzienie jest potwierdzieniem że msza została zamówiona i można nim się opszeć w kancelarii.<br /><br /> Zapraszamy do kancelarii o opłacenie tej Mszy świętej.','zamow_msze').'<br /><br />
  35. <br /><br /></td>
  36. </tr>
  37. </table>
  38. <table border="0" style="width:626px;float:right;position: relative; left:50px;">
  39. <tr>
  40. <td>'.__('Z poważaniem','zamow_msze').'</td>
  41. </tr>
  42. <tr>
  43. <td align="right">'.__('ks.Proboszcz','zamow_msze').'</td>
  44. </tr>
  45. </table>
  46. <style>
  47. .clear{clear:both}
  48. </style>';
  49. echo mpdf_output_wp_zmarli($html,get_option('zmarli_name_pdf'), ZMARLI_PATH.'theme/' );
nospor
Daj
exit;
na koncu
pawel06281990
Cytat(nospor @ 23.02.2022, 11:59:55 ) *
Daj
exit;
na koncu


Dałem nic to nie daje już nie wiem co jest nie tak sadsmiley02.gif Jeszcze raz go przerobie zobaczę co z tego będzie

Naprawiłem i teraz działa tak jak powinno działać wszystko teraz jest ok dziękuję wszystkim za pomoc.
nospor
I co bylo nie tak?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.