1

AlivePdfを使用してフレックスアプリケーションでPDFテーブルを作成しようとしています。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                xmlns:mh="mh.components.*"
                layout="absolute" width="500" height="500">



<mx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;

        import org.alivepdf.colors.RGBColor;
        import org.alivepdf.display.Display;
        import org.alivepdf.drawing.Caps;
        import org.alivepdf.fonts.FontFamily;
        import org.alivepdf.fonts.Style;
        import org.alivepdf.grid.Grid;
        import org.alivepdf.images.ImageFormat;
        import org.alivepdf.layout.Orientation;
        import org.alivepdf.layout.Resize;
        import org.alivepdf.layout.Size;
        import org.alivepdf.layout.Unit;
        import org.alivepdf.pages.Page;
        import org.alivepdf.pdf.PDF;
        import org.alivepdf.saving.Method;
        import org.alivepdf.visibility.Visibility;

        import org.alivepdf.grid.*;





        private var myPDF:PDF;


        //print chart in pdf format
        protected function savePDF(e:MouseEvent):void
        {
            var myPDF:PDF = new PDF ( Orientation.PORTRAIT, Unit.MM);
            myPDF.setDisplayMode(Display.FULL_PAGE);
            myPDF.addPage();



            myPDF.setXY( 10, 70);
            myPDF.textStyle ( new RGBColor ( 0x000000 ) );

            var dp:ArrayCollection = new ArrayCollection();
            dp.addItem( { firstName : "Bob Geldorf akjaskaj skajs as kajs kaj k dklfj sdkfjl sdkjf ksdj fkjs dkfj ksdj ", lastName : "Groove", city : "Paris" } );
            dp.addItem( { firstName : "Bob", lastName : "Wise", city : "Paris" } );
            dp.addItem( { firstName : "Bob", lastName : "Wise", city : "Paris" } );
            dp.addItem( { firstName : "Bob", lastName : "Wise", city : "Paris" } );


            var grid:Grid = new Grid ( dp.toArray(), 200, 100, new RGBColor (0x00DEFF));


            myPDF.addGrid( grid, 0, 0, true );
            myPDF.save( Method.REMOTE, "coldfusion/pdf.cfm", "inline", "test.pdf" );;
        }



    ]]>
</mx:Script>    

<mx:VBox width="100%" height="100%">


    <mx:HBox width="100%" backgroundColor="#FFFFFF">
        <mx:Spacer width="100%"/>

        <mx:Button horizontalCenter="0" label="Save to PDF" height="22"  click="savePDF(event)"  id="savePDFBtn" toolTip="SAVE TO PDF"/>

    </mx:HBox>
</mx:VBox>

奇妙なことに、スクリプトはダブルヘッダーのテーブルを作成しますが、その理由はわかりません。あなたはこのリンクで生成されたpdfを見ることができます:https ://docs.google.com/viewer?url = presttiinpdap.biz / pdf / myPDF.pdf

4

2 に答える 2

2

どのバージョンのライブラリを使用していますか?現在のバージョン0.1.5RCでコードをコンパイルしようとしましたが、コンパイラーがいくつかのクラスを見つけることができませんでした。

クラスパスを修正した後、「new Grid(...)」コンストラクターには7つのパラメーター(この場合は4つのみ)が必要であることがわかりました。

もう1つの問題は、「Grid(...)」の「幅」です。開発者がそれで何を表現したかはわかりません。60でしか通常の視界が得られませんでした。

結局、私は次のPDFを手に入れました:

AlivePDFグリッド

これが私のコードです:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" width="500" height="500">
<fx:Script>
    <![CDATA[
    import mx.collections.ArrayCollection;
    import org.alivepdf.colors.RGBColor;
    import org.alivepdf.data.Grid;
    import org.alivepdf.display.Display;
    import org.alivepdf.drawing.Caps;
    import org.alivepdf.fonts.FontFamily;
    import org.alivepdf.fonts.Style;
    import org.alivepdf.images.ImageFormat;
    import org.alivepdf.layout.Orientation;
    import org.alivepdf.layout.Resize;
    import org.alivepdf.layout.Size;
    import org.alivepdf.layout.Unit;
    import org.alivepdf.pages.Page;
    import org.alivepdf.pdf.PDF;
    import org.alivepdf.saving.Method;
    import org.alivepdf.visibility.Visibility;
    import org.alivepdf.layout.*;
    private var myPDF:PDF;

    protected function savePDF(e:MouseEvent):void
    {
        var myPDF:PDF = new PDF( Orientation.PORTRAIT, Unit.MM); 
        myPDF.setDisplayMode( Display.FULL_PAGE, Layout.SINGLE_PAGE );

        var newPage:Page = new Page ( Orientation.PORTRAIT, Unit.MM);
        myPDF.addPage(newPage);

        myPDF.textStyle ( new RGBColor ( 0x000000 ) );

        var dp:ArrayCollection = new ArrayCollection();
        dp.addItem( { firstName : "Bob Geldorf akjaskaj skajs as kajs kaj k dklfj sdkfjl sdkjf ksdj fkjs dkfj ksdj ", lastName : "Groove", city : "Paris" } );
        dp.addItem( { firstName : "Bob", lastName : "Wise", city : "Paris" } );
        dp.addItem( { firstName : "Bob", lastName : "Wise", city : "Paris" } );
        dp.addItem( { firstName : "Bob", lastName : "Wise", city : "Paris" } );

        //var grid:Grid = new Grid ( dp.toArray(), 200, 100, new RGBColor (0x00DEFF));

        var grid:Grid = new Grid (dp.toArray(), 60, 100, new RGBColor(0x00DEFF), new RGBColor (0xFFFFFF), false, new RGBColor (0x000000));
        myPDF.addGrid( grid, 0, 0, true );

        //myPDF.save( Method.REMOTE, "coldfusion/pdf.cfm", "inline", "test.pdf" );

        var f:FileReference = new FileReference();
        var b:ByteArray = myPDF.save(Method.LOCAL);
        f.save(b, "test.pdf");
    }

    ]]>
</fx:Script>    

<mx:VBox width="100%" height="100%">
    <mx:HBox width="100%" backgroundColor="#FFFFFF">
        <mx:Spacer width="100%"/>
        <mx:Button horizontalCenter="0" label="Save to PDF" height="22"  click="savePDF(event)"  id="savePDFBtn" toolTip="SAVE TO PDF"/>
    </mx:HBox>
</mx:VBox>
</s:Application>

それを試してみてください、それはあなたを助けるかもしれません。

于 2013-02-10T20:31:45.543 に答える
2

グリッドを使用してPDFを作成すると、ここで報告されているように、ヘッダーが重複するという同じ問題が発生しました。あなたの問題から数年後ですが、私は今それを見つけたので、ここに私の解決策があります...

最新のAlivePDFバージョンを確実に使用するために、SVNから最新のソースコードをダウンロードしました:http://alivepdf.googlecode.com/svn/trunk/AlivePDFBeta/src

これはAlivePDF0.1.5RCとして配布されていると思いますが、配布されたSWCにはいくつかのメソッドシグネチャに違いがあるようです。

グリッドヘッダーの追加に関連する動作についてAlivePDFソースコードをスキャンしているときに、クラスorg.alivepdf.pdf.PDF、パブリックメソッドaddGridに気づきました。その方法は、おそらく誤って、グリッドヘッダーを2回追加しています。これは、次のソースコードに示すように、4178行目から4180行目にコメントを付けることで修正されました。

コメント部分を含む完全なメソッド:

public function addGrid ( grid:Grid, x:Number=0, y:Number=0, repeatHeader:Boolean=true ):void
        {   
            if ( textColor == null ) 
                throw new Error("Please call the setFont and textStyle method before adding a Grid.");

            currentGrid = grid;
            currentGrid.x = x;
            currentGrid.y = y;
            var i:int = 0;
            var j:int = 0;

            currentGrid.generateColumns(false);
            columns = currentGrid.columns;

            var row:Array;
            columnNames = new Array();
            var lngColumns:int = columns.length;    
            var item:*;

            for (i = 0; i< lngColumns; i++)
                columnNames.push ( new GridCell(columns[i].headerText, currentGrid.headerColor ) );

            var rect:Rectangle = getRect ( columnNames, currentGrid.headerHeight );
            if ( checkPageBreak(rect.height) )
                addPage();

            // Commented to avoid the duplicate header issue:
            //setXY (x +currentGrid.x, y+getY() );
            //addRow( columnNames,'', rect);
            //endFill();

            setXY ( x+getX(), y+getY() );
            addRow( columnNames, GridRowType.HEADER, rect );

            if (grid.cells == null)
                grid.generateCells();

            var buffer:Array = grid.cells;
            var lngRows:int = buffer.length;

            for (i = 0; i< lngRows; i++)
            {

                item = buffer[i];
                row = new Array();
                for (j = 0; j< lngColumns; j++)
                {
                    row.push (item[columns[j].dataField] != null ? item[columns[j].dataField] : "");
                    nb = Math.min(nb,nbLines(columns[j].width,row[j]));
                }

                row = buffer[i];


                rect = getRect ( row, currentGrid.rowHeight );
                setX ( x + getX());

                if ( checkPageBreak(rect.height) )
                {
                    addPage();
                    setXY ( x+getX(),nextPageY );
                    //setXY ( x+getX(),y+getY() ); hacked to allow user to set the next Page Y of Grid
                    if ( repeatHeader ) 
                    {
                        addRow (columnNames, GridRowType.HEADER, getRect(columnNames, currentGrid.headerHeight) ); // header
                        setX ( x + getX() );
                    }
                }

                if ( grid.useAlternativeRowColor && Boolean(isEven = i&1) )
                    addRow( row, GridRowType.ALTERNATIVE, rect );
                else addRow( row, GridRowType.NORMAL, rect );
            }
        } 
于 2013-04-25T15:04:31.560 に答える