[XML/XSL] Przekształcanie na PDF

Odpowiedz Nowy wątek
2005-12-15 14:09
m010ch
0

Witam.

Mam mały problem, otóż jest sobie plik XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="osoby.xsl"?>

<osoby xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="osoby.xsd">

    <osoba plec="K" blizna="Nie">
  <imie>Jan</imie>
  <nazwisko>Nowak</nazwisko>
  <adres>ul. Wymyslona 2 62-437 Poznan</adres>
    </osoba>

    <osoba plec="M" blizna="Tak">
  <imie>Zbigniew</imie>
  <nazwisko>Kowalski</nazwisko>
  <adres>os. Bajkowe 14/3 60-321 Poznan</adres>
    </osoba>

</osoby>

i teraz stworzyłem dla niego plik XSL (XSLT + XSL-FO), umożliwiający przekształcenie go na PDF i ładne sformatowanie w tabelkę:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

    <xsl:output method="xml" />

    <xsl:template match="/osoby">
  <fo:root>
    <fo:layout-master-set>
    <fo:simple-page-master master-name="str_gl" page-height="400mm" page-width="300mm" margin-top="10mm" margin-bottom="10mm" margin-left="15mm" margin-right="20mm">
        <fo:region-body margin-top="0mm" margin-bottom="10mm" margin-left="0mm" margin-right="0mm" />
        <fo:region-after extent="10mm" />
    </fo:simple-page-master>
    </fo:layout-master-set>

    <fo:page-sequence master-reference="str_gl">
    <fo:flow flow-name="xsl-region-body">
        <fo:table>
      <fo:table-column column-width="88mm" />
      <fo:table-column column-width="62mm" />
      <fo:table-column column-width="35mm" />
      <fo:table-column column-width="50mm" />
      <fo:table-column column-width="50mm" />

      <fo:table-body>
        <fo:table-row>
          <fo:table-cell>
           <fo:block font-size="10pt" font-weight="bold" text-align="left">Imie</fo:block>
          </fo:table-cell>

          <fo:table-cell>
           <fo:block font-size="10pt" font-weight="bold" text-align="left">Nazwisko</fo:block>
          </fo:table-cell>

          <fo:table-cell>
           <fo:block font-size="10pt" font-weight="bold" text-align="left">Adres</fo:block>
          </fo:table-cell>

          <fo:table-cell>
           <fo:block font-size="10pt" font-weight="bold" text-align="left">Plec</fo:block>
          </fo:table-cell>

          <fo:table-cell>
           <fo:block font-size="10pt" font-weight="bold" text-align="left">Czy ma blizne?</fo:block>
          </fo:table-cell>
        </fo:table-row>

        <xsl:apply-templates />

      </fo:table-body>
        </fo:table>
    </fo:flow>
    </fo:page-sequence>
  </fo:root>
    </xsl:template>

    <xsl:template match="osoba">
  <fo:table-row>
    <xsl:apply-templates />
  </fo:table-row>
    </xsl:template>

    <xsl:template match="imie">
  <fo:table-cell text-align="left">
    <fo:block font-size="10pt">
    <xsl:value-of select="." />
    </fo:block>
  </fo:table-cell>
    </xsl:template>

    <xsl:template match="nazwisko">
  <fo:table-cell text-align="left">
    <fo:block font-size="10pt">
    <xsl:value-of select="." />
    </fo:block>
  </fo:table-cell>
    </xsl:template>

    <xsl:template match="adres">
  <fo:table-cell text-align="left">
    <fo:block font-size="10pt">
    <xsl:value-of select="." />
    </fo:block>
  </fo:table-cell>
    </xsl:template>

    <xsl:template match="???">                            <----------------------------
  <fo:table-cell text-align="left">
    <fo:block font-size="10pt">
    <xsl:value-of select="@plec" />
    </fo:block>
  </fo:table-cell>
    </xsl:template>

    <xsl:template match="???">                            <----------------------------
  <fo:table-cell text-align="left">
    <fo:block font-size="10pt">
    <xsl:value-of select="@blizna" />
    </fo:block>
  </fo:table-cell>
    </xsl:template>

</xsl:stylesheet>

Niestety - nie wiem jak wyciągnąc i wstawić do pliku PDF wartości parametrów pliku XML (wskazane strzałką), próbowałem na wiele różnych sposobów i nie mogę sobie poradzić :/

Bardzo proszę o jakąkolwiek pomoc.
Pozdrawiam.

p.s. Do przekształcania plików używam fopa w wersji 0.90alpha1
p.s.2. Jak widać, nie używam ogonków w dokumentach, ponieważ fop ich nie lubi i w PDF'ie wychodzą krzaki, jeżeli ktoś mógłby pomóc (przy okazji) również w tej kwestii, będę wdzięczny :)

Pozostało 580 znaków

2005-12-15 15:59
0

Dla każdej OSOBY należy stworzyć kolejną kolumnę płeć i blizna, czyli po wywołaniu wszystkich template'ów Imię, Nazwisko itp. należy stworzyć 2 kolumny płeć i blizna czyli:

<xsl:template match="osoba"> <fo:table-row> <xsl:apply-templates /> <fo:table-cell text-align="left"> <fo:block font-size="10pt"> <xsl:value-of select="@plec" /> </fo:block> </fo:table-cell> <fo:table-cell text-align="left"> <fo:block font-size="10pt"> <xsl:value-of select="@blizna" /> </fo:block> </fo:table-cell> </fo:table-row> </xsl:template> Za ew. pomyłkę przepraszam bo nie znam poleceń <fo: ...="...">, na razie znam tylko XML + XSLT. Popraw ewentualnie duże parametry plec na Plec czy jak tam masz ustawione. //DOpisane Korzystając z tego rozwiązania oczywiście usuń te 2 ostatnie template'y gdzie nie wiedziałeś do jakich węzłów mają się odnosić (match="???")

Pozostało 580 znaków

2005-12-15 21:23
m010ch
0

Nawet nie wiesz jak bardzo mi pomogłeś - dziękuję Ci bardzo :)
Teraz dopiero widzę jakie to jasne i przejrzyste :)

A tak to powinno poprawnie wyglądać (fragment XSLT do zmiany):


    <xsl:template match="osoba">
        <fo:table-row>

            <fo:table-cell text-align="left">
                <fo:block font-size="10pt">
                    <xsl:value-of select="imie" />
                </fo:block>
            </fo:table-cell>

            <fo:table-cell text-align="left">
                <fo:block font-size="10pt">
                    <xsl:value-of select="nazwisko" />
                </fo:block>
            </fo:table-cell>

            <fo:table-cell text-align="left">
                <fo:block font-size="10pt">
                    <xsl:value-of select="adres" />
                </fo:block>
            </fo:table-cell>

            <xsl:apply-templates />

            <fo:table-cell text-align="left">
                <fo:block font-size="10pt">
                    <xsl:value-of select="@plec" />
                </fo:block>
            </fo:table-cell>

            <fo:table-cell text-align="left">
                <fo:block font-size="10pt">
                    <xsl:value-of select="@blizna" />
                </fo:block>
            </fo:table-cell>            

        </fo:table-row>
    </xsl:template>

Jeszcze raz bardzo Ci dziękuję :)

Pozdrawiam.

Pozostało 580 znaków

2005-12-15 21:46
0
m010ch napisał(a)

Jeszcze raz bardzo Ci dziękuję :)

Pozdrawiam.

Nie ma za co, do usług :)
Ja też pozdriawiam.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0