Obsah v PDF cez FOP 0.20.4

Martin Perina martin.perina na osu.cz
Pondělí Listopad 25 08:33:45 CET 2002


On Pá, 2002-11-22 at 20:14, Pavol Vaskovic wrote:
> Dakujem za fop-common.xsl!
> 
> Skutocne vyriesil vacsinu mojich problemov. Este raz dakujem, velmi mi 
> to pomohlo. Stale sa mi vsak negeneruje cislo strany na ktorej je 
> glossary. Bohuzial tym zmenam ktore su v
> <!-- Oprava cisel stranek kapitol v obsahu --> a <!-- Oprava cisel 
> stranek casti v obsahu --> prilis nerozumiem, resp. neviem ako toto 
> aplikovat na template glosary, ktory ma trochu inu strukturu ako 
> templaty chapter a part. Nevedel by mi s tym niekto poradit?

Ty sablony resi problem, ze FOP necte id ze znacky <fo:page-sequence>
(pomoci nichz je definovan odkaz na obsah pro casti a kapitoly), ale 
pouze z <fo:block> (pomoci nichz je definovan odkaz na obsah pro sekce).
Navic oproti standardnim sablonam je tam pouze pridan radky <fo:block> a
</fo:block>. Predpokladam, ze u glossary to bude stejnym problem, takze 
by melo stacit zaradit dve opravy sablon do stylu fop-common.xsl (pozor
nasledujici sablony jsem vytahl ze souboru fo/glossary.xsl u verze 1.55,
takze je mozne, ze se mohou ve vyssich verzich lisit. Pokud pouzivat
jinou verzi zkopirujte si sablony ze sve verze a vlozte tam pouze 
oznacene radky <fo:block> a </fo:block>):


<xsl:template match="book/glossary|/glossary" priority="2">
  <xsl:variable name="id">
    <xsl:call-template name="object.id"/>
  </xsl:variable>

  <xsl:variable name="master-reference">
    <xsl:call-template name="select.pagemaster"/>
  </xsl:variable>

  <fo:page-sequence id="{$id}"
                    hyphenate="{$hyphenate}"
                    master-reference="{$master-reference}">
    <xsl:attribute name="language">
      <xsl:call-template name="l10n.language"/>
    </xsl:attribute>
    <xsl:attribute name="format">
      <xsl:call-template name="page.number.format"/>
    </xsl:attribute>
    <xsl:if test="$double.sided != 0">
      <xsl:attribute name="initial-page-number">auto-odd</xsl:attribute>
    </xsl:if>

    <xsl:apply-templates select="." mode="running.head.mode">
      <xsl:with-param name="master-reference"
select="$master-reference"/>
    </xsl:apply-templates>
    <xsl:apply-templates select="." mode="running.foot.mode">
      <xsl:with-param name="master-reference"
select="$master-reference"/>
    </xsl:apply-templates>

    <fo:flow flow-name="xsl-region-body">

<!--
    Nasledujici radek je vlozen kvuli oprave
  -->
      <fo:block id="{$id}">

      <xsl:call-template name="make-glossary"/>

<!--
    Nasledujici radek je vlozen kvuli oprave
  -->
      </fo:block>

    </fo:flow>
  </fo:page-sequence>
</xsl:template>


<xsl:template
match="book/glossary[@role='auto']|/glossary[@role='auto']"
priority="2.5">
  <xsl:variable name="id"><xsl:call-template
name="object.id"/></xsl:variable>

  <xsl:variable name="master-reference">
    <xsl:call-template name="select.pagemaster"/>
  </xsl:variable>

  <xsl:if test="$glossary.collection = ''">
    <xsl:message>
      <xsl:text>Warning: processing automatic glossary </xsl:text>
      <xsl:text>without a glossary.collection file.</xsl:text>
    </xsl:message>
  </xsl:if>

  <fo:page-sequence id="{$id}"
                    hyphenate="{$hyphenate}"
                    master-reference="{$master-reference}">
    <xsl:attribute name="language">
      <xsl:call-template name="l10n.language"/>
    </xsl:attribute>
    <xsl:attribute name="format">
      <xsl:call-template name="page.number.format"/>
    </xsl:attribute>
    <xsl:if test="$double.sided != 0">
      <xsl:attribute name="initial-page-number">auto-odd</xsl:attribute>
    </xsl:if>

    <xsl:apply-templates select="." mode="running.head.mode">
      <xsl:with-param name="master-reference"
select="$master-reference"/>
    </xsl:apply-templates>
    <xsl:apply-templates select="." mode="running.foot.mode">
      <xsl:with-param name="master-reference"
select="$master-reference"/>
    </xsl:apply-templates>

    <fo:flow flow-name="xsl-region-body">

<!--
    Nasledujici radek je vlozen kvuli oprave
  -->
      <fo:block id="{$id}">

      <xsl:call-template name="make-auto-glossary"/>

<!--
    Nasledujici radek je vlozen kvuli oprave
  -->
      </fo:block>

    </fo:flow>
  </fo:page-sequence>
</xsl:template>


Pokud vam budou tyto upravy fungovat, ozvete se mi, prosim, a je je
zaradim do nove verze souboru fop-common.xsl.

> 
> Este mala poznamka na okraj: <!-- Oprava radku obsahu --> mi sposobuje 
> problemy, tak som ju vyhodil. Nic to nevylepsuje, avsak kludne 
> zdvojnasobi velkost suboru a stranky na ktorych je obsach sa zobrazuju 
> neuveritelne pomaly. A samotne cisla stranky suposunute prilis vpravo.

Je mozne, ze uz je to v oficialni verzi stylu opravene, nemel jsem
posledni dobou cas se tim zabyvat (osobne porad pouzivam 1.55). Co se
tyce te funkcnosti, je to hack, protoze FOP neumi zpracovat obsah pomoci
znacek, ktere jsou ve stylech pouzity (z hlavy uz si nepamatuju, o ktere
se jedna, ale urcite to najdete v archivu konference docbook-apps
http://lists.oasis-open.org/archives/docbook-apps/). Ty znacky opravuji
vystup radku obsahu, aby aspon trochu dobre vypadal. O tom presahu cisel
stranek vim, ale nevim jak to opravit s pomoci znacek, ktere FOP umi. A
vzhledem k tomu, ze po jedne opravne verzi FOPu, ktere by mela byt 
hotova v nejblizsich dnech, se vyvojari soustredi na zcela novou verzi,
bude tato chyba asi opravena az v ni. Nicmene termin dokonceni nove
verze je ve hvezdach :(((

Martin Perina





Další informace o konferenci Docbook