2012-07-26 7 views
6

Mam program, który tworzy opis XSL-FO z pliku tekstowego i konwertuje go do dokumentu PDF. Każda linia w pliku tekstowym jest konwertowana na fo:block w FO, co brzmi nie tak, ale nie mogę tego teraz zmienić. Mój dokument zawiera od 1 do 3 stron formatu A4.Jak utworzyć układ dwukolumnowy z XSL-FO i FOP 1.0?

Muszę teraz dodać grafikę o szerokości około 8 cm poniżej istniejącego tekstu. Powinien być wyrównany do lewej. Obok niego chcę umieścić blok tekstu z (długim) opisem.

Layout example

Szukałem w kilku dokumentacji dla FO i podszedł z tym:

<fo:block intrusion-displace="block" margin-top="20mm"> 
<fo:float float="right"> 
    <fo:block margin-left="20mm"> 
    Bacon ipsum dolor sit amet laborum proident... 
    </fo:block> 
</fo:float> 
    <fo:external-graphic src="image.png"/> 
</fo:block> 

To wydawało się być to, co chciałem (po pewnym dostrajania oczywiście), ale niestety jeszcze FOP does not supportfo:float.

Istnieje również sposób tworzenia wielu kolumn (bez tabeli), ale nie byłem w stanie dowiedzieć się, jak to działa. Wydaje się, że potrzebujemy do tego nowej strony, ale muszę użyć bieżącej strony, jeśli jest dostępna przestrzeń (o której nie myślę chyba).

Moje pytanie: Czy istnieje inny sposób na zbudowanie tego bez użycia fo:float?

+4

+1 za bekon ipsum. :-) –

+1

Dwie kolumny nie pomogą. Jeśli tekst jest większy niż obraz, wyważarka kolumn rozpocznie tekst * pod * obrazem i kontynuuje go w następnej kolumnie. Jeśli tekst jest z pewnością mniejszy, tabela wydaje się być dobra. – bytebuster

Odpowiedz

4

Możesz spróbować użyć obrazu jako obrazu tła i pozostawić lewą wyściółkę, która jest tak szeroka jak obraz.

<fo:block intrusion-displace="block" margin-top="20mm"> 
    <fo:block padding-left="20mm" 
     background-image="image.png" 
     background-repeat="no-repeat"> 
    Bacon ipsum dolor sit amet laborum proident... 
    </fo:block> 
</fo:block> 

Jeśli obraz wymaga dalszego leczenia, które jest możliwe tylko <fo:external-graphic>, można zastosować technikę wypełniania i dodatkowego, całkowicie umieszczone blokowego pojemnika:

<fo:block intrusion-displace="block" margin-top="20mm"> 
    <fo:block padding-left="20mm"> 
    Bacon ipsum dolor sit amet laborum proident... 
    </fo:block> 
    <fo:block-container absolute-position="absolute"> 
     <fo:block> 
      <fo:external-graphic src="image.png"/> 
     </fo:block> 
    </fo:block-container> 
</fo:block> 

Trzecią opcją byłoby użyć stół.

Powiązane problemy