아래 예제에서는 여러 페이지의 pdf에 하나의 비트 맵 이미지를 추가하려고합니다. 작은 bitmapdata에 대해 잘 작동합니다. 8000 픽셀을 넘으면 유효하지 않은 비트 맵 데이터를 오류로 보냅니다. 다른 방법이 있습니까? 이상 8,191 픽셀을 초과 할 수없는 문서 BitmapData
으로 당AlivePDF Flex를 사용하여 PDF에 이미지를 추가하는 방법은 무엇입니까?
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox 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="100%" height="100%" minHeight="0">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<mx:VBox width="100%" id="img1" >
<mx:HBox width="100%">
<s:Button click="saveToPDF(event)" label="ExportPDF"/>
</mx:HBox>
<mx:HBox width="100%">
<s:Label width="80" text="Emp Name:"/>
<s:TextInput/>
</mx:HBox>
<mx:HBox width="100%">
<s:Label width="80" text="Emp Code:"/>
<s:TextInput/>
</mx:HBox>
<mx:HBox width="100%">
<s:Label width="80" text="Emp Address:"/>
<s:TextInput/>
</mx:HBox>
<mx:HBox width="100%">
<s:Label width="80" text="Phone No:"/>
<s:TextInput/>
</mx:HBox>
<mx:HBox width="100%">
<s:Label width="80" text="Email Id:"/>
<s:TextInput/>
</mx:HBox>
<mx:DataGrid height="1000" width="100%">
<mx:columns>
<mx:DataGridColumn headerText="Column 1" dataField="col1"/>
<mx:DataGridColumn headerText="Column 2" dataField="col2"/>
<mx:DataGridColumn headerText="Column 3" dataField="col3"/>
</mx:columns>
</mx:DataGrid>
<mx:Accordion width="100%" height="500">
<s:NavigatorContent label="Accordion Pane 1" width="100%" height="100%">
</s:NavigatorContent>
<s:NavigatorContent label="Accordion Pane 2" width="100%" height="100%">
</s:NavigatorContent>
<s:NavigatorContent label="Accordion Pane 3" width="100%" height="100%">
</s:NavigatorContent>
<s:NavigatorContent label="Accordion Pane 4" width="100%" height="100%">
</s:NavigatorContent>
<s:NavigatorContent label="Accordion Pane 5" width="100%" height="100%">
</s:NavigatorContent>
</mx:Accordion>
<s:Panel height="1000" title="sample panel" width="100%" />
<mx:DataGrid height="1000" width="100%">
<mx:columns>
<mx:DataGridColumn headerText="Column 1" dataField="col1"/>
<mx:DataGridColumn headerText="Column 2" dataField="col2"/>
<mx:DataGridColumn headerText="Column 3" dataField="col3"/>
<mx:DataGridColumn headerText="Column 4" dataField="col4"/>
<mx:DataGridColumn headerText="Column 5" dataField="col5"/>
<mx:DataGridColumn headerText="Column 6" dataField="col6"/>
<mx:DataGridColumn headerText="Column 7" dataField="col7"/>
<mx:DataGridColumn headerText="Column 8" dataField="col8"/>
</mx:columns>
</mx:DataGrid>
<s:Panel height="1000" title="sample panel 2" width="100%" >
<s:Label text="Sample Panel 2" paddingTop="10" fontSize="18"/>
</s:Panel>
<mx:DataGrid height="1200" width="100%">
<mx:columns>
<mx:DataGridColumn headerText="Emp no" dataField="col1"/>
<mx:DataGridColumn headerText="Emp Name" dataField="col2"/>
<mx:DataGridColumn headerText="Phone" dataField="col3"/>
<mx:DataGridColumn headerText="Salary" dataField="col4"/>
<mx:DataGridColumn headerText="Email" dataField="col5"/>
</mx:columns>
</mx:DataGrid>
<s:Panel height="1000" title="sample panel 3" width="100%" >
<s:Label text="Sample Panel 3" paddingTop="10" fontSize="24" />
</s:Panel>
<mx:DataGrid height="1200" width="100%">
<mx:columns>
<mx:DataGridColumn headerText="Emp Id" dataField="col1"/>
<mx:DataGridColumn headerText="Designation" dataField="col2"/>
<mx:DataGridColumn headerText="Salary" dataField="col4"/>
<mx:DataGridColumn headerText="Email" dataField="col5"/>
</mx:columns>
</mx:DataGrid>
</mx:VBox>
<fx:Script>
<![CDATA[
import org.alivepdf.display.Display;
import org.alivepdf.images.ResizeMode;
import org.alivepdf.layout.Orientation;
import org.alivepdf.layout.Size;
import org.alivepdf.layout.Unit;
import org.alivepdf.pdf.PDF;
import org.alivepdf.saving.Method;
protected function saveToPDF(e:MouseEvent):void
{
var singlepageheight:Number=1500;
var totalheight:Number=0;
totalheight=img1.height;
var totalpages:Number=0;
var myPDFEncoder:PDF = new PDF (Orientation.PORTRAIT, Unit.MM,Size.A4);
myPDFEncoder.setDisplayMode(Display.FULL_PAGE);
myPDFEncoder.addPage();
totalpages=Math.ceil(totalheight/singlepageheight);
for(var i:Number=0;i<totalpages;i++)
{
if(i==0)
{
var bmd:BitmapData = new BitmapData(img1.width, singlepageheight);
bmd.draw(img1, null, null, null, new Rectangle(0, 0, img1.width, singlepageheight));
var bm:Bitmap = new Bitmap(bmd);
myPDFEncoder.addImage(bm,0,24,0,0,'PNG', 100, 1,ResizeMode.FIT_TO_PAGE);
}
else
{
myPDFEncoder.addPage();
var loaderBMD:BitmapData = new BitmapData(img1.width,(i+1)*singlepageheight);
loaderBMD.draw(img1);
var bmd2:BitmapData = new BitmapData(img1.width, singlepageheight, false, 0xFFFFFF);
bmd2.copyPixels(loaderBMD, new Rectangle(0, ((i)*singlepageheight), img1.width,totalheight), new Point(0,0));
var bm1:Bitmap = new Bitmap(bmd2);
myPDFEncoder.addImage(bm1,0,10,0,0,'PNG', 100, 1,ResizeMode.FIT_TO_PAGE);
}
}
var bytes:ByteArray = myPDFEncoder.save(Method.LOCAL);
var fx:FileReference = new FileReference();
fx.save(bytes,"sample.pdf");
}
]]>
</fx:Script>
뷰포트를 여러 이미지로 분할하는 방법에 대해 알고 계십니까? 바이트 배열을 사용하여 나는 또한 행운을 시도했다. –