Narzędzia do przetwarzanie dokumentów XML: procesory FO

Transkrypt

Narzędzia do przetwarzanie dokumentów XML: procesory FO
Narzędzia do przetwarzanie
dokumentów XML: procesory FO
Tomasz Przechlewski
Spis treści
1. Wprowadzenie .........................................................................................................
2. FOP .........................................................................................................................
2.1. Informacje ogólne i instalowanie programu .....................................................
2.2. Uruchamianie i konfigurowanie ......................................................................
3. XEP .........................................................................................................................
3.1. Informacje ogólne i instalowanie programu .....................................................
3.2. Uruchamianie i konfigurowanie ......................................................................
4. Polonizacja arkuszy �oc�ook XSL Stylesheets ..............................................................
5. Generowanie plików metrycznych i plik konfiguracyjny .............................................
6. Pliki do pobrania .....................................................................................................
1
1
1
2
3
3
3
3
4
6
1. Wprowadzenie
�okument opisuje w jaki sposób zainstalować, skonfigurować oraz rozpocząć pracę z dwoma
aplikacjami FOP oraz XEP służącymi do transformacji dokumentów XML do formatu P�F.
2. FOP
2.1. Informacje ogólne i instalowanie programu
Procesor FOP przekształca dokumenty FO na pliki P�F. Program jest napisany w języku Java i jest rozwijany w ramach Apache Software Foundation. W chwili pisania tego tekstu udostępniona jest wersja 0.94 programu. FOP nie jest jeszcze oprogramowaniem produkcyjnej
jakości: sporo elementów specyfikacji XSL-FO 1.0 nie jest zaimplementowanych [http://
xmlgraphics.apache.org/fop/compliance.html], zawiera też błędy, ale działa i może być wykorzystany do tworzenia prostych dokumentów.
Po pobraniu np. ze strony xmlgraphics.apache.org/fop/ [http://xmlgraphics.apache.org/fop/
download.html] i rozpakowaniu archiwum zip, program jest gotowy do użycia [Wymaga oczywiście uprzedniego zainstalowania interpretatora języka Java]. Po zainstalowaniu dodatkowych
fontów, wzorców przenoszenia wyrazów i niewielkiej nieskomplikowanej konfiguracji umożliwia także formatowanie tekstów w języku polskim. �odanie wzorców przenoszenia wyrazów sprowadza się do pobrania ze strony http://sourceforge.net/projects/offo i dodania do
katalogu $FOP_HOME/libs archiwum fop-hyph.jar ($FOP_HOME oznacza korzeń instalacji
FOPa).
FOP potrafi korzystać z fontów w formacie TrueType i OpenType. Uruchamiając go w systemie MS Windows można użyć dowolnego dostępnego w tym systemie zestawu fontów TrueType/OpenType. W systemie Linux można wykorzystać przykładowo darmowy zestaw fontów TrueType firmy Microsoft (tzw. Core fonts for the Web [http://en.wikipedia.org/wi1
Narzędzia do przetwarzanie dokumentów XML: procesory FO
ki/Core_fonts_for_the_Web], dostępnych np. ze strony http://corefonts.sourceforge.net), zestaw krojów Lucida dostępne w pakiecie J�K języka Java (http://java.sun.com/j2se/) albo
zestaw krojów opracowanych w ramach projektów: STIX (http:// www.stixfonts.org/), �ejaVu
(http://dejavu.sourceforge.net/), GUST (http://nowacki.strefa.pl/).
Uwaga: FOP nie potrafi korzystać z niektórych fontów OTF. W szczególności dotyczy to fontów
z projektu TeX Gyre (GUST).
FOP nie korzysta bezpośrednio z fontów i wymaga wygenerowania z pliku .ttf pliku metrycznego w specyficznym formacie. �o wygenerowania tego pliku należy wykorzystać aplikację TTFReader znajdującą się w dystrybucji FOPa, uruchamiając ją w następujący sposób
($FOPJARS oznacza/zawiera listę niezbędnych archiwów .jar):
java -cp $FOPJARS org.apache.fop.fonts.apps.TTFReader plik.ttf plik.xml
�ardziej szczegółowo na temat generowania plików metrycznych traktuje punkt Sekcja 5,
„Generowanie plików metrycznych i plik konfiguracyjny” .
2.2. Uruchamianie i konfigurowanie
Po wygenerowaniu plików metrycznych fonty należy zarejestrować w pliku konfiguracyjnym
znajdującym się w $FOP_HOME/conf/userconfig.xml ($FOP_HOME oznacza korzeń instalacji FOPa). �odanie odpowiedniej informacji powinno być proste -- można się wzorować na
wpisach zawartych w pliku z dystrybucji. Aby FOP mógł skorzystać z fontów, musi być uruchomiony z opcją -c ścieżka-do-pliku-konfiguracyjnego, np:
fop -c /usr/local/fop/config/userconfig.xml -fo plik.fo -pdf plik.pdf
Gdzie: fop jest nazwą pliku .bat lub skryptu bash (przykładowe skrypty uruchamiające FOPa
oraz plik konfiguracyjny są dostępne tutaj [./p1/])
Należy także ,,włączyć'' nasz font dodając atrybut font-family, np. do elementu fo:root:
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
font-family="TimesNewRomanPSMT">
Uwaga: jak spolonizować szablony �oc�ook XSL Stylesheets traktuje punkt Sekcja 4, „Polonizacja arkuszy �oc�ook XSL Stylesheets” .
Typowym sposobem tworzenia plików P�F jest zamiana pliku XML na plik w formacie FO za
pomocą arkusza stylu XSLT. W przypadku FOPa wymaga to uruchomienia aplikacji z trzema
następującymi parametrami:
fop -xml plik.xml -xsl arkusz.xslt -pdf plik.pdf
Można także przetworzyć plik .fo bezpośrednio uruchamiając program z parametrami -fo
plik.fo -pdf plik.pdf.
Skrypty basha/pliki .bat do wygenerowania plików metrycznych i uruchamiania fopa oraz
plik konfiguracyjny dla przykładowych fontów znajduje się tutaj [./p1/].
2
Narzędzia do przetwarzanie dokumentów XML: procesory FO
3. XEP
3.1. Informacje ogólne i instalowanie programu
Procesor XEP przekształca dokumenty FO na pliki P�F. Program jest aplikacją komercyjną
ale jest dostępna w pełni funkcjonalna darmowe wersja testowa (http://www.renderx.com/
tools/xep.html) Program XEP jest rozwijany w języku Java. W chwili obecnej XEP jest dużo
lepszym programem niż FOP.
�o pobrania programu niezbędna jest rejestracja na stronie www.renderx.com [http://
www.renderx.com/tools/xep.html]. Na podany w trakcie rejestracji adres email zostanie wysłany plik zawierający licencję, który jest niezbędny w trakcie instalacji. Instalacja jest bardzo
prosta i sprowadza się do uruchomienia programu instalacyjnego. �o formatowania polskich
tekstów XEP wymaga dodania fontów zawierających polskie znaki diakrytyczne. XEP działa
z fontami w tym samym formacie co FOP, tyle że potrafi korzystać z nich bezpośrednio i nie
jest konieczne generowanie żadnych plików metrycznych.
3.2. Uruchamianie i konfigurowanie
�ostępne w systemie fonty należy zarejestrować w pliku konfiguracyjnym znajdującym się
w $XEP_HOME/xep.xml ($XEP_HOME oznacza korzeń instalacji XEPa). Sposób konfiguracji
jest zbliżony do tego, który jest wykorzystywany w programie FOP. Polonizacja arkuszy �ocbook została zaś opisana w punkcie Sekcja 4, „Polonizacja arkuszy �oc�ook XSL Stylesheets” .
Uruchomienie XEPa jest bardzo proste:
xep plik.fo plik.pdf
Gdzie: xep jest nazwą pliku .bat lub skryptu bash (przykładowe skrypty uruchamiające XEPa
są dostępne tutaj [./p1/]).
Uwaga: XEP nie potrafi zamienić pliku XML bezpośrednio na P�F. Najpierw należy zamienić
plik XML do formatu FO (np. przy pomocy programów xsltproc lub saxon).
4. Polonizacja arkuszy DocBook XSL Stylesheets
Jeżeli używamy procesora FO (FOPa, XEPa albo innego) do zamiany na P�F dokumentu
XML posługując się szablonami �oc�ook XSL Stylesheets [http://docbook.sourceforge.net/
] Normana Walsha, to polskie fonty włączamy deklarując odpowiednie wartości zmiennych
*.font.family:
<!-- Fonty
<xsl:param
<xsl:param
<xsl:param
<xsl:param
zawierające polskie znaki ęśśćź, np. -->
name="sans.font.family" select="'ArialMT'"/>
name="title.font.family" select="'ArialMT'"/>
name="body.font.family" select="'TimesNewRomanPSMT'"/>
name="monospace.font.family" select="'CourierNewPSMT'"/>
�eklaracje te najlepiej umieścić w następującym arkuszu ,,adaptacyjnym'' (załóżmy że poniższe
jest wpisane do pliku dbx2fo-pl.xsl):
3
Narzędzia do przetwarzanie dokumentów XML: procesory FO
<?xml version='1.0' ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
<-- dołączenie oryginalnego arkusza z Docbook XSL stylesheets: -->
<xsl:import
href="/usr/local/sgml/stylesheets/xmldocbook/1.72.2/fo/docbook.xsl"/>
<xsl:param
<xsl:param
<xsl:param
<xsl:param
name="sans.font.family" select="'ArialMT'"/>
name="title.font.family" select="'ArialMT'"/>
name="body.font.family" select="'TimesNewRomanPSMT'"/>
name="monospace.font.family" select="'CourierNewPSMT'"/>
</xsl:stylesheet>
W rezultacie tekst zasadniczy dokumentu będzie składany fontem Times New Roman, śródtytuły
fontem Arial. �o fragmentów dokumentu, które mają być złożone krojem o stałej szerokości
znaków zostanie użyty Courier New. Powyższa deklaracja plus wpisy w pliku konfiguracyjnym
[./p1/userconfig.xml] spowodują wykorzystanie przez FOPa Microsoftowych Core fonts.
Jeżeli dokument ma być złożony innymi fontami, np. z zestawu fontów Quasi, to wystarczy
stworzyć następujący niewielki arkusz adaptacyjny importujący poprzednio zdefiniowany arkusz dbx2fo-pl.xsl:
<?xml version='1.0' ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
<xsl:import href="dbx2fo-pl.xsl" />
<xsl:param name="sans.font.family" select="'QuasiSwissTTF'"/>
<xsl:param name="title.font.family" select="'QuasiSwissTTF'"/>
<xsl:param name="body.font.family" select="'QuasiPalatinoTTF'"/>
<xsl:param name="monospace.font.family" select="'QuasiCourierTTF'"/>
</xsl:stylesheet>
Podobną sztuczkę można oczywiście zrobić dla dowolnego zestawu fontów. W przygotowanych przykładach można znaleźć arkusze [./p1/] do składu fontami �ejaVue, QuasiPalatino oraz
QuasiTimes (odsyłacze do przykładowych dokumentów znajdują się na końcu tego tekstu).
5. Generowanie plików metrycznych i plik konfiguracyjny
Nudną czynność tworzenia wpisów w pliku konfiguracyjnym zautomatyzowałem prostym
skryptem napisanym w Perlu. �odanie wpisów dla zbioru fontów wymaga uruchomienia
skryptu [./p1/font-dscr-gen.pl] w następujący sposób:
perl font-dscr-gen.pl plik1
plik2... -d katalog -m tryb > plik.cnf
4
Narzędzia do przetwarzanie dokumentów XML: procesory FO
Gdzie plik1 , plik2 , to pliki TTF/OTF. Opcja tryb określa dla jakiego programu
generowane są wpisy (fop lub xep). Część -d katalog jest opcjonalna. Przykładowo, jeżeli
wszystkie fonty MS Core Fonts zostały umieszczone w pewnym katalogu, to uruchomienie:
perl font-dscr-gen.pl *.ttf ... -d msfonts > fop.cnf
Spowoduje wypisanie do pliku fop.cnf wierszy podobnych do poniższych:
<font metrics-url='&fop.home;/conf/fonts/msfonts/arialbd.xml'
kerning='yes' embed-url='&ttf.dir;/msfonts/arialbd.ttf'>
<font-triplet name='ArialMT' style='normal' weight='bold'/>
</font>
<font metrics-url='&fop.home;/conf/fonts/msfonts/arialbi.xml'
kerning='yes' embed-url='&ttf.dir;/msfonts/arialbi.ttf'>
<font-triplet name='ArialMT' style='italic' weight='bold'/>
</font>
<!-- itd dla wszystkich fontów -->
Nazwa fontu, tj. wartość atrybutu name może być w zasadzie dowolna. Zamiast Arial równie
dobrze mogłoby być Psia�uda albo nawet Kocham Elkę. Skrypt ustala nazwę fontu pobierając
tzw. PostScript Name z pliku fontu wykorzystując do tego niewielki program otfinfo z pakietu
lcdftypetools [http://www.lcdf.org/]. Program otfinfo jest dostępny także dla systemów
MS Windows (łatwo znaleźć via google).
Uruchomienie skryptu z opcją -m równą xep spowoduje wyświetlenie wpisów konfiguracyjnych w składni procesora XEP, np.
<font-family name='QuasiCourierTTF'>
<font style='italic'><font-data ttf='&ttf.dir;/qfonts/qcrri.ttf'/></font>
<font style='italic' weight='bold'><font-data ttf='&ttf.dir;/qfonts/qcrbi.ttf'/></
<font><font-data ttf='&ttf.dir;/qfonts/qcrr.ttf'/></font>
<font weight='bold'><font-data ttf='&ttf.dir;/qfonts/qcrb.ttf'/></font>
</font-family>
Zawartość pliku fop.cnf/xep.cnf należy wkleić w odpowiednie miejsce pliku konfiguracyjnego fopa/xepa. W pliku tym należy też zdefiniować wartości encji &fop.home oraz
&ttf.dir. Jak widać skrypt zakłada, że pliki metryczne są w katalogu &fop.home;/conf/
fonts/nazwa-katalogu/, gdzie nazwa-katalogu to wartość argumentu -d skryptu.
Przyjąłem strategię, że opisy fontów nie znajdują się w jednym katalogu tylko w podkatalogach
$FOP_HOME/conf/fonts/. Stąd takie ustawienia skryptu. Podobne założenia dotyczą ścieżek
do plików .ttf. Mówiąc konkretnie na początku pliku konfiguracyjnego należy umieścić:
<!DOCTYPE fop [
<!ENTITY fop.home "/use/local/fop"
> <!-- ew. np. "file:///C:/fop" dla systemu a
<!ENTITY ttf.dir "/usr/share/fonts" >
]>
Odmiany fontu są deklarowane za pomocą kombinacji atrybutów style i weight. Skrypt zakłada, że font dostępny jest w maksymalnie czterech odmianach (normalna, pochyła, pół/gruba i półgruba pochyła). Uwaga: wartości atrybutów style oraz weight skrypt ustala ,,heurystycznie'' dlatego należy sprawdzić czy są zgodne ze stanem faktycznym.
5
Narzędzia do przetwarzanie dokumentów XML: procesory FO
Uwaga: Aplikacja org.apache.fop.fonts.apps.TTFReader dla wielu fontów wypisuje
na ekranie liczne ostrzeżenia podobne do:
Unicode index (1) not found for glyph
Sądząc z tego komentarza [http://marc.info/?l=fop-cvs&m=116072555003515&w=2] nie wydają się groźne. �otyczą nieistniejących par kernowych. Przy jakości składu oferowanej przez
FOPa, taki detal nie wydaje się mieć wielkiego znaczenia.
6. Pliki do pobrania
Skrypty basha/pliki .bat do uruchamiania XEPa oraz plik konfiguracyjny zwierający konfigurację dla przykładowych fontów znajduje się tutaj [./p1/].
Pliki konfiguracyjne były generowane/testowane z fontami Quasi dostępnymi w pakiecie qfonts-1.07-2.noarch.rpm [http://rpm.pbone.net/index.php3/stat/4/idpl/2328328/com/
qfonts-1.07-2.noarch.rpm.html] (kopia lokalna [http://gnu.univ.gda.pl./~tomasz/�ownload/qfonts.zip], archiwum .zip). Fonty Quasi zostały zastąpione przez pakiet TeX Gyre i nie
są już rozwijane/udostępniane przez GUST. Jak wspomniano FOP nie potrafi korzystać z fontów TeX Gyre. Fonty �ejaVue pobrano ze strony http://dejavu.sourceforge.net/. Uwaga na
różnice pomiędzy zestawami fontów rozpowszechnianymi w różnych dystrybucjach linuksa.
Przykładowo pakiet dejavu-fonts.noarch dla dystrybucji Fedora Core zawiera 10 z 12
odmian fontów (brak jest -- nie wiadomo czemu -- DejaVuSerif-Italic.ttf oraz DejaVuSerif-BoldItalic.ttf).
Ten dokument w formacie: pdf [./foprocs.pdf] (MS Core fonts), pdf [./foprocs-qpl.pdf] (Quasi
Palatino), pdf [./foprocs-qtm.pdf] (Quasi Times), pdf [./foprocs-djv.pdf] (�ejaVue), oraz xml
[./foprocs.xml].
6

Podobne dokumenty