![](/img/trans.png)
[英]How to repeat same template in table-row using XSL-FO/Apache FOP
[英]How to detect overflow or line breaks in XSL-FO document rendered with Apache FOP
我有一個非常簡單的FO文檔:
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4">
<fo:region-body margin-top="30mm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<fo:flow flow-name="xsl-region-body">
<fo:block-container height="10mm" font-size="8mm" overflow="error-if-overflow" wrap-option="wrap">
<fo:block wrap-option="wrap">Hello W3Schools Hello W3Schools Hello W3Schools sad da sadasd dsaasd</fo:block>
</fo:block-container>
</fo:flow>
</fo:page-sequence>
</fo:root>
將overflow
設置為error-if-overflow
,呈現此文檔時會出錯。 有什么方法可以檢測文本中的溢出位置? 我希望能夠手動將文本分成多部分,但是我不希望一次刪除一個單詞並重新運行渲染以查看其是否再次失敗的想法。
得到的異常是:
Content overflows the viewport of an fo:block-container in block-progression direction by 26078 millipoints. Content will be clipped. (See position 12:103)
不幸的是,這是發生錯誤的block-container
標簽的位置,而不是造成溢出的特定單詞。
您可以使用FOP的“中間格式”功能來創建生成的頁面和區域的XML表示 ,而不是創建PDF輸出。
然后,您可以將其用作輸入
您可以使用以下命令從命令行創建區域樹(AT)輸出
fop input.fo -at application/pdf at.xml
或者您可以使用創建中間格式(IF)輸出
fop input.fo -if application/pdf if.xml
( FOP的站點上有有關如何使用Java代碼以編程方式產生中間格式輸出的詳細信息)。
例如,如果您輸入的FO文件包含
<!--
there is no need for the wrap-option="wrap" attributes, as that is the default value,
I added an id attribute on the fo:block-container
-->
<fo:block-container id="foo" height="10mm" font-size="8mm" overflow="error-if-overflow">
<fo:block>Hello W3Schools Hello W3Schools Hello W3Schools sad da sadasd dsaasd</fo:block>
</fo:block-container>
IF輸出(比AT的輸出少一些)是這樣的:
...
<page index="0" name="1" page-master-name="A4" width="594720" height="792000">
<page-header/>
<content>
<viewport transform="translate(0,85039)" width="594720" height="706961">
<viewport width="594720" height="28346" clip-rect="0 0 594720 28346">
<font family="sans-serif" style="normal" weight="400" variant="normal" size="22677" color="#000000"/>
<id name="foo"/>
<text x="0" y="19400">Hello W3Schools Hello W3Schools Hello W3Schools sad</text>
<text x="0" y="46612">da sadasd dsaasd</text>
</viewport>
</viewport>
</content>
<page-trailer/>
</page>
...
XPath //viewport[id[@name = 'foo']]/text[1]
為您提供第一行的文本內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.