`
wptc
  • 浏览: 22573 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Flex(Web程序) 打印 PDF

    博客分类:
  • Web
阅读更多

Flex(Web程序) 打印 PDF

Flex 2008-05-08 16:26:20 阅读386 评论0   字号: 订阅

 05-21改动:添加下载功能。

        前些日子项目有这个需求,需要Web客户端能够打印PDF。研究了一下,AIR程序打印PDF还好办,在本地写入文件不会有安全问题,Web打印的话就要费点劲了,用到的包AlivePDF(开源)。

        这是我的思路:先在本地将要打印的部分转换为PDF格式的字节数组,然后发送给服务器端的WebService(我的是用C#写的,将mxml代码中的webservice地址改成你的),然后写入到服务器上(记得给文件夹开写入权限!同时给IIS帐号permission指定写入权限,不报IO流错误的话就不会理会这些了),然后再下载给用户,花了几天时间,终于实现了。

首先在项目中添加AlivePDF包,直接将.swc文件拷贝到libs文件夹中,AlivePDF包请百度或Google之。

以下是代码:

 PrintTest.mxml:

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" preinitialize="init()">

    <mx:Script>

       <![CDATA[

           import mx.rpc.events.FaultEvent;

           import mx.rpc.events.ResultEvent;

           import mx.controls.Alert;

          

           import org.alivepdf.layout.Layout;

           import org.alivepdf.display.Display;

           import org.alivepdf.layout.Unit;

           import org.alivepdf.layout.Orientation;

           import org.alivepdf.pdf.PDF;

           import org.alivepdf.saving.Method;

           import org.alivepdf.layout.Size;

          

           [Bindable] private var arr:Array=new Array(); //For DataGrid Data

           [Bindable] private var bytes:ByteArray;

          

           private function init():void

           {

              arr.push({first:"a",second:"1",third:""});

              arr.push({first:"b",second:"2",third:""});

              arr.push({first:"c",second:"3",third:""});

              arr.push({first:"d",second:"4",third:""});

           }

          

           /**

            * Print PDF

            * Flex3+AlivePDF+C#

            * Examples by Kelvin

            * MSN:zhaobo@busycode.com(内部用)

            * MSN:xiaobolove@hotmail.com

            *

            * 说明:

            * //前两行代码不做说明。

            * 初始时要新增一页,调用方法:addPage();当每想要添加一页时调用此方法即可。

            * 添加内容,调用方法addImage();此方法N多参数,不一一说明,只需要将要打印的对象传进去即可,例如addImage(img);

            * 或者照此传入5个参数(img ,1,null,null,true),要打印的部分将分做为一整页内容输出,

            * 注意:如果在此之前没有addPage();那么img将会覆盖掉前面添加的内容。

            * */

          

           private var myPDF:PDF;

          

           public function generate ( pEvt:MouseEvent ):void

           {

              enabled=false;

              myPDF = new PDF( Orientation.PORTRAIT, Unit.MM, Size.A4 );//

              myPDF.setDisplayMode( Display.FULL_PAGE, Layout.SINGLE_PAGE ); //

             

              myPDF.addPage();

              myPDF.addImage (dg ,1,null,null,true);

             

               bytes= myPDF.savePDF(Method.LOCAL);

              

               //Call Webservice and Send Data

               ws.Kelvin_PrintPDF(bytes);

           }

          

           [Bindable] private var down:FileReference;

           private function result(event:ResultEvent):void

           {

              //Alert.show(event.result.toString());

              enabled=true;

              down=new FileReference();

              down.addEventListener(Event.COMPLETE,downloadHandler);

              down.download(new URLRequest("http://www.xxxx.com/printpdf/"+event.result.toString()));

           }

           private function downloadHandler(event:Event):void

           {

              Alert.show("success");

           }

          

           private function fault(event:FaultEvent):void

           {

              Alert.show(event.toString());

              enabled=true;

           }

       ]]>

    </mx:Script>

    <!--http://localhost/printpdf/service.asmx?WSDL-->

   

    <mx:WebService id="ws" result="result(event)" fault="fault(event)"

       wsdl=http://www.xxxx.com/printpdf/service.asmx?WSDL useProxy="false" showBusyCursor="true"/>

   

    <mx:Image id="img" source="test.jpg"/>

   

    <mx:DataGrid id="dg" x="106" y="136" width="566" height="383" dataProvider="{arr}">

       <mx:columns>

           <mx:DataGridColumn headerText="first" dataField="first"/>

           <mx:DataGridColumn headerText="second" dataField="second"/>

           <mx:DataGridColumn headerText="third" dataField="third"/>

       </mx:columns>

    </mx:DataGrid>

   

    <mx:Button x="602" y="53" label="Print" click="generate(event)"/>

    <mx:ProgressBar x="106" y="546" source="{down}"/>

   

</mx:Application>

 

 

 

(WebService)Service.cs:

using System;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

 

using System.IO;

using System.Text;

using System.Collections;

 

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class Service : System.Web.Services.WebService

{

    public Service()

    {

 

        //Uncomment the following line if using designed components

        //InitializeComponent();

    }

 

    [WebMethod]

    public string HelloWorld()

    {

        return "Hello World";

    }

 

    /*

     * By kelvin

     * 打印PDF

     * MSN:xiaobolove@hotmail.com

     * 此方法只是将接收过来的字节数据通过流写入本地

     * */

    [WebMethod]

    public string Kelvin_PrintPDF(byte[] buffer)

    {

        string strInfo = "Success";

 

        string path="";

        string pathname="PDF/";

        string date=""+DateTime.Now.Year + DateTime.Now.Month+DateTime.Now.Day + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second  + DateTime.Now.Millisecond;

 

        path = pathname + date + ".pdf";

       

        FileStream filestream=new FileStream(Server.MapPath(path), FileMode.Create);

        BinaryWriter writer=new BinaryWriter(filestream);

       

        try

        {

            if (buffer != null)

                writer.Write(buffer);

            else

                return "Error";

        }

        catch

        {

            strInfo = "Error";

        }

        finally

        {

            writer.Close();

            filestream.Close();

l

分享到:
评论

相关推荐

    flex4.5打印导出pdf完美版

    而"flex4.5打印导出pdf完美版"这个项目则是针对Flex 4.5平台的一个特定功能实现,即在应用程序中添加PDF打印和导出功能。 PDF(Portable Document Format)是一种广泛使用的文档格式,能够保留原始文档的格式和内容...

    jasperreports+alivepdf+Flex解决打印和导出PDF问题

    5. **打印功能**:利用Flex的printJob类,可以实现在客户端直接打印PDF,用户无需先下载文件。需要注意的是,打印前需要设置好打印机和打印参数。 6. **优化性能**:对于大数据量的报表,可能需要考虑分页、异步...

    flexpaper Flex中显示PDF功能

    FlexPaper 是一个强大的开源工具,专门用于在Adobe Flex应用程序中展示文档,特别是PDF格式的文件。这个组件以其轻量级和高效性著称,能够提供流畅的PDF阅读体验。FlexPaper通常与PDF2SWF工具结合使用,该工具将PDF...

    flex操作pdf的demo pdf操作

    5. **保存和打印**:对于有编辑功能的PDF,需要提供保存修改后的PDF和打印PDF的功能。这通常涉及调用库提供的保存和打印方法。 在实际的“flex操作pdf的demo”中,你可能会看到这些功能的实现,包括如何初始化PDF库...

    Flex开发实例.pdf

    Flex是一种开源框架,用于构建高质量的Web应用程序,并且能够跨浏览器、桌面和操作系统进行部署。Flex的核心优势在于其强大的图形渲染能力,使得开发者可以创建出丰富的用户体验。Flex主要使用两种语言:MXML(Flex...

    打印预览(flex)

    Flex是Adobe公司开发的一种基于ActionScript 3.0的富互联网应用程序(RIA)框架,它使用MXML和AS3进行编程,能够创建交互式的、动态的Web应用。 在Flex中实现打印预览,主要涉及以下几个知识点: 1. **Flex组件库*...

    Flex PDF文档

    Flex PDF文档是一种基于Adobe Flex技术的PDF处理方法,它允许开发者在Web应用程序中创建、编辑和展示PDF文件。Adobe Flex是ActionScript 3.0的一个框架,主要用于构建富互联网应用程序(RIAs)。在这个压缩包中,...

    ArcGis For Flex 打印

    总的来说,ArcGIS for Flex的打印功能是一个强大的工具,它使得Web GIS应用程序能够提供专业级别的地图输出。通过熟练掌握相关API和最佳实践,你可以在你的Flex应用中为用户提供流畅、高效的打印体验。

    flex打印操作(FlexPrintJob)还有分页打印操作具体实现

    Flex是Adobe公司推出的一个开源的应用程序框架,主要用于开发富互联网应用(RIA), 它允许开发人员使用Adobe Flash平台创建应用程序,也可以部署为Web应用或独立应用程序。Flex中的打印操作和分页打印操作是实现数据...

    Adobe Air Flex中文帮助

    3. "Flex中文帮助No4章A.pdf" 和 "Flex中文帮助No4章B.pdf" - 这两个文件可能是同一章的两部分,可能涵盖了高级主题,如自定义组件、动画效果、AIR应用程序的特定功能,如本地文件系统和网络通信,以及如何将Flex...

    Flex IFrame实现浏览附件信息

    Flex IFrame是一个在Adobe Flex应用程序中用于嵌入HTML内容或者加载其他Web页面的组件。它允许开发者在Flex应用中展示外部网页或者与Web服务进行交互,从而提供更丰富的用户体验。在给定的“Flex IFrame实现浏览附件...

    Flex在线预览文档组件FlexPaper_swc

    FlexPaper是一款功能强大的在线文档预览组件,专为Flex开发者设计,用于在Web应用程序中实现PDF和Word文档的无缝预览。本组件分为两个版本,即SDK3.5和SDK4.0,以适应不同Flex开发环境的需求。 1. Flex平台介绍 ...

    flex加载flashpaper示例

    总之,通过使用Flex和SWFLoader组件,我们可以轻松地在Web应用程序中集成FlashPaper生成的交互式文档,为用户提供更加丰富的视觉体验和便捷的操作方式。这个示例源码对于学习和实践Flex与FlashPaper的结合是一个宝贵...

    Flex精通_66013.rar

    Flex是Adobe公司开发的一种用于构建富互联网应用(RIA)的技术,它基于ActionScript编程语言和Flex框架,提供了强大的用户界面组件库,使得开发者能够创建出交互性极强、视觉效果丰富的Web应用程序。本资料包“Flex...

    flex项目 FlexPaper 2.1.2

    FlexPaper 2.1.2 是一款基于Adobe Flex技术的数字出版解决方案,它允许开发者将PDF或SWF文档转换为互动式的在线阅读体验。这款工具提供了丰富的功能,如自定义Logo、书签、打印、搜索、缩略图以及通过JavaScript进行...

    flex4在线文档

    Flex4是一种基于ActionScript 3.0的开放源代码框架,用于构建富互联网应用程序(RIA)。它被广泛用于创建交互式、动态的Web内容,尤其是那些需要高度图形化和用户界面复杂性的应用。在本案例中,"flex4在线文档"项目...

    aspnet免Flex报表设计器

    6. **导出和打印功能**:可将设计好的报表导出为PDF、Excel、CSV等多种格式,方便分享和存档,同时支持直接打印,满足不同场合的应用需求。 7. **版本控制与协作**:通过版本管理,开发者可以追踪报表的修改历史,...

    Flex+blazeds实现与mySQL数据库的连接[收集].pdf

    Flex是一款强大的富互联网应用程序(RIA)开发工具,而BlazeDS是Adobe提供的一个服务器端Java库,用于支持Flex应用与后端系统的通信。 首先,BlazeDS的核心功能在于提供远程对象(RemoteObject)服务,它允许Flex...

    TM_C_081113_ArcGIS-API-for-Flex-教程_v1.00.pdf

    ArcGIS API for Flex 是 ESRI 在 2008 年推出的一款用于开发富互联网应用程序(RIA)的 WebGIS 客户端开发包。它提供了对 ArcGIS Server 9.3 的全新开发方式,其主要优势在于能够提供快速的运行速度以及优秀的用户...

Global site tag (gtag.js) - Google Analytics