0

Alivepdfライブラリを使用してフレックスでPDFを作成しようとしています。

フォントを設定できません。おそらくサイトの例が間違っていて、コードに変更が加えられたためです。

http://code.google.com/p/alivepdf/wiki/APINotesには、次のような例があります

pdf.setFont( FontFamily.ARIAL , "", 32);

しかし、ドキュメントでは、setfontは最初のパラメータとしてIFontを受け入れます。

さて、どうすればこのIFontを設定できますか?

4

2 に答える 2

1

私はあなたの場合、ユーザーのPCにあるフォントから独立するために、埋め込みフォントを使用します。

*.ttfファイルと生成された*.afmファイルが必要です(ネットワークにはそれを行うためのツールがいくつかあります)。

別の文字セットを含むテキストブロックが必要な場合は、それも役立ちます(キリル文字の使用方法の例を次に示します)

ここに画像の説明を入力してください

<?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 org.alivepdf.colors.RGBColor;
        import org.alivepdf.display.Display;
        import org.alivepdf.fonts.CodePage;
        import org.alivepdf.fonts.EmbeddedFont;
        import org.alivepdf.layout.Layout;
        import org.alivepdf.layout.Orientation;
        import org.alivepdf.layout.Unit;
        import org.alivepdf.pages.Page;
        import org.alivepdf.pdf.PDF;
        import org.alivepdf.saving.Method;

        private var myPDF:PDF;

        [Embed( source="/assets/fonts/times2.ttf", mimeType="application/octet-stream" )]
        public var timesRegularTtf:Class;
        [Embed( source="/assets/fonts/times2.afm", mimeType="application/octet-stream" )]
        public var timesRegularAfm:Class;
        private var timesRegularFont:EmbeddedFont = new EmbeddedFont(new timesRegularTtf() as ByteArray, new timesRegularAfm() as ByteArray, CodePage.CP1251);

        [Embed( source="/assets/fonts/timesbd3.ttf", mimeType="application/octet-stream" )]
        public var timesBoldTtf:Class;
        [Embed( source="/assets/fonts/timesbd3.afm", mimeType="application/octet-stream" )]
        public var timesBoldAfm:Class;
        private var timesBoldFont:EmbeddedFont = new EmbeddedFont(new timesBoldTtf() as ByteArray, new timesBoldAfm() as ByteArray, CodePage.CP1251);

        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 ( 0xff0000 ) );
            myPDF.setFont(timesRegularFont, 12);
            myPDF.setXY(10, 20);
            myPDF.writeText(1, "Hello World!");

            myPDF.textStyle ( new RGBColor ( 0x0000ff ) );
            myPDF.setFont(timesBoldFont, 20);
            myPDF.setXY(10, 40);
            myPDF.writeText(1, "Hello World!");

            myPDF.textStyle ( new RGBColor ( 0x00ff00 ) );
            myPDF.setFont(timesBoldFont, 24);
            myPDF.setXY(10, 60);
            myPDF.writeText(1, fromUtf8ToSomeCode("Привет, Мир!", "windows-1251"));

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

        private function fromUtf8ToSomeCode(data:String, code:String):String
        {
            var b:ByteArray = new ByteArray();

            if (data.length > 0)
                b.writeMultiByte(data, code);

            return b.toString();
        }   
    ]]>
</fx:Script>    

<s:Button label="Save to PDF" click="savePDF(event)"/>
</s:Application>
于 2013-02-12T21:05:56.577 に答える
0

ポーランド語の文字の場合:ファイルorg / alivepdf / pdf / PDF.asを編集し、コード行を見つけます(4776)

buffer.writeMultiByte( content+"\n", "windows-1252" ); // jakiś idiota programista wstawił to na sztywno :/

への変更:

buffer.writeMultiByte( content+"\n", "windows-1250" );
于 2013-08-26T11:07:51.017 に答える