Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CakePHP] Eksport danych do PDF przy użyciu LaTeX
luk4s
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 1.10.2005

Ostrzeżenie: (0%)
-----


Witam

Piszę sobie małą aplikację w CakePHP, w której potrzebuję eksportu do PDF. Ponieważ dokumenty PDF będą trochę skomplikowane to wymyśliłem sobie, że najłatwiej będzie mi to zrobić wykorzystując LaTeXa, ponieważ jakieś doświadczenie już z nim mam i wiem, że da się za jego pomocą uzyskać ładne PDFy.

Zaznaczę w tym miejscu, że nie jestem programistą PHP, a w CakePHP piszę dopiero od niedawna, wyłącznie na swoje potrzeby.
Mój problem polega na tym, że nie wiem jak napisać ów eksport do PDF stosując się do filozofii CakePHP.

To co chcę osiągnąć:

1) W kontrolerze pobieram dane z tabeli SQL.
2) Z pobranych danych generuję plik *.tex (dokument LaTeX).
3) Przy użyciu systemowego polecenia pdflatex tworzę z dokumentu *.tex plik *.pdf.
4) Pakuję gotowego PDFa zipem i wysyłam użytkownikowi do pobrania.

Jak to zrobić w CakePHP? (IMG:style_emoticons/default/smile.gif)

Czy mój widok, do którego przekażę dane z kontrolera powinien być dokumentem LaTeX? I jak zapisać taki widok do pliku *.tex na serwerze, a następnie z niego wygenerować PDF, spakować i wysłać do użytkownika?

Pozdrawiam i bardzo proszę o jakieś nakierowanie na rozwiązanie. (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
everth
post
Post #2





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Masz parę innych dróg - użyć XSL-FO, lub PHP-owej funkcji PDF (ale to już raczej masochizm)
Co do latexa, sprawdź sobie passthru(). Nie wiem jak to będzie w wywoływaniem aplikacji systemowej na serwerze, ale lokalnie powinno ci pójść. Jak chcesz to skompresować to zapisz gdzieś wynik passthru() i skompresuj.
Go to the top of the page
+Quote Post
fleshgrinder
post
Post #3





Grupa: Zarejestrowani
Postów: 77
Pomógł: 10
Dołączył: 4.11.2007

Ostrzeżenie: (0%)
-----


byc mozne znajdziesz tam cos uzytecznego: http://bakery.cakephp.org/articles/view/cr...kephp-and-tcpdf
Go to the top of the page
+Quote Post
luk4s
post
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 1.10.2005

Ostrzeżenie: (0%)
-----


Dzięki za odpowiedzi, jednak zrobiłem tak jak pierwotnie chciałem. Poniżej opis, może się komuś przyda. (IMG:style_emoticons/default/smile.gif)

W kontrolerze napisałem sobie funkcję, która zajmuje się całą logiką generowania dokumentów pdf.

Na początku funkcji dodałem dwie linijki:
  1. $this->autoRender = false;
  2. Configure::write('debug', '0');

Pierwszej chyba nie trzeba tłumaczyć, dzięki drugiej nie zapisuje się nam "syf" w generowanym pliku.

Teraz kolejne czynności:
1) Pobieramy dane z tabeli.
2) Przy użyciu klas Folder i File tworzymy katalog roboczy i w nim plik foo.tex, do którego zapiszemy gotowy dokument LaTeXa.
3) Tworzymy nowy layout: app/views/layouts/latex.ctp, w którym zapisujemy preambułę i wszystkie rzeczy wspólne dla naszych dokumentów *.tex, np.:

  1. \documentclass[twoside,a4paper,10pt]{article}
  2. %lokalizacja
  3. \usepackage{polski}
  4. \usepackage[utf8x]{inputenc}
  5. % geometria strony i czcionki
  6. \usepackage[top=2.5cm,bottom=4cm,left=2.6cm,right=1.5cm]{geometry}
  7. \usepackage{graphicx}
  8. \usepackage{graphics}
  9. \usepackage{fancyhdr}
  10.  
  11. \begin{document}
  12.  
  13. <?php echo $content_for_layout; ?>
  14.  
  15. \end{document}


4) Tworzymy nowy wiok app/views/nazwa_naszego_kontrolera/latex.ctp
W widoku opisujemy nasze dane przekazane z kontrolera już nie HTMLem tylko składnią LaTeXa.

5) Renderujemy nasze dane i zapisujemy do pliku:
  1. $this->output = $this->render('latex', 'latex'); // $this->render('nazwa_widoku', 'nazwa_layoutu')
  2. $file->append($this->output); // obiekt klasy File
  3. $this->output = '';


6) Teraz przy użyciu systemowego polecenia pdflatex generujemy gotowy dokument PDF z naszego foo.tex i otrzymujemy pięknego pdfa. (IMG:style_emoticons/default/smile.gif)

Zależało mi mocno, by generować pdfy przy pomocy LaTeXa, ponieważ LaTeX robi to doskonale, przy czym nakład pracy jest stosunkowo mały.

Pozdrawiam (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował luk4s 30.07.2010, 17:43:07
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 12:59