dompdf: templates & $ _SESSION değişkenleri

Bu kurulum işe yarayacak mı diye merak ediyordum. Bir dizi değişkenden PDF toplu işini bir formda (duh ...) kullanarak $ _SESSION içine iterim. Buradaki fikir, şablon dosyasını dompdf motoruna aktarmak ve şablonun $ _SESSION'dan sonra PDF'ye çıkarılmasını sağlamaktır. Bana öyle geliyor ki, $ şablonu yüklendiğinde bunu yapmalı, evet?

İşte temel kod:

<?php
function renderToPDF($theTemplate = "template.php")//this is just to show the value
{
  require_once("dompdf/dompdf_config.inc.php");

  $content = file_get_contents($theTemplate); 

  if ($content !== false)
  {
    $dompdf = new DOMPDF();
    $dompdf->load_html($content);
    $dompdf->render();
    $dompdf->stream("kapow_ItWorks.pdf");
  }
}
?>

ve bu template.php dosyasıdır (temel olarak ... tüm 16 sayfayı istemezsiniz ...)

<html>
<meta>
<head>
  <link href="thisPage.css" type="text/css" rel="stylesheet">
</head>
  <body>
    

<?php echo $_SESSION['someTitle'] ?>

    

wouldn't it be nice, <?php echo $_SESSION['someName'] ?>

  </body>
</html>

bu yüzden benim düşüncem şudur: template.php, değişkenleri $ _ SESSION dizisinden dışarıya doğru herhangi bir müdahale olmaksızın çeker.

BÜYÜK BAŞLIK

Bu hoş olmaz mı, HandsomeLulu?

Sanırım sorunun cevabı: PHP dosyaları yüklendiğinde, ancak işlenmediğinde $ _ SESSION değişkenleri değerlendiriliyor mu?

WR!

0
Bu gönderide sorumun bir kısmını yanıtlayabilecek bir şey buldum (Wrikken'in cevabı). Şu an bir uçuştayım ya da bunu test edebilecek bir sistemim var ...: P
katma yazar WhiteRau, kaynak

2 cevap

file_get_contents does not evaluate the PHP file, it simply gets its contents (the file as it is in the hard drive).

İstediğinizi yapmak için, arabelleğe alma ve >

ob_start();//Start Output beffering
include $theTemplate;//include the file and evaluate it : all the code outside of <?php ?> is like doing an `echo`
$content = ob_get_clean();//retrieve what was outputted and close the OB
2
katma
HTML kodu çıkarıldı (% PDF-1.3'ten önce olanlar)
katma yazar Fabien Ménager, kaynak
Bu tür bir sorun için her zamanki şüpheli, PDF dosyasının üst kısmına PHP uyarıları/bildirimlerine neden olan çıktı tamponlamasıdır. PDF'yi bir metin düzenleyicide açarak bunu kontrol edebilirsiniz.
katma yazar BrianS, kaynak
Tamam. Şimdi gazla yemek pişiriyoruz! Tamamen mantıklı! çıktı arabelleğe bakıyordum; heyecanlı doğru yolda oldu! : PDF dosyası açmaya çalıştığında bir hata alıyorum, ama araştırmamda bunun cevabını gördüğümü düşünüyorum: "... desteklenen bir dosya türü olmadığı için veya dosya olduğundan hasar gördü. " Sanırım neredeyse her yerdeyiz! çok teşekkür ederim! : D
katma yazar WhiteRau, kaynak
Yanılmışım. farklı bir hataydı. Bu tür bir hatayı daha önce görmediğiniz sürece bakmaya devam edeceğim ...
katma yazar WhiteRau, kaynak
Ben isterdim! ...bunu nasıl yaparım? : D bir metin editöründe PDF'ye baktım ve orada hiçbir hata görmedim. Aklında, aradığım şeyden emin değilim. Çıktı PDF'sini buradan alabilirsiniz.
katma yazar WhiteRau, kaynak
bok: yanlış bağlantı. Bunun yerine bu bağlantıya gidin. bunun için üzgünüm. : P
katma yazar WhiteRau, kaynak
Durumun böyle olabileceğini düşündüm ama bunu yırtarak denediğimde açılmayacaktı. "dosya bozuk veya bozuk ve tamir edilemez". Bu beni cehenneme sokuyor. :( HTML'yi çıktı tampon dökümünden nasıl temizlerim? PHP'yi ayrıştırmak için çıktı arabelleğini kullanmanın tam anlamı değil mi?
katma yazar WhiteRau, kaynak
@Fabien: (ya da ben gibi) dosyanın da düzgün bir şekilde kapanmadığını kaçırdınız. tüm 'altbilgi' verileri gitti. akış kapanmıyor ve #EOF yok. Bir PDF'ye karşı demo01.php ile karşılaştır ve ne demek istediğimi göreceksin. Sanırım bunu başka bir yere taşımalıyım. Burada gerçekten yardımcı olabilecek biri gibi görünmüyor. : P
katma yazar WhiteRau, kaynak

bir nedenden ötürü, DEAD işlevini çağıran sayfadaki kod dosyaya dökülür. Bu başlık önce yerleştirildi. şimdi anlıyorum: referans harici bir sayfa değildi, içe aktarma ve harici sayfadım. neden tıklamadığını bilmiyorum.

anyway. as soon as i got rid of the page's extra stuff, it worked just fine. in retrospect, what dompdf needed to state was quite simply that NO HTML of ANY kind (echo, print, &c.) can be on the page that calls the function. at least that what it appears to require at this level of my knowledge.

Benim gibi, 'her şey ama cevap' bir yanlış anlama içinde olanlar, işini yapan çıplak kemik kodu:

buildPDF.php:

<?php
session_start();
$_SESSION['someTitle'] = "BIG FAT TITLE";
$_SESSION['someName'] = "HandomeLu";

$theTemplate = 'template.php';

function renderToPDF($templateFile)
{
  require_once("_dox/dompdf/dompdf_config.inc.php");
  ob_start();
  include $templateFile;
  $contents = ob_get_clean(); 

  if ($contents !== false)
  {
    $dompdf = new DOMPDF();
    $dompdf->load_html($contents);
    $dompdf->render();
    $dompdf->stream("kapow_ItWorks.pdf");
 }
}

renderToPDF($theTemplate);
?>

and this is the template.php:

    <!DOCTYPE HTML>
    <html>
    <meta>
    <head>
      <meta charset="utf-8">
      <link href="thisPage.css" type="text/css" rel="stylesheet">
    </head>
    <body>
      

<?php echo $_SESSION['someTitle'] ?>

      
wouldn't it be nice, <?php echo $_SESSION['someName'] ?> </body> </html>

Ayrıca harici CSS dosyasının sadece iyi okunduğunu unutmayın. Böylece yapı ve stili ayrı tutabilirsiniz. Ayrıca, $ _SESSION değişkenleri herhangi bir yere ayarlanabiliyor, elbette ki, test etmeyi kolaylaştırmak için onları buraya ayarladım.

Umarım bu BÜYÜK sınıfı ile başlayanlar için yararlıdır. PDF dosyalarını kranklamak ve koşturmak için arıyorsanız, bu kadar çok popo tekme, üzerinde bir tetikleyici ve bir tutuş olması gerekir. :)

yorum yapan herkese teşekkürler. Olmam gerektiği yerde beni aldın. :)

Bu site ROCKS.

WR!

1
katma