如果以前的頁面內容僅在頁面高度的60%以上結束,我需要在XSL-FO中插入分頁符。例如,如果頁面'one'上的文本佔據頁面高度的30%,則下一部分的文本會放在此頁面上繼續前面的文本。否則,新頁面將被創建。 在FOP中可能嗎?XSL-FO分頁符取決於前一頁的填滿程度
回答
簡短的答案是你不能。 XSL FO和相應的格式化程序是爲批量操作而設計的,不會執行前瞻(或後臺)操作來作出決定,特別是如果這些決定取決於頁面位置。在正常的批量格式化操作中,您必須將思考過程限制在應該一起保存的內容以及不應該保存的內容。當你開始思考「如果內容超過頁面的X%,我希望有條件的頁面中斷」,那麼你就錯過了這些產品,並且「開箱即用」的產品沒有按照這種要求設計。對於多通道格式化引擎,這些通常是非常慢的要求。
您可以完成您的任務,但只能通過集成到流程中的自定義編程完成。你可以調查更多的地方,如這個鏈接,其中一些人正在擴展在格式化過程中與格式化程序交互的能力:https://www.w3.org/community/ppl/wiki/XSLTExtensions
恕我直言,如果你想要一個解決方案執行那麼你需要做出決定如何適應內容提前,而不是試圖做的事情,取決於「我走了多少頁」。
2013年的會議文件[「XSL-FO格式化決策」](http://www.balisage.net/Proceedings/vol10/print/Graham01/BalisageVol10-Graham01.html)可能會引起人們的興趣。摘要:「XSL-FO有一個很好的線性處理模型,但它經常需要根據格式化輸出的大小來決定格式化輸出中的內容,並且定義的XSL 1.1不要讓你這樣做,本文着眼於如何在XSL-FO處理當中以及未來可能的發展中做出這樣的決策。「 – mzjn
+! @mzjn肯定。我讀過那篇論文。它是決定什麼是真正適用於熄燈格式的問題,以及是否需要將這些問題帶回到傳統的交互式實用格式化程序中。他們需要與否?它肯定有「案例」,但是它有很大的「市場」。這是真實的情況。 –
您可以嘗試將page-sequence-master與組合的simple-page-master一起使用。
例1(與頁腳播放):
<fo:simple-page-master master-name="a4_rest" page-width="21cm" page-height="297mm" margin-top="{$page_margin_top}" margin-left="{$page_margin_left}" margin-right="{$page_margin_right}" margin-bottom="{$page_margin_bottom}">
<fo:region-body/>
</fo:simple-page-master>
<fo:simple-page-master master-name="a4_footer" page-width="21cm" page-height="297mm" margin-top="{$page_margin_top}" margin-left="{$page_margin_left}" margin-right="{$page_margin_right}" margin-bottom="{$page_margin_bottom}">
<fo:region-body margin-bottom="{$footer_distance}"/>
<fo:region-after extent="{$footer_distance}"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="firstPage60Percent">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference page-position="first" master-reference="a4_footer"/>
<fo:conditional-page-master-reference page-position="any" master-reference="a4_rest"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
您需要使用主基準頁面序列= 「firstPage60Percent」 選項。 所以,你需要設置下面名爲「a4_footer」的簡單頁面主選項:
集footer_distance至30%-page餘裕底部
或者
設置頁面與容限底部至30%-footer_distance。
和瞧。
但是,你下一節是什麼?在塊容器上,您可以使用保持在一起=「始終」或「頁內」選項,因此如果此頁面上沒有更多空間,它可以放到下一頁。等我不知道你的文件。需要更多的信息,如果你不能解決這個問題。
- 1. 取決於頁
- 2. 頁腳高度不填滿屏幕?
- 3. 解決分頁符
- 4. 如何自動分頁取決於angularjs中的容器高度
- 5. Div未填滿頁面
- 6. div with heigth填滿頁面
- 7. 取決於當前分頁號碼移動滑塊
- 8. 取決於ID的唯一頁面
- 9. CSS樣式,頁眉和頁腳的分辨率取決於
- 10. UIScrollView與分頁+顯示前一頁/後一頁的一部分
- 11. 取決於頁面上的項目隱藏的動態頁面的一部分
- 12. 內容自動調整高度取決於頁面高度
- 13. 沒有填滿頁面的其餘部分
- 14. Phonegap - CSS Flexbox - div填滿頁面的其餘部分
- 15. Python:如何填充取決於前一個值(前一行)的Pandas列?
- 16. 圖像沒有填滿整個頁面
- 17. 標題沒有填滿整個頁面?
- 18. 不同高度的元素取決於頁面加載
- 19. 獲取針對分頁的當前頁和頁面
- 20. 取決於語言的打開頁面
- 21. 取決於頁面位置的CSS類
- 22. Solr:使用分頁光標獲取前一頁
- 23. 從前一頁獲取頁面標題
- 24. 徽標未佔滿頁眉的高度
- 25. 獲取所有域的一個頁面取決於使用Nokogiri
- 26. 填充向前或向後取決於另一行
- 27. 如何讓class =「selected」取決於當前頁面/ url是什麼
- 28. css標準標籤頁邊距取決於前後元素
- 29. 動態分頁取決於mySQL數據庫中的行數
- 30. 如何分頁取決於for()循環的mysql查詢
我沒有看到任何方式來做到這一點。取決於頁面的「豐滿度」,FO處理器無法有條件地添加分頁符。它需要1)以某種方式測量「豐滿度」,2)將該信息反饋給處理器。這種機制在XSL-FO中不存在。 – mzjn
我不知道這樣做的方式,但不會分享@ mzjn的悲觀主義。這個問題出現在xsl fo處理器中,例如就像在段落的最後一行之前避免分頁符一樣 - 在這種情況下,如果超過60%的填充量,就必須有一個打破獎勵(儘管這顯然不會是一個確切的限制) –
@mzjn是正確。 XSL FO作爲一個規範,大多數處理器並不是基於我身後的東西而被設計爲「後視」或更適當的「更改格式」。有一些例外的腳註會改變頁面上的內容(當然這可能會將引用腳註的內容移出頁面)......但這些都是衆所周知的。OP需要的不是XSL FO產品的核心,但可以根據需要進行編程,從而大大降低性能。 –