Autor wpisu: Diabl0, dodany: 08.12.2009 12:35, tagi: php
Ostatnio dawno nic nie pisałem, ale niestety nie zajmowałem się niczym nadzwyczajnym, ciekawym czy ambitnym. Dzisiaj też nie będzie o niczym ambitnym (dla większości też o niczym ciekawym), ale być może niektórym ułatwi to pracę.
Niestety, jako że zajmuję się jednym podprojektem samodzielnie, to na mnie trafiła żmudna robota z generowaniem PDF’ów. A żeby nie było zbyt łatwo, to PDF”y muszą być wygenerowane na formularzu dostarczonym przez zewnętrzną instytucję w identycznym układzie. Słowem, trzeba nanieść masę różnych tekstów, ticków itp. w ściśle określone miejsca na skanie formularza. Jak to nazywa współpracownik – gra w statki
Na dodatek jakoś marnie mi szło to całe “trafianie”. Nijak “milimetry TCPDF nie pasowały mi do tego co pojawia się na ekranie, przez co “zabawa” była bardzo czasochłonna. Do czasu aż nie wpadłem na pomysł banalny w swej prostocie, ale znakomicie ułatwiający pracę.
Nałożymy sobie tymczasową siatkę na PDF z skalą
Od pomysłu do realizacji, chwila programowania i odpowiednia metoda TCPDF gotowa.
Prawda że genialne? A dzięki tej prostej siatce w jeden dzień udało mi się “trafić więcej statków” niż przez ostatnie 3
A dla chętnych troszkę kodu:
class Mao_TCPDF extends TCPDF { public function drawGrid ($minor = 5, $major = 10, $font = array(), $colors = array()) { $_fontSize = $this->getFontSizePt(); $_fontFamily = $this->getFontFamily(); $_autoPageBreak = $this->AutoPageBreak; $minorColor = array(0 , 0 , 0); $majorColor = array(255 , 0 , 0); if (isset($colors['minor'])) { $minorColor = $colors['minor']; } if (isset($colors['major'])) { $minorColor = $colors['major']; } if (is_array($font)) { if (isset($font['family'])) { $this->SetFont($font['family']); } $this->SetFontSize((isset($font['size']) ? $font['size'] : 6)); } $this->SetAutoPageBreak(false, 0); for ($x = 0; $x < $this->w; $x = $x + $minor) { if ($x % $major == 0) { $this->Line($x, 0, $x, $this->h, array('width' => 0.01 , 'color' => $majorColor)); } else { $this->Line($x, 0, $x, $this->h, array('width' => 0.01 , 'color' => $minorColor)); } $this->MultiCell(5, $this->getFontSizePt(), $x, 0, 'C', 0, 1, $x - 2.5, 0, true, 0, true); $this->MultiCell(5, $this->getFontSizePt(), $x, 0, 'C', 0, 1, $x - 2.5, $this->h - ($this->getFontSizePt()/2), true, 0, true); } for ($y = 0; $y < $this->h; $y = $y + $minor) { if ($y % $major == 0) { $this->Line(0, $y, $this->w, $y, array('width' => 0.01 , 'color' => $majorColor)); } else { $this->Line(0, $y, $this->w, $y, array('width' => 0.01 , 'color' => $minorColor)); } $this->MultiCell(5, $this->getFontSizePt(), $y, 0, 'L', 0, 1, 0, $y - ($this->getFontSizePt()/2), true, 0, true); $this->MultiCell(5, $this->getFontSizePt(), $y, 0, 'R', 0, 1, $this->w - 5 , $y - ($this->getFontSizePt()/2), true, 0, true); } $this->SetFont($_fontFamily); $this->SetFontSize($_fontSize); $this->SetAutoPageBreak($_autoPageBreak); } }
Metoda przeznaczona jest do TCPDF lub klasy dziedziczącej, ze względu na użycie kilku pól prywatnych. Mam nadzieję że komuś się przyda.
Autor wpisu: cojack, dodany: 07.12.2009 17:00, tagi: php
Dawno nic ciekawego nie napisałem, nie martwcie się, nic się nie zmieni. Ale chciałbym poruszyć temat, który jest dość “śmieszny”. Dużo nieświadomych programistów swojej upośledzonej wiedzy nt tego co robią używają określenia czegoś czym nie jest. A mowa tutaj o inicjacji (poprawnie inicjalizacji). Śmieszy mnie jak widzę gdzieś w necie jakiś temat poruszony o programowaniu oczywiście i tam wojny, oj wojny kto lepiej kto ładniej, oj jakie wojny… A najbardziej rozbawia mnie:
“źle inicjujesz zmienne”
Jak pisze mój promotor programowania J. Grębosz, sprawdź sobie czym jest jedno a czym drugie to się uśmiejesz. I rzeczywiście można się uśmiać i jednocześnie zrobić z siebie totalne pośmiewisko. Ale wybaczajmy ludziom upośledzonym umysłowo. Wychodzących z założenia że jak strzeli się pięćdziesiąt wykrzykników i napiszę się tekst za pomocą CapsLock’a to się wszystko wie. A moja domena jest sprzeczna z tym założeniem, oto one:
“jeżeli czegoś nie wiem, to nie myślę że wiem”
Mam nadzieję że gdy ktoś będzie szukał czegoś o inicjacji w programowaniu to trafi na ten wpis i się 3x dobrze zastanowi niczym użyje tego słowa.