Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] łączenie pdf'ów - PDFMerger
hettmix
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Witam.

Mam następujący problem - w polu blob bazy program zapisuję pliki pdf generowane przez użytkowników. Zapis tych plików oraz ich późniejszy odczyt/wyświetlenie działa bez żadnych problemów. To z czym nie mogę się aktualnie uporać, to pobranie wszystkich plików pdf z bazy i wygenerowanie jednego zbiorczego pdf'a.
Jako że program działa na serwerku Synology nie mogę doinstalować np. PDFTK, w związku z czym skorzystałem z klasy PDFMerger.
  1. $strSQL = "SELECT pdf_plik FROM tbl_zwykle_2str_pdf";
  2. $objQuery = mysql_query($strSQL);
  3. $resultData = array();
  4. for ($i=0;$i<mysql_num_rows($objQuery);$i++) {
  5. $result = mysql_fetch_array($objQuery);
  6. array_push($resultData,$result);
  7. }
  8.  
  9. $pdf = new PDFMerger;
  10.  
  11. $pdf->addPDF($resultData, 'all')
  12. ->merge('file', '/modules/mod_zbiorczy_pdf/tmp/zbiorczy_test.pdf');
  13.  
  14. echo "PDF Created Click <a href=\"/modules/mod_zbiorczy_pdf/tmp/zbiorczy_test.pdf\">here</a> to Download";

Powyższy kod zwraca jednak błędy:
- file_exists() expects parameter 1 to be string PDFMerger.php on line 47
- uncaught exception 'Exception' with message 'Could not locate PDF on 'Array' PDFMerger.php on line 58

Będę wdzięczny za pomoc w rozwiązaniu tego problemu, bądź naprowadzenie na właściwe tory. Pewnie można ten temat ugryźć z innej strony.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




$result = mysql_fetch_array($objQuery);
array_push($resultData,$result);
O tu panie kolego otrzymujesz tablicę. A ty masz tam przekać przecież ścieżkę do PDF a nie tablicę...

Tak ma być:
$result = mysql_fetch_array($objQuery);
array_push($resultData,$result['pdf_plik']);
Go to the top of the page
+Quote Post
hettmix
post
Post #3





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(nospor @ 21.11.2012, 14:06:40 ) *
$result = mysql_fetch_array($objQuery);
array_push($resultData,$result);
O tu panie kolego otrzymujesz tablicę. A ty masz tam przekać przecież ścieżkę do PDF a nie tablicę...

Tak ma być:
$result = mysql_fetch_array($objQuery);
array_push($resultData,$result['pdf_plik']);


Po zmianie w dalszym ciągu otrzymuję te same błędy:
- file_exists() expects parameter 1 to be string PDFMerger.php on line 47
- uncaught exception 'Exception' with message 'Could not locate PDF on 'Array' PDFMerger.php on line 58

Jak już pisałem w bazie trzymam pdf'y w polach blob, a nie ścieżki do plików na dysku.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




1) wg komunikatu ty nadal przekazujesz tam tablicę a nie tekst
Pokaż kod po poprawkach

2) No i najważniejsze: wg. komunikatu on wymaga ścieżki do pliku a nie zawartości pliku (IMG:style_emoticons/default/smile.gif)

Dobra, zajrzałem na stronę PDFMerger i tam jak wół napisane jest, że metoda addPDF przyjmuje scięzkę do pliku. A ty radośnie od tak sobie wrzucasz tam tablice. Kurcze, Ty myślisz, że jak sobie zamienisz na tablice i to tablice nie ściezek a zawartosci to w magiczny sposób klasa to sobie obsłuży bo Ty tak chcesz?
Go to the top of the page
+Quote Post
hettmix
post
Post #5





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(nospor @ 21.11.2012, 15:15:33 ) *
1) wg komunikatu ty nadal przekazujesz tam tablicę a nie tekst
Pokaż kod po poprawkach

2) No i najważniejsze: wg. komunikatu on wymaga ścieżki do pliku a nie zawartości pliku :)


Kod tak jak proponowałeś:
  1. $strSQL = "SELECT pdf_plik FROM tbl_zwykle_2str_pdf";
  2. $objQuery = mysql_query($strSQL);
  3. $resultData = array();
  4. for ($i=0;$i<mysql_num_rows($objQuery);$i++) {
  5. $result = mysql_fetch_array($objQuery);
  6. array_push($resultData,$result['pdf_plik']);
  7. }
  8.  
  9. $pdf = new PDFMerger;
  10.  
  11. $pdf->addPDF($resultData, 'all')
  12. ->merge('file', '/modules/mod_zbiorczy_pdf/tmp/zbiorczy_test.pdf');
  13.  
  14. echo "PDF Created Click <a href=\"/modules/mod_zbiorczy_pdf/tmp/zbiorczy_test.pdf\">here</a> to Download";


A co do ścieżki do pliku, to właśnie wolałbym pobierać pdf (ich zawartość) z bazy i łączyć w jeden zbiorczy.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Dodałem notkę do poprzedniego posta. Przeczytaj.

Cytat
A co do ścieżki do pliku, to właśnie wolałbym pobierać pdf (ich zawartość) z bazy i łączyć w jeden zbiorczy.
To że Ty byś wolał, to nie znaczy że klasa się do Ciebie dostosuje. To Ty masz się dostować do możliwości klasy. To Ty teoretycznie jesteś istotą rozumną a nie klasa php.

Skoro klasa przyjmuje tylko ścieżki do plików to:
albo modyfikujesz klasę, by działała jak Ty chesz
albo się dostosowujesz Ty i pdf z bazy zapisujesz do pliku a potem dla klasy zapodajesz tę ścieżkę do świeżo zapisanego pliku
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
hettmix
post
Post #7





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(nospor @ 21.11.2012, 15:21:17 ) *
Dodałem notkę do poprzedniego posta. Przeczytaj.

To że Ty byś wolał, to nie znaczy że klasa się do Ciebie dostosuje. To Ty masz się dostować do możliwości klasy. To Ty teoretycznie jesteś istotą rozumną a nie klasa php.

Skoro klasa przyjmuje tylko ścieżki do plików to:
albo modyfikujesz klasę, by działała jak Ty chesz
albo się dostosowujesz Ty i pdf z bazy zapisujesz do pliku a potem dla klasy zapodajesz tę ścieżkę do świeżo zapisanego pliku



No w sumie racja - dzięki za poświęcony czas. Odezwę się jak przerobię program na zapisywanie w bazie ścieżek, a nie pdf'ów w blobie.

A tak na marginesie jest jakaś inna opcja, żeby pobrać i scalić pdf'y z pól blob ?
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
A tak na marginesie jest jakaś inna opcja, żeby pobrać i scalić pdf'y z pól blob ?
W tej klasie z tego co widzę to nie.

Cytat
Odezwę się jak przerobię program na zapisywanie w bazie ścieżek, a nie pdf'ów w blobie.
Pamiętaj tylko o tym, że addPDF przyjmuje tylko jedną ścieżkę a nie tablicę ścieżek. Musisz wywołać addPDF tyle razy, ile będziesz miał ścieżek
Go to the top of the page
+Quote Post
hettmix
post
Post #9





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(nospor @ 21.11.2012, 15:29:41 ) *
W tej klasie z tego co widzę to nie.

Pamiętaj tylko o tym, że addPDF przyjmuje tylko jedną ścieżkę a nie tablicę ścieżek. Musisz wywołać addPDF tyle razy, ile będziesz miał ścieżek


OK - przebudowałem program i w tej chwili w bazie zapisuję ścieżki do pliku, które wyglądają np. tak /volume1/web/Joomla_1.5/modules/mod_zbiorczy_pdf/tmp/trafic_2_strony.pdf
Niestety podczas scalania plików w dalszym ciągu dostaję te same komunikaty o błędach.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




No ale pokaż jaki teraz masz kod.... Czy za każdym razem muszę to samo pisać...?
Go to the top of the page
+Quote Post
hettmix
post
Post #11





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(nospor @ 22.11.2012, 08:12:31 ) *
No ale pokaż jaki teraz masz kod.... Czy za każdym razem muszę to samo pisać...?


Trochę przerobiłem ten kod:
  1. header('Content-type: application/pdf');
  2.  
  3. $strSQL = "SELECT pdf_nazwa_pliku FROM tbl_zwykle_2str_pdf";
  4. $objQuery = mysql_query($strSQL);
  5. $resultData = array();
  6. for ($i=0;$i<mysql_num_rows($objQuery);$i++) {
  7. $result = mysql_fetch_array($objQuery);
  8. array_push($resultData,readfile($result['pdf_nazwa_pliku']));
  9.  
  10.  
  11. $pdf = new PDFMerger;
  12. $pdf->addPDF($resultData, 'all')
  13. ->merge('browser', '');
  14. }

Jest już jakiś postęp, bo wyświetliło mi w przeglądarce poprawnie pdf, ale tylko pierwszego. Na chwilę obecną nie bardzo wiem jak to dalej ugryźć.
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Czy Ty wogóle czytasz dokumentacje? Czytasz co ci ludzie piszą? Bo widzę, że nie. Ciągle wychodzisz z założenia "Bo ja wolę" i się go konsekwentnie trzymasz....

Powiedz mi proszę, czego nie zrozumiałeś w tym co ci napisałem
Cytat
Pamiętaj tylko o tym, że addPDF przyjmuje tylko jedną ścieżkę a nie tablicę ścieżek. Musisz wywołać addPDF tyle razy, ile będziesz miał ścieżek

?

A najlepsze to juz w ogóle jest to:
readfile($result['pdf_nazwa_pliku'])
Po grzyba ty tam readfile dałes?
Go to the top of the page
+Quote Post
hettmix
post
Post #13





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(nospor @ 22.11.2012, 09:32:34 ) *
Czy Ty wogóle czytasz dokumentacje? Czytasz co ci ludzie piszą? Bo widzę, że nie. Ciągle wychodzisz z założenia "Bo ja wolę" i się go konsekwentnie trzymasz....

Powiedz mi proszę, czego nie zrozumiałeś w tym co ci napisałem

?

A najlepsze to juz w ogóle jest to:
readfile($result['pdf_nazwa_pliku'])
Po grzyba ty tam readfile dałes?


Nie ma się co tak gorączkować, w końcu człowiek uczy się na błędach. Zwłaszcza początkujący w dane dziedzinie.
Kod wygląda więc tak:
  1. define( '_JEXEC', 1 ) or die('Direct Access to this location is not allowed.');
  2.  
  3. header('Content-type: application/pdf');
  4. header("Pragma: no-cache");
  5. header("Expires: 0");
  6. header("Cache-Control: must-revalidate");
  7.  
  8. require "/volume1/web/Joomla_1.5/connection/connection.php";
  9. include "/volume1/web/Joomla_1.5/joomla-auth-porzadkowe.php";
  10. include "/volume1/web/Joomla_1.5/joomla-config-porzadkowe.php";
  11. include "/volume1/web/Joomla_1.5/modules/mod_zbiorczy_pdf/pdfmerger/PDFMerger.php";
  12.  
  13.  
  14. $strSQL = ("SELECT pdf_nazwa_pliku FROM tbl_zwykle_2str_pdf") or die('Błąd zapytania select');
  15. $objQuery = mysql_query($strSQL);
  16. $resultData = array();
  17. for ($i=0;$i<mysql_num_rows($objQuery);$i++) {
  18. $result = mysql_fetch_array($objQuery);
  19. array_push($resultData,$result['pdf_nazwa_pliku']);
  20. }
  21.  
  22. $pdf = new PDFMerger;
  23. $pdf->addPDF($resultData[0], 'all')
  24. ->merge('browser', '');

Wszystko ładnie działa, po zmianie wskaźnika tablicy generują się właściwe pliki pdf - nie wiem tylko jak przekazać do funkcji addPDF wszystkie pliki.
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
w końcu człowiek uczy się na błędach.
Tak, ale jak ci ktoś wyraźnie i po polsku któryś raz skolei pisze, że addPDF przyjmuje tylko i wyłącznie ścieżke do pliku a Ty ciągle i uparcie wkładasz tam tablicę, to chyba osoba, ma prawo stracić cierpliwość, nie sądzisz? I nie wynika to z braku Twojej wiedzy a z braku myślenia.

Widzę, jak ci nie napiszę, to w życiu tego nie zrobisz....

  1. $strSQL = ("SELECT pdf_nazwa_pliku FROM tbl_zwykle_2str_pdf") or die('Błąd zapytania select');
  2.  
  3. $objQuery = mysql_query($strSQL);
  4. $pdf = new PDFMerger;
  5.  
  6. for ($i=0;$i<mysql_num_rows($objQuery);$i++) {
  7.  
  8. $result = mysql_fetch_array($objQuery);
  9.  
  10. $pdf->addPDF($result['pdf_nazwa_pliku'], 'all');
  11.  
  12. }
  13.  
  14. $pdf->merge('browser', '');
Go to the top of the page
+Quote Post
hettmix
post
Post #15





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(nospor @ 22.11.2012, 10:37:22 ) *
Tak, ale jak ci ktoś wyraźnie i po polsku któryś raz skolei pisze, że addPDF przyjmuje tylko i wyłącznie ścieżke do pliku a Ty ciągle i uparcie wkładasz tam tablicę, to chyba osoba, ma prawo stracić cierpliwość, nie sądzisz? I nie wynika to z braku Twojej wiedzy a z braku myślenia.

Widzę, jak ci nie napiszę, to w życiu tego nie zrobisz....

  1. $strSQL = ("SELECT pdf_nazwa_pliku FROM tbl_zwykle_2str_pdf") or die('Błąd zapytania select');
  2.  
  3. $objQuery = mysql_query($strSQL);
  4. $pdf = new PDFMerger;
  5.  
  6. for ($i=0;$i<mysql_num_rows($objQuery);$i++) {
  7.  
  8. $result = mysql_fetch_array($objQuery);
  9.  
  10. $pdf->addPDF($result['pdf_nazwa_pliku'], 'all');
  11.  
  12. }
  13.  
  14. $pdf->merge('browser', '');


No to zamykam temat - dzięki za zrozumienie...
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: 3.10.2025 - 04:58