2017-11-27 34 views
1

簡単なPDFレポートを生成するためにFONETアプリケーションを開発しています。クライアントが登録商標記号を上付き文字のレベルに正しく引き上げることを希望する以外は、すべて機能しています。FONET/FOP上付き文字。インラインコンテナがまったく表示されない

インライン要素で成功しなかったので、インターネットの悲惨なXSL:FOのドキュメントを掘り下げた後、fo:inline-containerでそれをラップする必要があると考えたので、text-altitudeをインライン要素で試しました。しかし、それはまったく表示されません。

私はこのbasic example使用して、それを削減しました:

<?xml version="1.0" encoding="utf-8"?> 
<!-- inline-container-Converts-Block-to-Inline.fo 
- Copyright (c) 2016, HerongYang.com, All Rights Reserved. 
--> 
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
<fo:layout-master-set> 
    <fo:simple-page-master master-name="page" 
    margin="0.1in" page-height="4in" page-width="3in"> 
    <fo:region-body region-name="body" background-color="#eeeeee"/> 
    </fo:simple-page-master> 
</fo:layout-master-set> 
<fo:page-sequence master-reference="page"> 
    <fo:flow flow-name="body"> 
    <fo:block margin="0.1in" padding="0.2in" 
    border-width="1px" border-style="solid" 
    background-color="#eeffff" color="#000000" 
    font-family="sans-serif" font-size="10pt"> 
    Once upon a time 
    <fo:inline-container width="0.7in" margin="0in" 
    alignment-baseline="middle"> 
    <fo:block background-color="#eeeeee" margin="0in" 
    border-width="1px" border-style="solid" 
    padding="4px">there were three little pigs</fo:block> 
    </fo:inline-container> 
    who lived with their Mother. 
    Early one morning they woke up and their mother said, 
    "<fo:inline font-style="italic" color="#ff22ff">you're too big 
    for this house and its time you left home.</fo:inline>" 
    </fo:block> 
    </fo:flow> 
</fo:page-sequence> 
</fo:root> 

をして、それを実行しようとしたが、これはまたinline-containerからは何も表示されません。 this online processorで試したところ、それはコンテナから何も表示されないので、FONETの問題だけではありません。

FONETは、text-altitudeinline-containerの両方についてshould have basic supportであるFOP 0.2のポートです。

私には何が欠けていますか?このバージョンのFOPでスーパースクリプト効果を得ることは可能ですか?

答えて

3

リンク先の適合性ページには、fo:inline-containerがサポートされていないことが示されています。最新のFOP(https://xmlgraphics.apache.org/fop/compliance.html)には部分的なサポートしかありません。

私は、あなたが仕事をしようとしていたからだと思っていますが、0.7インチ幅のスペースに「3匹の小さな豚がいました」と入れて、fo:inline-containerの背の高い狭いエリアにします。

いいえ、上付き文字を作成するのにfo:inline-containerは必要ありません。ちょうどfo:inlinebaseline-shift="super"を使用してください(https://www.w3.org/TR/xsl11/#baseline-shiftを参照)。

あなたはまた、上付き文字は「doesnのように、祖先FOに(https://www.w3.org/TR/xsl11/#line-height-shift-adjustmentを参照)の両方の上付きテキストのfont-sizeを減らす(FOフォーマッタを使用して、また、その必要があるとしないので)とline-height-shift-adjustment="disregard-shifts"を追加することを検討することをお勧めしますhttps://www.antennahouse.com/antenna1/comprehensive-xsl-fo-tutorials-and-samples-collection/


最後リゾールで

<fo:block line-height-shift-adjustment="disregard-shifts" 
     margin="0.1in" padding="0.2in" 
     border-width="1px" border-style="solid" 
     background-color="#eeffff" color="#000000" 
     font-family="sans-serif" font-size="10pt"> 
    Once upon a time<fo:inline 
    baseline-shift="super" font-size="0.8em">®</fo:inline> 
    there were three little pigs<fo:inline 
    baseline-shift="super" font-size="0.8em">®</fo:inline> 
    who lived with their Mother. 
    Early one morning they woke up and their mother said, 
    "<fo:inline font-style="italic" color="#ff22ff">you're too big 
    for this house and its time you left home.</fo:inline>" 
</fo:block> 

はまた、「総合XSL-FOチュートリアルとサンプル集」の「文字スタイルの設定」を参照してください:tはあなたの行の高さを変えますあなたのFOフォーマッタがbaseline-shiftを実装していないときは、上付きの見た目の登録商標シンボルを持つフォントを見つけることです。 Windowsの文字マップユーティリティを使った簡単なトロールでは、「Calibri」には1つしかないことがわかりました。

+0

残念ながら、ベースラインシフトは、そのオンラインFOP 1.0プロセッサでは完全に機能しますが、.NETライブラリがポートであるFOP 0.2ではなく、私のコードでは機能しません。あなたはスーパースクリプトのための他の秘訣を持っていますか? – Whelkaholism

+2

申し訳ありません。 'baseline-shift'は、上付き文字を得るために設計されたプロパティです。あなたの唯一の希望は、上付き文字のような登録商標シンボルを持つフォントを見つけることです。 Windowsの文字マップユーティリティを使った簡単なトロールでは、「Calibri」には1つしかないことがわかりました。他にもあるかもしれない。あるいは、XSL 1.1をさらに実装する別のFOフォーマッタを試すこともできます。 –

+1

Apache FOP 0.2.5が2003年7月18日にリリースされました。これは14年以上前です。おそらく10年前か2年前に開発されたソフトウェアを実際に使って、過去数年間に開発されたサービスを利用することになります。 –

関連する問題