ot Luchezar Georgiev / Todor Stamatov (8-05-2002)

reiting (18)   [ dobre ]  [ zle ]

Printer Friendly 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 >>