Autor wpisu: Diabl0, dodany: 19.12.2008 21:53, tagi: zend_framework, php
Tym razem zadanie wydawało się banalne - ułatwić życie użytkownikom umożliwiając im masowe drukowanie zleceń raz na jakiś czas, zamiast przy każdym nowym zleceniu. Zlecenia w formacie PDF były zapisywane do plików. Teraz wystarczyło tylko połączyć te kilka/naście plików w jeden wielostronnicowy PDF (użytkownicy powiesili by mnie za jaja jakby musieli klikać po koleji każdy PDF i klikać “Drukuj”). Tylko…
Pierwszy pomysł jaki mi się nasunął to Zend_Pdf. Widziałem tam i Zend_Pdf_Page, i możliwość wczytania gotowego pliku. Prawie się zdziwiłem na myśl że w końcu ten IMHO bezcelowy komponent Zend_Pdf do czegoś się przyda. Niestety, po raz kolejny okazało się że jest nieprzydatna do niczego. Pomijając problemy z wczytaniem PDF’a wygenerowanego przez TCPDF:
(”Unsupported PDF version. Zend_Pdf supports PDF 1.0-1.4. Current version - ‘1.7′“)
gdzie w kodzie warunek wygląda następująco:
$pdfVersion = (float)substr($pdfVersionComment, 5); if ($pdfVersion < 0.9 || $pdfVersion >= 1.61) { /** * @todo * To support PDF versions 1.5 (Acrobat 6) and PDF version 1.7 (Acrobat 7) * Stream compression filter must be implemented (for compressed object streams). * Cross reference streams must be implemented */ throw new Zend_Pdf_Exception(sprintf('Unsupported PDF version. Zend_Pdf supports PDF 1.0-1.4. Current version - \'%f\'', $pdfVersion)); }
To jeszcze przy próbie utworzenia nowego dokumentu i przypisania mu stron z innego dokumentu ładny wyjątek:
“Page is attached to one documen, but rendered in context of another.”
Pozostało w takim razie Google, a tam… niewiele możliwości. Albo komercja, albo rozwiązania systemowe, i… mała perełka: FPDI
FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF, which was developed by Olivier Plathey. Apart from a copy of FPDF, FPDI does not require any special PHP extensions.
Since version 1.2.1, FPDI only supports the 1.6 version of FPDF.
Po chwili moją uwagę przyciągnęło jeszcze jedno (dość ciekawie brzmiące) zdanie:
Autor wpisu: Jaroslaw Mężyk, dodany: 16.12.2008 21:41, tagi: php
Autor wpisu: Diabl0, dodany: 13.12.2008 09:49, tagi: php
Dystrybucja Debian ma bardzo ścisłą i ostrą politykę dotyczącą stabilności gotowych pakietów oraz używania wyłącznie otwartego i wszędzie dostępnego kodu (włącznie z wszelkiego rodzaju algorytmami szyfrującymi i kodującymi które np. w Stanach podlegają dziwnym regulacjom). Dlatego też w stabilnej wersji Debian Etch 4.0 pakiet ffmpeg nie jest dostępny, natomiast w niestabilnym Sid znajduje się stosunkowo stara, mocno ograniczona wersja. Samodzielna kompilacja ffmpeg pozwoli na użycie najnowszej i najbardziej rozbudowanej wersji z wsparciem dla praktycznie wszystkich popularnych formatów video.
Wymagane pakiety debiana
- libavcodec0d
- libavformat0d
- libsdl1.2debian
- libimlib2-dev
- libfreetype6-dev
- liba52-dev
- libgsm1-dev
- libtheora-dev
- libvorbis-dev
- yasm
- subversion-tools
- libdc1394-13-dev
- re2c
aptitude update aptitude install libavcodec0d libavformat0d libsdl1.2debian libimlib2-dev libfreetype6-dev liba52-dev libgsm1-dev libtheora-dev libvorbis-dev yasm subversion-tools libdc1394-13-dev re2c
instalacja liblame
(http://sourceforge.net/project/showfiles.php?group_id=290)
./configure --prefix=/usr make make install
instalacja faac
http://www.audiocoding.com/downloads.html
./bootstrap ./configure --prefix=/usr make make install
instalacja libmp4v2
./configure --prefix=/usr make make install
instalacja faad
http://www.audiocoding.com/downloads.html
autoreconf -vif ./configure --prefix=/usr --with-mp4v2 make make install
instalacja libx264
(http://www.videolan.org/developers/x264.html)
./configure --prefix=/usr --enable-shared make make install
instalacja libxvid
(http://www.xvid.org/Downloads.43.0.html)
cd build/generic ./configure --prefix=/usr make make install
kompilacja ffmpeg
http://ffmpeg.mplayerhq.hu/ (http://ffmpeg.mplayerhq.hu/ffmpeg-export-snapshot.tar.bz2)
./configure --prefix=/usr --enable-nonfree --enable-libmp3lame --enable-swscaler --enable-liba52 --enable-libdc1394 --enable-gpl --enable-libfaac --enable-libfaad --enable-libgsm --enable-libgsm --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-pthreads --enable-encoder=flv --enable-shared make make install
instalacja ffmpeg-php
http://sourceforge.net/project/showfiles.php?group_id=122353
Autor wpisu: Splatch, dodany: 09.12.2008 17:10, tagi: php
Java od wersji 5.0 zawiera możliwość definiowania typów wyliczeniowych. Jednym z praktycznych przykładów zastosowania tego mechanizmu jest TimeUnit. Enum ten służy do konwertowania jednostek czasu pomiędzy różnymi wielkościami - na przykład z minut na sekundy:
Autor wpisu: Diabl0, dodany: 04.12.2008 02:28, tagi: php
Kolejny pozornie prosty problem, i kolejne 2 godziny z życia, tym razem na próbie kompilacli pdo_oci pod Debianem. Pomijam fakt że Debian nie ma gotowego pakietu - zdarza się. Ale już same problemy z zależnościami to lekka przesada.
Pomimo poprawnie zainstalowanego PECL/PEAR z paczek próba instalacji pdo_oci kończy się komunikatem:
pear/PDO_OCI requires PHP extension “pdo” (version >= 1.0) No valid packages found install failed
pomimo:
diabl0@G4:~$ pecl list diabl0@G4:~$ pecl list Installed packages, channel pecl.php.net: ========================================= Package Version State PDO 1.0.3 stable PDO_MYSQL 1.0.2 stable PDO_PGSQL 1.0.2 stable
I cóż począć? Google
Po kilkudziesięciu minutach i wielu próbach trafiłem w końcu na zgłoszenie buga: Bug #9253 Unable to install PDO_OCI w którym w końcu znalazłem konkretne i przydatne informacje. A więc do rzeczy i pracy.
Po próbach z pecl miałem już ściągnięte źrudła w /tmp/pear/download/PDO_OCI-1.0
InstantClient pobrany z http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linux-amd64.html (taką mam arch, u was może być inna), przy okazji duży minus dla oracla za konieczność rejestracji i brak możliwości pobrania tego przez lynx/wget. InstantClient wrzucony do /usr/local/instantclient, podobnie jak i SDK. Dodatkowo od razu linkujemy sobie /usr/local/instanclient/libclntsh.so.10.1 do /usr/local/instanclient/libclntsh.so
W /etc/ld.so.conf dopisujemy linijkę /usr/local/instantclient i odpalam: