Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Formátované dokumenty a tiskové sestavy v Javě (2)

Jozef Chocholáček
Jozef Chocholáček (neregistrovaný)
7. 6. 2005 10:16 Nový

FOP a XSL-FO

celé vlákno
Ďalším negatívom FOP-u je to, že XSL-FO neimplementuje kompletne (hlavne atribúty), ale len veľmi pomaly sa rozrastajúcu podmnožinu. Napriek tomu je to dobrý soft a používame ho i v komerčných riešeniach.
Pavel Tišnovský aura:98
7. 6. 2005 12:24 Nový

Re: FOP a XSL-FO

celé vlákno
Ano, s chybějící podporou pro některé atributy XSL-FO jsem se setkal. Na druhou stranu tento systém ovšem většinou převede dokumenty i s neznámými značkami. Samozřejmě, že převod nemusí být korektní, ale pro rychlý náhled na získaná data to většinou dostačuje.
uživatel si přál zůstat v anonymitě
7. 6. 2005 14:23 Nový

dobře že se otevřený řešení a XML prosazujou

celé vlákno
Většina "firemních" programátorů jsou jinak nevzdělaný burani který čekaj až je majkrosoft za ručičku dovede ke stolu, řekne jim co maj dělat a nacpe jim ty svoje "šity" do krku. Ať žijou samostatně myslící vývojáři open source kteří mají klasický programátorský vzdělaní, díky za ně.
Pavel Tišnovský aura:98
7. 6. 2005 15:35 Nový

Re: dobře že se otevřený řešení a XML prosazujou

celé vlákno
Otevřená řešení se opravdu ve firmách začínají prosazovat - vidím to všude kolem sebe. Je to samozřejmě pomalá změna, protože některá firemní infrastruktura je dost složitá a špatně se předělává (a samozřejmě při konkrétním řešení "nejsou lidi"). To je taky jeden z důvodů, proč v dalším pokračování tohoto seriálu budu popisovat systém POI, kterým se programově manipuluje s Excelovskými tabulkami - pro firemní aplikace je to jedna z často požadovaných operací.
David Král
David Král (neregistrovaný)
12. 6. 2005 21:15 Nový

čeština

celé vlákno
Čekal jsem náznak řešení problému s českými fonty- bez toho je ten článek, alespoň pro mně, neúlný.
Pavel Tišnovský aura:98
13. 6. 2005 9:23 Nový

Re: čeština

celé vlákno

Promiňte, to řešení s českými fonty se mi do článku už nevešlo. Pokusím se to tedy napravit tady v diskusi. Problém je to poměrně složitý, například záleží i na tom, zda máte vstupní fonty ve formátu TrueType či PostScript. Vše prozatím funguje pro PDF, v případě PostScriptového výstupu má FOP ještě nějaké mušky - viz stránka http://xml.apache.org/fop/fonts.html.

Nejprve je zapotřebí vytvořit ke každému fontu, který se do výsledného PDF souboru vloží, takzvanou metriku, tj. rozměry jednotlivých znaků, kerningové páry atd. To se (například pro font Arial.ttf, který je v Unicode) provede pomocí příkazu:

java -cp build\fop.jar;lib\avalon-framework-cvs-20020806.jar;lib\xml-apis.jar;lib\xercesImpl-2.2.1.jar;lib\xalan-2.4.1.jar org.apache.fop.fonts.apps.TTFReader -fn arial arial.ttf arial.xml

(vše na jednom řádku, pro Unixy je samozřejmě zapotřebí upravit cesty). Výsledkem je soubor arial.xml, ve kterém je mimo jiné řečeno, že v dalším zpracování bude jméno tohoto fontu Arial (volba -fn arial).

Posléze je nutné upravit soubor "userconfig.xml" tak, aby toto jméno akceptoval. V tomto případě je to jednoduché, protože tam část s Arialem je, pouze se musí odkomentovat:

 <font metrics-file="arial.xml" kerning="yes" embed-file="arial.ttf">
    <font-triplet name="Arial" style="normal" weight="normal">
    <font-triplet name="ArialMT" style="normal" weight="normal">
 </font>

No a potom se už může jednoduše tvořit dokument, například známý Hello World s českými znaky (všimněte si způsobu výběru fontu):

<?xml version="1.0" encoding="iso-8859-2">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
    <fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
      <fo:region-body/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="simpleA4">
    <fo:flow flow-name="xsl-region-body">
      <fo:block>Hello World!</fo:block>
      <fo:block font-size="12pt" font-family="Arial">ěąčřľýáíé</fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

Překlad se provede příkazem:

fop -c userconfig.xml helloworld.fo -pdf helloworld.pdf

tj. je nutné specifikovat upravený konfigurační soubor. Výsledné PDF trošku naroste a pokud se do něj podíváte, zjistíte, že jsou v něm vloženy všechny použité znaky (tj. nikoli celá znaková sada).

Toť vše, doufám, že toto řešení bude později funkční i pro PostScriptové soubory. (ale byla to práce, předělávat ukázky XML do diskuse, do které se musí psát v XHTML :-)

Jirka Kosek
Jirka Kosek (neregistrovaný)
13. 6. 2005 10:26 Nový

Re: čeština

celé vlákno
Není to tak jednoduché. FOP sice české fonty umí vložit, ale bohužel u nich nevloží korektní kódovací vektor. To znamená, že se neví, na jaké Unicode znaky se jednotlivé znaky ve fontu mapují. Praktický důsledek je v tom, že v takových PDF nefunguje vyhledávání a kopírování textu.

Pro český text je pak ještě potřeba nakonfigurovat české vzory dělení slov. Bohužel, poslední verze FOPu to má vyřešeno tak nešťastně, že se kvůli tomu musí FOP rekompilovat, nebo si musíte někde sehnat zkompilované české vzory (třeba: http://www.kosek.cz/sw/fop/).
Pavel Tišnovský aura:98
13. 6. 2005 10:49 Nový

Re: čeština

celé vlákno
Ano, FOP při práci s vloženými fonty opravdu nevytvoří správný kódovací vektor. Na zobrazení to nemá vliv, protože na pozicích znaků jsou "natvrdo" uvedeny jejich interní kódy, ale při dalším zpracování to nefunguje správně. Také bývají problémy se záložkami, ale zde si nejsem jistý, jestli to je chyba FOPu nebo Acrobat Readeru (po novu Adobe Readeru), protože se stejná chyba projevovala i například v souvislosti s pdfTeXem.

Za ty CS vzory dělení moc děkuji, určitě se budou hodit (v současnosti se u nás sice výstup do PDF bude používat pro tiskové sestavy ve formě tabulek, ale není vyloučeno, že později půjde i o delší texty - i když na ně bych asi popohnal pdfTeX :-).
David Král
David Král (neregistrovaný)
14. 6. 2005 11:33 Nový

Re: čeština

celé vlákno
Děkuji za obě rady- funguje to :-) a můžu to tedy časem nasadit do praxe
Petr
Petr (neregistrovaný) ---.tkom.cz
30. 8. 2009 19:36 Nový

Re: čeština

celé vlákno

Dobry den, mam problem s generovanim metriky fontu. Po vyse uvedenem prikazu „java -cp build\fop.jar;lib\a­valon-fr…“ dostanu nasledujici chybu: C:\Program Files\Vertrigo­Serv\www\fop\fop-0.95\fonts>java -cp build\fop.jar;lib\ avalon-framework-4.2.0.jar;lib\xml-apis-1.3.04.jar;lib\xer­cesImpl-2.7.1.jar;lib\ xalan-2.7.0.jar org.apache.fop­.fonts.apps.TTFRe­ader Impact.ttf Impact.xml Exception in thread „main“ java.lang.NoClas­sDefFoundError: org/apache/fop/fon­ts/ apps/TTFReader Caused by: java.lang.Clas­sNotFoundExcep­tion: org.apache.fop­.fonts.apps.TTFRe­ader

at java.net.URLClas­sLoader$1.run(Un­known Source)
at java.security­.AccessContro­ller.doPrivile­ged(Native Method)
at java.net.URLClas­sLoader.findClas­s(Unknown Source)
at java.lang.Clas­sLoader.loadClas­s(Unknown Source)
at sun.misc.Launcher$Ap­pClassLoader.lo­adClass(Unknown Source)
at java.lang.Clas­sLoader.loadClas­s(Unknown Source)
at java.lang.Clas­sLoader.loadClas­sInternal(Unknown Source) Could not find the main class: org.apache.fop­.fonts.apps.TTFRe­ader. Program wil l exit.

Prikaz spoustim z windows a v jave se nevyznam. Nasla by se nejaka rada? Delam neco spatne? diky za odpoved

Petr
Petr (neregistrovaný) ---.tkom.cz
30. 8. 2009 21:59 Nový

Re: čeština

celé vlákno

tak hloupou zakladni chybu jsem nasel, byl jsem ve spatnem adresari, problem ale pretrvava. C:\Program Files\Vertrigo­Serv\www\fop\fop-0.95>java -cp build/fop.jar;lib/a­valon -framework-4.2.0.jar;lib/com­mons-logging-1.0.4.jar;lib/com­mons-io-1.3.1.jar org. apache.fop.fon­ts.apps.TTFRe­ader arial.ttf arial.xml TTF Reader for Apache FOP 0.95

Parsing font… Reading arial.ttf… Exception in thread „main“ java.lang.NoClas­sDefFoundError: org/apache/xmlgrap­hic s/fonts/Glyphs
at org.apache.fop­.fonts.truety­pe.TTFFile.ini­tAnsiWidths(TTFFi­le.java:444 )
at org.apache.fop­.fonts.truety­pe.TTFFile.re­adFont(TTFFile­.java:493)
at org.apache.fop­.fonts.apps.TTFRe­ader.loadTTF(TTFRe­ader.java:209)
at org.apache.fop­.fonts.apps.TTFRe­ader.main(TTFRe­ader.java:164) Caused by: java.lang.Clas­sNotFoundExcep­tion: org.apache.xmlgrap­hics.fonts.Glyp­hs

at java.net.URLClas­sLoader$1.run(Un­known Source)
at java.security­.AccessContro­ller.doPrivile­ged(Native Method)
at java.net.URLClas­sLoader.findClas­s(Unknown Source)
at java.lang.Clas­sLoader.loadClas­s(Unknown Source)
at sun.misc.Launcher$Ap­pClassLoader.lo­adClass(Unknown Source)
at java.lang.Clas­sLoader.loadClas­s(Unknown Source)
at java.lang.Clas­sLoader.loadClas­sInternal(Unknown Source)
… 4 more

Zasílat nově přidané příspěvky e-mailem