You need to sign in to do that
Don't have an account?
thsr
○○ PDFに出力際( renderAs="pdf")、<td></td>の内容を自動改行させる方法はあるか? ○○
PDFに出力際(renderAs="pdf")、<td></td>の内容を自動改行させる方法はあるか?
現状は長文の場合、まっすぐ伸びるのです。
ご教授いただけたら幸いです。
よろしくお願いいたします。
P.S. pageに出力時は大丈夫ですが、PDFに出力するとはみ出る。。。
確かにWバイトの文字はPDFにするとHTMLの幅の指定がきかないようです。
「改行コード」もしくは「<br />」タグで折り返しができるようです。
<apex:page renderAs="PDF"> <head> <style> body { font-family: Arial Unicode MS; } </style> </head> <body> <!-- Begin Default Content REMOVE THIS --> <h4>表1:折り返らない</h4> <table border="1"> <tr> <td width="200">あああああああああああああああ</td> </tr> </table> <!-- End Default Content REMOVE THIS --> <br /> <h4>表2:折り返る</h4> <table border="1"> <tr> <td width="200">ああああああ<br />ああああ<br />あああああ</td> </tr> </table> </body> </apex:page>
表1は200pxを指定しているのですが伸びています。
表2は200px以内に文字の中に改行タグ(<br />)があるので200pxが有効になっていると
思われます。
なので回避方法としてはコントローラ側で適当な幅になったら「改行コード」もしくは「<br />」タグを
入れるというのが1つの回避方法かもしれません。
以下コードは指定した文字数で改行コードを入れてくれる関数です。
// 引数1 value = 改行を入れたい文字列 // 引数2 posLength = 何文字目で改行コード(折り返し)を入れるかの文字数 // 戻り値 指定した文字数で改行コード(折り返し)がある文字列 private String kaigyo(String value, Integer posLength ){ if(value == null || value.length() <= posLength) return value; String rtnValue = value.substring(0, posLength ) + '\n'; for(Integer i = posLength; i < value.length(); i++){ if(Math.mod(i, posLength ) == 0){ if(value.length() > i + posLength){ rtnValue += value.substring(i, i + posLength ) + '\n'; }else{ rtnValue += value.substring(i,value.length()); } kaigyoCount[col]++; } } return rtnValue; }
pxを考慮してフォントサイズが決まっていれば100pxであれば10文字は入るなど計算ができると
思うのでその文字数になったら改行するなどのロジックをコントローラで実装するのが1つ回避方法と
思われます。
All Answers
確かにWバイトの文字はPDFにするとHTMLの幅の指定がきかないようです。
「改行コード」もしくは「<br />」タグで折り返しができるようです。
<apex:page renderAs="PDF"> <head> <style> body { font-family: Arial Unicode MS; } </style> </head> <body> <!-- Begin Default Content REMOVE THIS --> <h4>表1:折り返らない</h4> <table border="1"> <tr> <td width="200">あああああああああああああああ</td> </tr> </table> <!-- End Default Content REMOVE THIS --> <br /> <h4>表2:折り返る</h4> <table border="1"> <tr> <td width="200">ああああああ<br />ああああ<br />あああああ</td> </tr> </table> </body> </apex:page>
表1は200pxを指定しているのですが伸びています。
表2は200px以内に文字の中に改行タグ(<br />)があるので200pxが有効になっていると
思われます。
なので回避方法としてはコントローラ側で適当な幅になったら「改行コード」もしくは「<br />」タグを
入れるというのが1つの回避方法かもしれません。
以下コードは指定した文字数で改行コードを入れてくれる関数です。
// 引数1 value = 改行を入れたい文字列 // 引数2 posLength = 何文字目で改行コード(折り返し)を入れるかの文字数 // 戻り値 指定した文字数で改行コード(折り返し)がある文字列 private String kaigyo(String value, Integer posLength ){ if(value == null || value.length() <= posLength) return value; String rtnValue = value.substring(0, posLength ) + '\n'; for(Integer i = posLength; i < value.length(); i++){ if(Math.mod(i, posLength ) == 0){ if(value.length() > i + posLength){ rtnValue += value.substring(i, i + posLength ) + '\n'; }else{ rtnValue += value.substring(i,value.length()); } kaigyoCount[col]++; } } return rtnValue; }
pxを考慮してフォントサイズが決まっていれば100pxであれば10文字は入るなど計算ができると
思うのでその文字数になったら改行するなどのロジックをコントローラで実装するのが1つ回避方法と
思われます。
返事が大変遅くなって申し訳ございません。
ご回答ありがとうございます。
とても参考になりました。
またよろしくお願いします。:smileywink: