|
ot Luchezar Georgiev / Todor Stamatov (8-05-2002)
reiting (18)
[ dobre ]
[ zle ]
Variant za otpechatvane
Luchezar Georgiev <lucho@maverick2000.com>
Todor Stamatov <tssdigital@yahoo.com>
02 mai 2002
versiia 0.9
(c) 2002 busbg.com
Statiiata i koda kum neia mozhe da svalite ot:
http://www.linux-bg.org/download/programs/efaxCyr.zip
1.1 TSeli
1.2 Niakolko dumi za faksovete, faks-modemite i Linuks
2. Podgotovka za kupona: kakuv softuer ni e
neobhodim
2.1.efax - programata, koiato vurshi chernata rabota
2.2.Kirilskite shriftove v ghostscript - bez tiah ne
mozhem
2.3.hml2ps - slaboto miasto
2.4.function cp1251: Hak-ut
2.5.V orbita: faks ot web-survura
2.5.1 Opisanie na funktsiite
2.5.2 Sorsovete
1. Vuvedenie
1.1 TSelta na tozi dokument e da opishe
"kirilizatsiiata" na paketa efax 0.9 kakto i niakoi
trikove za izprashtane na html-failove s faks modem.
Sushto taka sa dadeni niakolko funktsii na php za obrabotka i
izprashtane na faksove sudurzhashti tekst v cp1251
enkoding, kakto i kratko opisanie na tova, kak mozhete da
dobavite postskript kirilski shriftove v ghostscript
interpretatora. Izprashtaneto na faksove ot web-survur iziskva
root dostup (ili +s flag) na niakoi ot opisanite skriptove.
Izvun obsega na tozi dokument e kak da se predpazim ot
probivi po sigurnostta. Sushto taka funktsiite ot sorsa ne sa
predvideni da se izpulniavat ot niakolko potrebiteli na
ueb-survura ednovremenno - tova mozhe da predizvika sriv na
survura. Izpolzvaneto im v multi-yuzer rezhim shte bude opisano
v budeshtite versii na tozi dokument. Teksta i sorsovete kum
nego sa litsenzirani pod GPL2.
1.2 Niakolko dumi za faksovete, faks-modemite i Linuks
Kakto mozhe bi vi e izvestno ot bezbroinite WinModem-HOWTO i
LinModem-HOWTO, kogato stava dumi za "softuerni"
modemi pod Linuks, neshtata mogat da stanat dramatichni. Az vi
suvetvam, ako vse oshte niamate modem pri pokupkata mu da
napravite predvaritelna ugovorka s firmata ot koiato go
kupuvate, che ako ne raboti pod Linuks shte vi go smeniat.
Purvoto neshto, koeto vi e neobhodimo za da zapochnete
estestveno e faks-modema. I tui kato povecheto modemi veche si
imat vgraden faks, ottuk natatuk shte gi narichame samo modem.
Az sum testval slednite marki modemi s Red Hat (versii ot
4.2 do 7.2):
Motorola Modem Sfr 56.6
Lucent-Venus Fax Modem - tozi e PCMCA
TrendNET TFM-560X
I niakolko vutreshni, ISA s neustanoven proizhod, no
harduerni.
Linuks gi poznava i raboti bez problem s tiah v rezhim faks.
Niakoi softuerni Conexeant sushto "rabotiat" pod
Linuks, no za tselta vi triabvat draiveri, a te niamat
poddruzhka na faks rezhim. Moeto mnenie e che, povecheto vunshni
modemi shte vi svurshat rabota. Tozi dokument predpolaga
nalichieto na instaliran i gotov za rabota v faks rezhim
modem. Markata, modela i instalatsiiata na modema ne sa tselite
na tova rukovodstvo. Mozhete da proverite dali modemut vi
poddurzha faks po sledniia nachin:
Instalirate i/ili vklyuchvate modema, "palite"
minicom ili niakakuv drug terminalen emulator:
[user@host lucho]# minicom
rezultata bi triabvalo da izglezhda taka:
Welcome to minicom 1.83.1
OPTIONS: History Buffer, F-key Macros, Search History
Buffer, I18n
Compiled on Aug 28 2001, 15:09:33.
Press CTRL-A Z for help on special keys
atz
OK
AT+FCLASS=?
0,1,8
OK
0,1,8 oznachava che vashiiat modem poddurzha faks rezhim.
Ako otgovorut e samo :
O
OK
Tova oznachava che vashiiat modem ne poddurzha faks rezhim. Tova
se otnasia i za draiverite s koito rabotiat
Koneksant-modemite. Edinstvenoto reshenie, koeto moga da vi
predlozha e da si smenite modema s hardueren. Predpolagame che
vsichko e minalo kakto triabva i sega veche razpolagame s
harduera.
2. Podgotovka za kupona: kakuv softuer ni e neobhodim
2.1. efax - programata, koiato vurshi chernata rabota Ako
vashata distributsiia ne go e instalirala, mozhete da namerite
efax paket-a na adres: http://casas.ee.ubc.ca/efax/.
Razpaketiraite sorsovete v /usr/src/efax- . Nie shte
predpolozhim che putiat kum sorsovete e: /usr/src/efax-0.9/
cd /usr/src/efax-0.9/
[user@host efax-0.9]#make Sled kato mine kompilatsiiata,
redaktiraite /usr/src/efax-0.9/fax. Tova e shel-skript, v
koito mozhete da ukazhete vasheto ime, organizatsiiata, kak da
nabira i oshte mnogo neshta koito sa opisani v dokumentatsiiata na
paketa. Za da go instalirate izpulnete komandata:
[user@host efax-0.9]#make install
ako neshto ne vi haresa v posledstvie, vinagi mozhete da
promenite nastroikite v /usr/bin/fax. Sega veche efax e gotov
za rabota ;). Neka da go testvame:
Napravete edin "testov" faks s komandata:
[user@host efax-0.9]# fax make COPYING
tova shte generira v tekushtata direktoriia niakolko faila:
[user@host efax-0.9]# ls -l COPYING*
-rw-r--r-- 1 lucho root
18007 Feb 20 1999 COPYING
-rw-r--r-- 1 root root
58562 May 1 15:21 COPYING.001
-rw-r--r-- 1 root root
53418 May 1 15:21 COPYING.002
-rw-r--r-- 1 root root
45348 May 1 15:21 COPYING.003
-rw-r--r-- 1 root root
37731 May 1 15:21 COPYING.004
-rw-r--r-- 1 root root
26217 May 1 15:21 COPYING.005
-rw-r--r-- 1 root root
16678 May 1 15:21 COPYING.006
[user@host efax-0.9]#
tezi s razshireniia 001-006 sa "nashite
failove".
Vizhte kakvo e generiral fax-skripta s komandata:
[user@host efax-0.9]# file COPYING.001
COPYING.001: TIFF image data, little-endian
[user@host efax-0.9]#
Kato tsialo, efax izprashta failove v format tiffg3. Ne go
zabraviaite! Nezavisimo kakvo ste reshili da izprashtate po
faksa, shte oprete do tozi format. Tova e formata, koito se
izpolzva pri faks komunikatsiiata ot efax.
Veche mozhem da se opitame da izpratim purviiat si faks:
[user@host efax-0.9]# ./fax send 9744XXXX COPYING.001
efax: Wed May 1 15:28:08 2002 efax v 0.9 Copyright
1999 Ed Casas
efax: 28:08 opened /dev/cua1
efax: 28:10 using CL-MD56xx in class 1
efax: 28:10 dialing T9744XXXXX
....
....
Estestveno, efax vi pozvoliava da izpratite direktno tekstov
fail, kato avtomatichno go konvertira, no tezi a i drugi
polezni neshta mozhete da nauchite ako prochetete dokumentatsiiata
na paketa ;). Imaite predvid che kirilitsata niama da bude
enkodirana na tozi etap. Edna programa, koiato konvertira
kirilski tekst v Postscript, mozhete da svalite ot saita na
Linuks za bulgari
(http://www.linux-bg.org/download/programs/kir2ps.tgz).
V neia sa vklyucheni vgradeni shriftove i ako durzhite na purvo
vreme da imate oprostena forma na faksove na kirilitsa, shte vi
svurshi rabota. Estestveno, mozhete da kirilizirate efax, no
za tova malko po kusno. TSelta ni dotuk beshe da izpratim
kakuvto i da e faks.
2.2.kirilskite shriftove v ghostscript - bez tiah ne
mozhem
Ghostscript aka gs e postskript interpretatora na GNU.
Postskript, nakratko kazano e ezik za opisanie na grafiki i
tekst, koito da budat rendirani na ekrana ili na printer.
Ako durzhite na podrobnostite, pulnoto mu opisanie mozhete da
namerite na adres http://www.adobe.com:80/products/postscript/pdfs/PLRM.pdf.
Ghostscript interpretatora e mnogo vazhen za tselite ni. Tova
koeto ni e neobhodimo e prosto da vklyuchim v faila za
opisanie na shriftovete takiva, koito imat vuv sebe si cp1251
enkoding i sa vuv format postscript. Az izpolzvam shriftovete
na Top Team Co, koito paketa bglinux-4 mi instalira. Ako oshte
ne ste instalirali bglinux, vi suvetvam da go napravite -
adski polezen i dobre rabotesht e. Mozhete da go svalite ot
adres ftp://lml.bas.bg/home/anton/linux/bglinux-4.0.tar.gz
a saita na suzdatelia mu e http://lml.bas.bg/~anton/linux/bglinux.html.
Direktoriiata, v koiato se namirat shriftovete na ghostscript v
RedHat 7.2 e /usr/share/fonts/default/ghostscript. Napravete
v neia simvolen link kum tazi v koiato se namirat
"vashite" postskript shriftove. bglinux gi instalira
/usr/local/share/fonts/type1/scalable-cyrfonts/
Eto kak izglezhda na moiat kompyutur:
[user@host ghostscript]# ll c*
lrwxrwxrwx 1 root root
47 Apr 29 10:03 cyr ->
/usr/local/share/fonts/type1/scalable-cyrfonts/
[user@host ghostscript]# cd cyr/
[user@host cyr]# ll
total 5624
-rw-r--r-- 1 root root
42239 Nov 2 13:40 a010013d.afm
-rw-r--r-- 1 root root
74143 Nov 2 13:39 a010013d.pfb
-rw-r--r-- 1 root root
42211 Nov 2 13:40 a010015d.afm
-rw-r--r-- 1 root root
80727 Nov 2 13:39 a010015d.pfb
-rw-r--r-- 1 root root
42065 Nov 2 13:40 a010033d.afm
....
....
sledvashtoto neshto koeto triabva da napravite e da opishete tezi
shriftove v faila /usr/share/ghostscript/6.51/lib/Fontmap.GS.
V tozi fail e "kartata" na shriftovete na
ghostscript. Tova oznachava che vseki shrift, koito iskate da
izpolzvate ot gs-interpretatora, triabva da e opisan v nego.
Nie shte dobavim shriftovete na Topteam nakraia:
/URWGothicCYR-Book
(cyr/a010013d.pfb) ;
/URWGothicCYR-Demi
(cyr/a010015d.pfb) ;
/URWGothicCYR-BookObli
(cyr/a010033d.pfb) ;
/URWGothicCYR-DemiObli
(cyr/a010035d.pfb) ;
/URWBookmanCYR-Ligh
(cyr/b018012d.pfb) ;
/URWBookmanCYR-DemiBold
(cyr/b018015d.pfb) ;
/URWBookmanCYR-LighItal
(cyr/b018032d.pfb) ;
/URWBookmanCYR-DemiBoldItal
(cyr/b018035d.pfb) ;
/CenturySchCYR-Roma
(cyr/c059013d.pfb) ;
/CenturySchCYR-Bold
(cyr/c059016d.pfb) ;
/CenturySchCYR-Ital
(cyr/c059033d.pfb) ;
/CenturySchCYR-BoldItal
(cyr/c059036d.pfb) ;
/NimbusSanCYR-Regu
(cyr/n019003d.pfb) ;
/NimbusSanCYR-Bold
(cyr/n019004d.pfb) ;
/NimbusSanCYR-ReguItal
(cyr/n019023d.pfb) ;
/NimbusSanCYR-BoldItal
(cyr/n019024d.pfb) ;
/NimbusSanCYR-ReguCond
(cyr/n019043d.pfb) ;
/NimbusSanCYR-BoldCond
(cyr/n019044d.pfb) ;
/NimbusSanCYR-ReguCondItal
(cyr/n019063d.pfb) ;
/NimbusSanCYR-BoldCondItal
(cyr/n019064d.pfb) ;
/NimbusRomCYR-Regu
(cyr/n021003d.pfb) ;
/NimbusRomCYR-Medi
(cyr/n021004d.pfb) ;
/NimbusRomCYR-ReguItal
(cyr/n021023d.pfb) ;
/NimbusRomCYR-MediItal
(cyr/n021024d.pfb) ;
/NimbusMonCYR-Regu
(cyr/n022003d.pfb) ;
/NimbusMonCYR-Bold
(cyr/n022004d.pfb) ;
/NimbusMonCYR-ReguObli
(cyr/n022023d.pfb) ;
/NimbusMonCYR-BoldObli
(cyr/n022024d.pfb) ;
/URWPalladioCYR-Roma
(cyr/p052003d.pfb) ;
/URWPalladioCYR-Bold
(cyr/p052004d.pfb) ;
/URWPalladioCYR-Ital
(cyr/p052023d.pfb) ;
/URWPalladioCYR-BoldItal
(cyr/p052024d.pfb) ;
/Teams-Normal
(cyr/teams.pfb) ;
/Teams-Bold
(cyr/teamsb.pfb) ;
/Teams-BoldItalic
(cyr/teamsbi.pfb) ;
/Teams-Italic
(cyr/teamsi.pfb) ;
/TeamsCYR-Normal /Teams-Normal ;
/TeamsCYR-Bold /Teams-Bold ;
/TeamsCYR-BoldItalic /Teams-BoldItalic
;
/TeamsCYR-Italic /Teams-Italic ;
/Teams
/Teams-Normal
;
Prosto kopiraite gornite 2 koloni v kraia na Fontmap.GS
Zabelezhka: Vupreki che spored dokumentatsiiata na ghostscript
ima vuzmozhnost za izpolzvane na truetype shriftove, az ne
uspiah da pusna kirilitsata s tiah, vupreki che
gs-interpretatora gi zarezhda bez problemi. Ako niakoi uspee -
az shte vklyucha belezhkite mu v sledvashtite versii na tova
rukovodstvo.
Testvaite "novite" shriftove":
[user@host /]# cd /usr/share/ghostscript/6.51/lib
[user@host lib]# gs prfont.ps
GNU Ghostscript 6.51 (2001-03-28)
Copyright (C) 2001 artofcode LLC, Benicia, CA. All
rights reserved.
This software comes with NO WARRANTY: see the file COPYING
for details.
Loading NimbusRomNo9L-Regu font from
/usr/share/fonts/default/Type1/n021003l.pfb...
2362024 990061 1622424 328124 0 done.
Loading NimbusSanL-Regu font from
/usr/share/fonts/default/Type1/n019003l.pfb...
39936 1248856 1642520 335588 0 done.
GS>/Teams DoFont % - tova shte vi pokazhe shrifta
Teams-Normal
GS>quit
[user@host lib]#
Ako vsichko e minalo kakto triabva, veche mozhem da pristupim
kum kirilizatsiiata na efax:
[user@host lib]# cd /usr/src/efax-0.9/
Kato nachalo, neka da generirame shrift-a s kirilitsa. Optsiiata
na efix -f (zabelezhete che tova e pomoshtna programa ot paketa,
ne e efax) pozvoliava izpolzvaneto na vunshen shrift. Za tselta
toi se generira ot ./fax s pomoshtta na toku-shto
kiriliziraniia ghostscript ot shrifta na Top Team Co. Tova e
bitmap, sudurzhasht gotovi rendirani izobrazheniia na vsichki
bukvi (glifove) v dadeniiat shrift: [user@hostefax-0.9]#
fax makefont Teams-Normal 8 16 24 efaxfont za da vidim
kakvo sme napravili:
[user@host efax-0.9]# file efaxfont efaxfont: Netpbm PBM
"rawbits" image data
[user@host efax-0.9]# Drug nachin e da pusnete niakoia
programa za pregled na izobrazheniia. gqview razpoznava .pbm
failovete, vupreki che ne otkrih s kakvo mogat da se
redaktirat.
kak se izpolzva shrifta za izprashtane na "chisti"
tekstovi failove mozhete da prochete ot man-stranitsite na fax,
efax i efix.
2.3.hml2ps - slaboto miasto
Tova e perl-skript, koito tvurdi che konvertira html
stranitsi v postscript. Ima niakoi ogranicheniia, no kato tsialo
vurshi rabota -za "chist" html. Mozhete da go svalite
ot http://www.tdb.uu.se/~jan/
Vupreki che v dokumentatsiiata e opisano kak da se
"internatsionalizira", v momenta v koito mu kazhete
da izpolzva shrift s cp1251 enkoding, generiraniiat ot nego
fail veche ne raboti pod ghostscript interpretatora, kato
po tozi nachin ni zatvaria vratichkata kum izprashtaneto na
faksove s kirilitsa. Eto zashto nie generirame nekiriliziran
ps-fail i v posledstvie s pomoshtta na php go prerabotvame
taka che da se rendira s kirilski shriftove. SHTe vidite kak
stava tova malko po-dolu. Kakto ste videli veche (pochti sum
siguren) suobshteniiata za greshka na gs ne sa ot
nai-razbiraemite. Vseki opit da bude konvertiran generiran
ot htm2ps fail s kirilitsa v tiffg3 zavurshva s takava greshka.
Oshte edna podrobnost: pri konvertiraneto ot html v ps IZRICHNO
triabva da vikate html2ps s optsiia -D . Tova prinuzhdava
html2ps da "parsne" generiraniia fail prez
gs-interpretatora. Po tozi nachin ako html2ps -D mine bez
suobshteniia za greshki sled tova, pri konvertiraneto to tiffg3
niama da ima problemi.
2.4. function cp1251: Hak-ut
Nachina koito vi predlagam e realiziran s php po razbiraemi
prichini, no mozhe da se napravi sus vseki drug ezik za
programirane. Ideiata e da se generira ps-fail, koito ne e
kiriliziran i sled tova da se obraboti
taka che gs-interpretatora da rendira pravilno shriftovete
pri konvertiraneto do tiffg3 format. Reshenieto na problema e
prosto: predi vseki operator za pokazvane na string ot tipa
\240\313\350\355\366) S v ps-faila da se slozhi ukazanie da
se izpolzva niakoi ot shriftovete, koito sa kirilizirani. S
prosti dumi:
(\240\313\350\355\366) S se podmenia s
/Teams-Normal findfont 8 scalefont setfont
(\240\313\350\355\366) S
kato chislata v skobite sa, kakto mozhe bi predpolagate
kodovete na kirilskite bukvi. Tova uvelichava goleminata na
faila, no premahva vuzmozhnostta da se izprashtat faksove na
"maimunitsa".
2.5. V orbita: faks ot web-survura
2.5.1 Opisanie na funktsiite
decode_str($font_arg)
callback funktsiia, koiato se izpolzva ot cp1251() samo.
cp1251($psarr) na vhoda i se podava masiv, v koito se
sudurzha tsial postskript fail, a na izhoda e kiriliziraniiat
variant.
Primer:
$fp = popen("$html2ps -D $loc",
"r")
or die ("Cannot execute");
$contents = fread($fp, 29999999);
pclose($fp);
set_cyr_font();
$r
= cp1251($contents); // v $r e "kiriliziraniiat
fail"
SendFile($File_Name,$File_Extension, $arr) otvaria dialog
"save as" na brauzera i prashta sudurzhanieto na
$arr. Nishto osobeno.
set_cyr_font($font="/Teams-Normal", $size=8)
ustanoviava shrifta koito da se izpolzva pri enkodirane na
ps-fail s cp1251(), kato proveriava dali shrifta prisustva v
map-faila na gs-interpretatora. Imeto na shrifta triabva da e
v postskript format.
set_orientation_Land($file_name)
set_orientation_Port($file_name)
Tezi 2 funktsii ustanoviavat orientatsiiata na ps-fail -
"Portrait" ili "Landcape".
get_orientation($file_name)
Vrushta orientatsiiata na faila. Vrushtanite stoinosti sa:
1 "Portrait"
2 "Landscape"
0 greshka
fetch_location($loc, $fax_number)
Prochita, kirilizira i zapisva postskript fail, koito se
izprashta na funktsiiata fax_make. Polucheniiat ot fax_make spisuk
ot failove se izprashta na funktsiiata fax_send, koiato prashta
stranitsite na faks s nomer $fax_number
fax_make($file)
Konvertira v tiffg3 ps-faila $file i vrushta masiv s imenata
na generiranite failove v format file.ps.001, 002... kato na
vsiaka stranitsa suotvetstva edin fail
fax_send($files_list, $fax_number)
Izprashta na faks s nomer $fax_number failovete $files_list,
koito sa napraveni s funktsiiata fax_make.
get_gs_fonts() - vrushta masiv s imenata na shriftovete,
opisani v Fontmap.GS. Izpolzva se v set_cyr_font(), no mozhe
da bude izvikvana samostoiatelno.
Primer za izpolzvane na gornite funktsii:
<?php
$location="http://niakude.si/neshto.si";
fetch_location($location,95859);
?>
Statiiata i koda kum neia mozhe da svalite ot:
http://www.linux-bg.org/download/programs/efaxCyr.zip
<< Pak za prevodite na programi | Suzdavane na potrebitelski grafichen interfeis s Qt >>
|
|