多くの場合、プリント出力が画面の表示のようになるのは望ましくありません。画面上で使用されている水平方向のレイアウトが、用紙へのプリントには適していない場合があります。画面上の表示要素によっては、印刷結果の妨げになるものもあります。プリント内容と表示内容を変える必要がある場合は、他にもあります。例えば、パスワードフィールドを省略する必要がある場合などです。
プリント固有の内容と外観で出力をプリントするには、画面レイアウトとプリントレイアウトで別のオブジェクトを使用し、画面レイアウトで使用されたデータを使用してプリントレイアウトを行います。次に、FlexPrintJob addObject() メソッドを呼び出すときに、このプリントレイアウトを使用します。
フォームに DataGrid、AdvancedDataGrid、OLAPDataGrid のいずれかのコントロールが含まれている場合は、それぞれのプリントレイアウトで PrintDataGrid、PrintAdvancedDataGrid、PrintOLAPDataGrid のいずれかのコントロールを使用します。これらのコントロールのプリント版には、印刷出力の標準コントロールを超える 2 つの利点があります。
例:簡単なプリント固有の出力フォーマットのコードでは、簡単な PrintDataGrid コントロールを使用します。PrintDataGrid コントロールの使用の詳細については、複数ページのグリッドに対する PrintDataGrid コントロールの使用を参照してください。PrintAdvancedDataGrid および PrintOLAPDataGrid のコントロールの使用の詳細については、PrintAdvancedDataGrid コントロールの使用を参照してください。
この例では、連絡先情報を入力するための 3 つのテキストボックスと、数行にわたる製品情報を表示するためのデータグリッドを含む Flex フォームを作成します。次の図は、このアプリケーションの出力が画面に表示された状態を示しています。
次のイメージは、ユーザーが「印刷」ボタンをクリックしてデータをプリントしたときの、出力の外観を示しています。
この例では、MXML アプリケーションファイルは画面を表示してプリントを制御します。個別のカスタム MXML コンポーネントにより、プリント出力の外観が決定されます。
ユーザーが「印刷」ボタンをクリックすると、アプリケーションの doPrint() メソッドは以下の操作を実行します。
プリント出力には、画面からのラベルは含まれていません。アプリケーションでは、画面の 3 つの入力ボックスのテキストが 1 つにまとめられて、Label コントロール内のプリント用文字列に挿入されます。
次のコードでは、アプリケーションファイルのコンテンツが表示されます。
<?xml version="1.0"?>
<!-- printing\DGPrintCustomComp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
height="450"
width="550">
<mx:Script>
<![CDATA[
import mx.printing.FlexPrintJob;
import myComponents.MyPrintView;
public function doPrint():void {
// Create a FlexPrintJob instance.
var printJob:FlexPrintJob = new FlexPrintJob();
// Start the print job.
if(printJob.start()) {
// Create a MyPrintView control as a child
// of the current view.
var formPrintView:MyPrintView = new MyPrintView();
addChild(formPrintView);
// Populate the print control's contact label
// with the text from the form's name,
// phone, and e-mail controls.
formPrintView.contact.text =
"Contact: " + custName.text + " " +
custPhone.text + " " + custEmail.text;
// Set the print control's data grid data provider to be
// the displayed data grid's data provider.
formPrintView.myDataGrid.dataProvider =
myDataGrid.dataProvider;
// Add the SimplePrintview control to the print job.
// For comparison, try setting the
// second parameter to "none".
printJob.addObject(formPrintView);
// Send the job to the printer.
printJob.send();
// Remove the print-specific control to free memory.
removeChild(formPrintView);
}
}
]]>
</mx:Script>
<!-- The form to display-->
<mx:Form id="myForm">
<mx:FormHeading label="Contact Information"/>
<mx:FormItem label="Name: ">
<mx:TextInput id="custName"
width="200"
text="Samuel Smith"
fontWeight="bold"/>
</mx:FormItem>
<mx:FormItem label="Phone: ">
<mx:TextInput id="custPhone"
width="200"
text="617-555-1212"
fontWeight="bold"/>
</mx:FormItem>
<mx:FormItem label="Email: ">
<mx:TextInput id="custEmail"
width="200"
text="sam@sam.com"
fontWeight="bold"/>
</mx:FormItem>
<mx:FormHeading label="Product Information"/>
<mx:DataGrid id="myDataGrid" width="300">
<mx:dataProvider>
<mx:Object Product="Flash" Code="1000"/>
<mx:Object Product="Flex" Code="2000"/>
<mx:Object Product="ColdFusion" Code="3000"/>
<mx:Object Product="JRun" Code="4000"/>
</mx:dataProvider>
</mx:DataGrid>
<mx:Button id="myButton"
label="Print"
click="doPrint();"/>
</mx:Form>
</mx:Application>
前の例で実行する SWF ファイルは以下のとおりです。
次の MyPrintView.mxml ファイルでは、アプリケーションの doPrint() メソッドが使用するコンポーネントを定義します。このコンポーネントは VBox コンテナです。このコンポーネントには、フォームの最初の 3 フィールドの連絡先情報を書き込むための Label コントロールと、画面ビューの DataGrid コントロールのデータソースからのデータを表示するための PrintDataGrid コントロールが含まれます。PrintDataGrid コントロールとプリント時の利点の詳細については、複数ページのグリッドに対する PrintDataGrid コントロールの使用を参照してください。
<?xml version="1.0"?>
<!-- printing\myComponents\MyPrintView.mxml -->
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
backgroundColor="#FFFFFF"
height="250" width="450"
paddingTop="50" paddingLeft="50" paddingRight="50">
<!-- The controls to print, a label and a PrintDataGrid control. -->
<mx:Label id="contact"/>
<mx:PrintDataGrid id="myDataGrid" width="100%">
<mx:columns>
<mx:DataGridColumn dataField="Product"/>
<mx:DataGridColumn dataField="Code"/>
</mx:columns>
</mx:PrintDataGrid>
</mx:VBox>
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート