![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 4 Dołączył: 29.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Skorzystałem z klasy zip() tworzącej w locie spakowane archiwa z pewną zawartością. Moją zawartością mają być pliki *doc, które aby otworzyć w MS WORD, najpierw trzeba wybrać dla nich odpowiednie kodowanie. Jak zrobić, jak generować takie pliki, aby nie mieć tego okienka??
Klasa wygląda następująco: Kod class zip { var $datasec = array(); var $ctrl_dir = array(); var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; var $old_offset = 0; function addFile($data, $name) { $name = str_replace('\\', '/', $name); $fr = "\x50\x4b\x03\x04"; $fr .= "\x14\x00"; // ver needed to extract $fr .= "\x00\x00"; // gen purpose bit flag $fr .= "\x08\x00"; // compression method $fr .= "\x00\x00\x00\x00"; // last mod time and date $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($data); $zdata = substr(substr($zdata, 0, strlen($zdata)-4),2); // fix crc bug $c_len = strlen($zdata); $fr .= pack('V', $crc); // crc32 $fr .= pack('V', $c_len); // compressed filesize $fr .= pack('V', $unc_len); // uncompressed filesize $fr .= pack('v', strlen($name)); // length of filename $fr .= pack('v', 0); // extra field length $fr .= $name; $fr .= $zdata; $fr .= pack('V', $crc); // crc32 $fr .= pack('V', $c_len); // compressed filesize $fr .= pack('V', $unc_len); // uncompressed filesize $this->datasec[] = $fr; $cdrec = "\x50\x4b\x01\x02"; $cdrec .= "\x00\x00"; // version made by $cdrec .= "\x14\x00"; // version needed to extract $cdrec .= "\x00\x00"; // gen purpose bit flag $cdrec .= "\x08\x00"; // compression method $cdrec .= "\x00\x00\x00\x00"; // last mod time & date $cdrec .= pack('V', $crc); // crc32 $cdrec .= pack('V', $c_len); // compressed filesize $cdrec .= pack('V', $unc_len); // uncompressed filesize $cdrec .= pack('v', strlen($name)); // length of filename $cdrec .= pack('v', 0); // extra field length $cdrec .= pack('v', 0); // file comment length $cdrec .= pack('v', 0); // disk number start $cdrec .= pack('v', 0); // internal file attributes $cdrec .= pack('V', 32); // external file attributes - 'archive' bit set $cdrec .= pack('V', $this->old_offset); $this->old_offset += strlen($fr); $cdrec .= $name; $this->ctrl_dir[] = $cdrec; } function file() { $data = implode('', $this->datasec); $ctrldir = implode('', $this->ctrl_dir); return $data.$ctrldir.$this->eof_ctrl_dir. pack('v', sizeof($this->ctrl_dir)). // total # of entries "on this disk" pack('v', sizeof($this->ctrl_dir)). // total # of entries overall pack('V', strlen($ctrldir)). // size of central dir pack('V', strlen($data)). // offset to start of central dir "\x00\x00"; // .zip file comment length } function tofile($name) { $f = fopen($name, "wb"); fwrite($f, $this->file()); fclose($f); } function todownload($name) { header("Content-type: application/octet-stream"); header("Content-disposition: attachment; filename=$name"); echo $this->file(); } } Natomiast plik generuję w następujący sposób: Kod $dane = @mysql_fetch_array($zap); $zip = new zip(); // tworzę nowy obiekt $jeden = $dane['tytul_'.$ln]; $dwa = $dane['tresc_'.$ln]; $dane = "\n".$jeden."\n\n".$dwa; //$dane = iconv("", "UTF-8", $dane); $zip->addfile($dane, "tekst.rtf"); $zip->todownload("archiwum.zip"); Jakieś rady?? Częściowo doszedłem już do wniosku, iż wina leży w pobieranych danych z bazy. Bo gdy tekst nie zawiera polskich znaków, to wszystko jest ok, gdy jednak zawiera, wówczas pojawia się okno z wyborem kodowania. Ale co z tym dalej?? Ten post edytował Czadus 23.12.2008, 16:54:37 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 568 Pomógł: 192 Dołączył: 7.03.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 4 Dołączył: 29.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Hej. Dzięki za info, jak tylko będę w pracy, sprawdzę, czy mi to pomoże i wówczas coś więcej napiszę. Dzięki
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Z tego co wiem, pliki doc są binarne i nie możesz od tak po prostu umieścić w nich tekstu, bo word potraktuje je jak zwykłe pliki txt. Już lepiej zapisuj to w txt i otwieraj w notatniku, bądź przyjrzyj się łatwiejszemu w implementacji formatu, jak chociażby rtf.
http://www.google.pl/search?hl=pl&q=rt...=Szukaj&lr= Ten post edytował l0ud 23.12.2008, 21:44:02 -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 4 Dołączył: 29.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Same w sobie pliki *.rtf tworzę bez problemów, jednak problem jest ze znakami. Dane w bazie są w UTF-8, w pliku stworzonym mam same krzaki i nie wiem co z nimi zrobić. Nie wiem jakie mają mieć kodowanie, czy co w końcu z tym zrobić, aby było dobrze.
Skorzystałem z klasy http://www.phpclasses.org/browse/package/1805.html. Skryptu też nie mogę zrobić na sztywno ponieważ mam wersje językowe strony i znaki niemieckie także będą potrzebowały odpowiedniego kodowania. Czy ktoś miał już podobny problem z tą klasą co ja?? Może jakaś rada?? Pomoc?? Witam. Generują plik rtf, jednak mam problem z dwoma elementami. Z dodawaniem nowej linii, ale to akurat mało ważne na razie. Ale ważniejsze jest kotowanie. Dane w bazie mam w UTF-8. Wysyłając do pliku rtf zamieniam je albo na windows-1250, iso-8859-2 i inne, i nic nie dziala. Ciagle mam krzaki. Jak to przekodować, aby było oks. Mało tego, potrzebuje miec takie kodowanie, aby zarowno polskie, jak i niemieckie i angielskie teksty dobrze byly wyswietlane. Prosze o pomoc. Tak tworzę sobie samego RTF-a Kod // pobieramy dane odnosnie pobieranego artykulu $zap = @mysql_query("SELECT * FROM `prasa` WHERE `status`='1' AND `id`='".$numerArtykulu[0]."';"); $dane = @mysql_fetch_array($zap); // niejawnie odsylamy usera do pliku, w ktorym wygenerowany zostanie plik PDF $rtf = new rtf("./include/rtf_rtf_config.php"); $rtf->setPaperSize(5); $rtf->setPaperOrientation(1); $rtf->setDefaultFontFace(0); $rtf->setDefaultFontSize(24); $rtf->setAuthor("noginn"); $rtf->setOperator("me@noginn.com"); $rtf->setTitle("RTF Document"); $rtf->addColour("#000000"); $rtf->addText(iconv("UTF-8", "ISO-8859-2", $dane['tytul_'.$ln].'\n\n')); $rtf->addText(iconv("UTF-8", "ISO-8859-2", $dane['tresc_'.$ln].'\n\n')); $rtf->getDocument(); Nikt nie ma pomysłu?? Ten post edytował Czadus 12.01.2009, 16:27:55 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 05:05 |