2

アプリケーションは、フロントエンドとしてのFlex、中間層としてのColdFusion 9、およびバックエンドとしてのMySQL5で構成されます。

MySQLテーブルには、HTMLフォーマットを含むいくつかのフィールドが含まれています。したがって、フィールドに値文字列「Test Record」がある場合 <TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="12" COLOR="#0B333C" LETTERSPACING="0" KERNING="0">Test Record<FONT SIZE="8"></FONT></FONT></P></TEXTFORMAT> 、MySQLテーブルのように格納されます。

現在、このフィールドの値はPDFドキュメントに次のように印刷されています。

<cfdocument format="pdf" filename="#report_filename_format#" orientation="landscape"
overwrite="yes"
marginbottom="0" marginleft="0" marginright="0" margintop="0"
pagetype="legal">


<tr>
<td width="20%" style="background-color:##CCCCCC; font-weight:bold; text-transform:uppercase; vertical-align:top;">
Value
</td>
<td width="80%">#printrecord.field_value#</td>
</tr>

フィールド値はHTML形式で保存されるため、使用されるスペースが大きくなり、印刷されるテキストのフォントタイプとフォントサイズを制御できなくなります。

  1. フィールドの値を通常のテキスト(HTML形式なし)に変換して、「テストレコード」がフォントサイズ10またはフォントサイズ30として保存されているかどうかに関係なく同じように印刷されるようにする、ColdFusion 9の関数はありますか?

  2. Flexアプリケーションで印刷されるレコードを取得し、TextAreaコントロール(Flex内)のfield.textプロパティを使用して通常のテキストに変換し、変換された値をColdFusionに渡してPDFドキュメントに印刷する方法を考えています。 。他にもっと良いオプションはありますか?

任意の提案をいただければ幸いです。

4

2 に答える 2

1

実際、「解決策」は非常に単純です。

<cfscript>
  data   = '<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="12" COLOR="##0B333C" LETTERSPACING="0" KERNING="0">Test Record<FONT SIZE="8"></FONT></FONT></P></TEXTFORMAT>';
  regex  = "<(.|\n)*?>";
  result = reReplaceNoCase(data, regex, "", "all");

  writeOutput(result);
</cfscript>

構文エラーを回避するために、例としてHTMLに追加のハッシュタグを追加しました。あなたが言ったことから、私はこれがとにかくdbクエリによってフェッチされると思います。

また(今すぐニッチピッキング!)新しい値でdbを更新し、可能であればCSSを優先してインラインスタイルを削除することをお勧めします;-)

于 2012-09-18T19:14:55.223 に答える
1

これを行う別の方法は、 jsoupのようなHTMLパーサーを使用することです。

これは、HTMLが予測できない場合や有効でない可能性がある場合に特に推奨されます。これは、ブラウザと同じように処理するためです(正規表現は単にパターンマッチングであり、実際には何であるか、何でないかはわかりません)。鬼ごっこ)。

<cfset data = '<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="12" COLOR="##0B333C" LETTERSPACING="0" KERNING="0">Test Record<FONT SIZE="8"></FONT></FONT></P></TEXTFORMAT>' />

<cfset jsoup = createObject('java','org.jsoup.Jsoup') />

<cfset text = jsoup.parse(data).text() />

<cfdump var=#text# />

jsoup行は、一度実行して、アプリケーションスコープなどに保存できます。また、jsoup jarを機能させるには、jsoup jarが必要です。CF9の場合は、jsoupjarを{coldfusion}/ libディレクトリにコピーしてから、サーバーを再起動する必要があります。

于 2012-09-18T22:36:53.230 に答える