2017-04-14 63 views
1

我想保留某些元素在一起。據我所知,最好的辦法是用XSL-FO在錶行上保持在一起,奇怪的結果

keep-with-next="always" 

在一個錶行上。

它似乎沒有按照我的想法工作。我建立了一個非常基本的測試:

<fo:table-row> 
    <fo:table-cell> 
    <fo:block>70</fo:block> 
    </fo:table-cell> 
</fo:table-row> 
<fo:table-row> 
    <fo:table-cell> 
    <fo:block>71</fo:block> 
    </fo:table-cell> 
</fo:table-row> 
<fo:table-row> 
    <fo:table-cell> 
    <fo:block>72</fo:block> 
    </fo:table-cell> 
</fo:table-row> 
<fo:table-row> 
    <fo:table-cell> 
    <fo:block>73</fo:block> 
    </fo:table-cell> 
</fo:table-row> 

導致以下分頁:

enter image description here

現在我想保持線71和72在一起。

我試圖把

keep-with-next="always" 

上線71我希望這條線71被下推到下一個頁面。實際發生的是,第70行也被推下。這是不必要的,只是以不同的方式撕開佈局(另一個應該保持在一起的塊被分開)。

enter image description here

我怎樣才能保持線71和72,同時一起離開獨自線70?

+0

您正在使用哪種格式器? – lfurini

+1

我被分配到一個.NET項目 - 我們正在使用一個名爲Fonet的庫(https://fonet.codeplex.com/) – Wolfgang

+0

我用真實的*文本*替換了代碼的* screenshot *,以便它可以被搜索並且更易於使用(如果因爲文本不可見而放置截圖,正確的方法是使用[代碼塊](http://stackoverflow.com/help/formatting))。 – lfurini

回答

0

你得到的結果不一定,因爲格式化可以自由地選擇分頁符,因爲他們認爲合適的,只要他們尊重輸入所表達的約束上:在你的榜樣,列#71和# 72確實按要求保持在一起。

但是,你可以使用一個休息財產強制列#70之間的分頁符和列#71:

<fo:table-row break-after="page"> 
    <fo:table-cell> 
    <fo:block>70</fo:block> 
    </fo:table-cell> 
</fo:table-row> 
<fo:table-row> 
    <fo:table-cell> 
    <fo:block>71</fo:block> 
    </fo:table-cell> 
</fo:table-row> 

(或下一行使用break-before="page"

格式化程序必須尊重全部打破屬性儘可能多保留屬性儘可能(XSL-FO推薦中的Keeps and Breaks),所以這應該產生所需的輸出;如果沒有,格式化程序肯定有一個錯誤。


的東西另外一個觀察你寫道:

這是不必要的,只是撕裂除了以不同的方式(即應該被放在一起的另一個街區之隔)的佈局。

如果事情真的應該被放在一起,我認爲這將是更好的使用保持性能從一開始明確設置在輸入這一制約因素,而不是逐步添加更多的屬性,直到你期望的結果。

+0

感謝您進入整個混亂......手頭真正的問題是我已經完成了您的工作建議 - 從一開始就把各個塊保持在一起。想象一下,第70行(被推倒)是一個更大的塊,應該保持在一起。 大(一起)塊也被推下(就像第70行)到下一頁(即使它有足夠的空間)。 以前的區塊會發生同樣的情況......等等。結果是一個空白的第一頁,然後是所有按下的內容。 我希望我描述得很好。 – Wolfgang