`
aimy_2012
  • 浏览: 18887 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

Flex实现在线显示Word文档,FlexPaper

阅读更多
Flex实现浏览器在线显示Word文档(不能实现Word在线编辑).

思想:生成Word->pdf->swf->flexpaper显示.oh ,my god!
用开源Itext.jar生成Word文档;
通过开源jacob.jar实现Word转换成PDF;
通过软件Pdf2Swf转换PDF成Swf文件;
通过开源FlexPaper.swf组件显示Swf文件.
(有点繁琐,但是我没找到解决的办法,貌似有个OpenOffice,但是收费...)


第一步:生成Word文档(用到的Jar包在文件附录)
// 第一步:创建一个document对象。
Document document = new Document(PageSize.A4);
// 第二步:将文件输出流指向一个文件。
RtfWriter2.getInstance(document, new FileOutputStream("C:\\mmmmm.doc"));
// 第三步:打开文档。
document.open();
//字体
Font font =  new Font(Font.NORMAL, 14,Font.BOLD, new Color(0, 0, 0));
// 第四步:在文档中增加一个段落。
Paragraph paragraph = new Paragraph("xxxxxxxxxxxxx", font);
paragraph .setAlignment(Element.ALIGN_CENTER);
document.add(paragraph );
// 第五步:关闭文档。
document.close();

Itext是个好东西,可以在word里面画表格


第二步:Word转换成PDF文件(用到的Jar包在文件附录)

package com.sddl.dao.dky.Utils;

import java.io.File;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;

public class Word2PdfUtil {
	int wdDoNotSaveChanges = 0;// 不保存待定的更改。
	int wdFormatPDF = 17;// PDF 格式

	public String word2PdfUtil(String fileName) {
		System.out.println(fileName);
		String toFilename = fileName + ".pdf";
		System.out.println("启动Word");
		ActiveXComponent app = null;
		try {
			app = new ActiveXComponent("Word.Application");
			app.setProperty("Visible", false);

			Dispatch docs = app.getProperty("Documents").toDispatch();
			System.out.println("打开文档" + fileName);
			Dispatch doc = Dispatch.call(docs,//
					"Open", //
					fileName,// FileName
					false,// ConfirmConversions
					true // ReadOnly
					).toDispatch();
			System.out.println("转换文档到PDF" + toFilename);
			File tofile = new File(toFilename);
			if (tofile.exists()) {
				tofile.delete();
			}
			Dispatch.call(doc,//
					"SaveAs", //
					toFilename, // FileName
					wdFormatPDF);
			Dispatch.call(doc, "Close", false);
		} catch (Exception e) {
			System.out.println("========Error:文档转换失败:" + e.getMessage());
		} finally {
			if (app != null)
				app.invoke("Quit", wdDoNotSaveChanges);
		}
		System.out.println(toFilename);
		return toFilename;
	}
}

如果安装的是Office2010,运行这个方法应该是没有问题的,如果是Office2007,那需要安装Office组件(SaveAsPDFandXPS2007).
注意:用Jacob包,需要在系统盘C:\Windows\System32添加一个jacob-1.17-M2-x64.dll文件(我的系统是64位的,32位系统就添加jacob-1.17-M2-x32.dll,文件见附录)



第三步:Pdf转换成Swf文件(用到的Jar包在文件附录)
package com.sddl.dao;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

public class test {

	public static int convertPDF2SWF(String sourcePath, String destPath,
			String fileName) throws IOException {
		// 目标路径不存在则建立目标路径
		File dest = new File(destPath);
		if (!dest.exists())
			dest.mkdirs();

		// 源文件不存在则返回
		File source = new File(sourcePath);
		if (!source.exists())
			return 0;

		// 调用pdf2swf命令进行转换
		String command = "\"D:\\Program Files (x86)\\SWFTools\\pdf2swf.exe\" -s  open \""
				+ sourcePath + "\" -o  \"" + fileName + "\" -s flashversion=9";

		Process pro = Runtime.getRuntime().exec(command);

		BufferedReader bufferedReader = new BufferedReader(
				new InputStreamReader(pro.getInputStream()));
		System.out.println("MMMMMMMmmmmm");
		while (bufferedReader.readLine() != null)
			;

		try {
			pro.waitFor();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		System.out.println(pro.toString());
		return pro.exitValue();

	}

	public static void main(String[] args) throws IOException {
		String sourcePath = "c:\\test.pdf";
		String destPath = "c:\\";
		String fileName = "c:\\test.swf";
		test.convertPDF2SWF(sourcePath, destPath, fileName);
	}
}

需要安装工具swftools-0.9.2.exe,文件太大,请百度"swftools-0.9.2.exe"下载,转换成功的swf文件,是可以用播放器打开的.我做的时候,碰到一个很头疼的问题,转换的过程没报错,出异常,但是在页面显示(第四步)的时候就是不显示swf文件.
建议:以上步骤用我给的JAR包,DLL文件,还有flexpaper,可以避免版本问题,以及系统(我的是win7_64位系统)兼容问题等.


第四步:页面显示Swf文件(用到的开源.swf在文件附录)


<?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"
			   xmlns:supportClasses="com.esri.ags.skins.supportClasses.*"
			   width="100%" height="100%" xmlns:flexpaper="com.devaldi.controls.flexpaper.*">
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
		<s:RemoteObject id="pgbgDao" destination="pgbgDao"
						fault="pgbgDao_resultHandler(event)">
			<s:method name="checkEstimate" result="checkEstimate_resultHandler(event)"/>
			<s:method name="checkFiles" result="checkFiles_resultHandler(event)"/>
			<s:method name="pgbgAction" result="pgbgAction_resultHandler(event)"/>
		</s:RemoteObject>
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.rpc.events.FaultEvent;
			import mx.rpc.events.ResultEvent;
			import mx.utils.StringUtil;
			[Bindable]
			public var swfName:String = "";//Swf名称
			
			public var deptId:int = 200000656;
			public var deptName:String = "滨州供电公司";
			public var evaluationId:int = 200000111;
			public var evaluationDate:String = "2011/5/23";
			public var guideline_planId:int = 1;
			
			[Bindable]
			public var swfFlag:Boolean = false;
			/**click事件*/
			protected function doActionForDoc_clickHandler(event:MouseEvent):void
			{
//							}
			
			protected function checkEstimate_resultHandler(event:ResultEvent):void
			{
				if(event.result as Boolean==false){
					Alert.show("没有评估得分!","提示!");
				}else{
					/**检查swf文件是否存在*/
					pgbgDao.checkFiles(deptId,evaluationId,guideline_planId);
				}
			}
			protected function checkFiles_resultHandler(event:ResultEvent):void
			{
				if((event.result as Boolean)==false){
					pgbgDao.pgbgAction(deptId,deptName,evaluationId,evaluationDate,guideline_planId);
				}else{
					//swfName = deptId+""+evaluationId+evaluationDate+".swf"				
				}
			}
			/**开始生成评估报告*/
			protected function pgbgAction_resultHandler(event:ResultEvent):void{
				swfName = event.result as String;
				if(StringUtil.trim(swfName).length!=0){
					swfFlag = true;
				}
			}
			protected function pgbgDao_resultHandler(event:FaultEvent):void
			{
				Alert.show("----"+event.message); 
			}
		]]>
	</fx:Script>
	
	<mx:VBox width="100%" height="100%">
		<mx:Spacer width="30"/>
		<mx:Button label="doActionForDoc" id="doActionForDoc"
				   cornerRadius="0" height="25"
				   click="doActionForDoc_clickHandler(event)"/>
		<mx:HBox width="100%" height="100%" visible="{swfFlag}" includeInLayout="{swfFlag}">
			<flexpaper:FlexPaperViewer Scale="1.5" id="flexPaper"
									   width="100%" height="100%" SwfFile="{swfName}">
			</flexpaper:FlexPaperViewer>
		</mx:HBox>
	</mx:VBox>
</s:Application>


word->pdf->swf,最后的Swf文件,存放的位置是Tomcat 7.0\webapps\项目名称\;否则就会不显示swf文件(反正我是碰到了这个问题).注:以上代码,我已经实现效果,可以删除一些多余的代码,直接修改测试.
分享到:
评论

相关推荐

    Flex在线预览文档组件FlexPaper_swc

    FlexPaper是一款功能强大的...总之,FlexPaper_swc是Flex开发者实现文档在线预览的理想选择,无论你是新手还是经验丰富的开发者,都能借助其强大的功能和易用性,轻松地将高质量的文档预览功能整合到你的Flex应用中。

    各种文档在线显示Flex组件 FlexPaper

    FlexPaper作为Flex库的一部分,能够轻松集成到Flex应用程序中,同时也支持其他格式的文档(如Word、PPT等)通过转换为PDF后进行在线浏览。 要使用FlexPaper,首先需要将PDF文档转换为SWF格式。这一过程可以通过开源...

    flexpaper在线文档显示

    标题“FlexPaper 在线文档显示”指的是使用 FlexPaper 库或服务来实现网页上的文档预览功能。这项技术对于那些希望在网站上展示文档而无需用户下载原始文件的开发者来说尤其有用。它可以提升用户体验,因为用户可以...

    FlexPaper_2.2.4php在线浏览WORD文档

    标题“FlexPaper_2.2.4php在线浏览WORD文档”表明我们要讨论的是FlexPaper的2.2.4版本,它专门针对PHP环境,提供了在线预览Microsoft Word文档的能力。 在描述中提到的"FlexPaper_2.2.4php在线浏览WORD文档",意味...

    flex项目 FlexPaper 2.1.2

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

    flexpaper Flex中显示PDF功能

    FlexPaper 是一个强大的开源工具,专门用于在Adobe Flex应用...总的来说,FlexPaper为开发人员提供了一种简便的方式在Flex应用中展示PDF文档,通过集成`PDFViewer.ascx`和相关配置,可以在ASP.NET环境中实现这一功能。

    基于PHP的FlexPaper Flex在线显示PDF文档的php源码.zip

    "基于PHP的FlexPaper Flex在线显示PDF文档的php源码.zip" 这个标题揭示了我们讨论的核心技术:使用PHP语言与FlexPaper Flex组件来实现在线查看PDF文档的功能。FlexPaper是一款开源的PDF和文档查看器,它允许用户在...

    PHP实例开发源码—FlexPaper Flex在线显示PDF文档的php源码.zip

    【PHP实例开发源码—FlexPaper Flex在线显示PDF文档的php源码.zip】是一个用于在Web环境中通过PHP技术实现PDF文档在线预览的项目。FlexPaper是一款强大的、开源的PDF和文档查看器,它允许用户在浏览器中查看、搜索、...

    asp .net 实现word文档在线预览

    综上所述,通过ASP.NET结合Office-Tools、WF和FlexPaper,可以实现Word文档的在线预览功能。这一过程涉及文件上传、转换、预览等多个步骤,需要综合运用服务器端和客户端的技术,同时注重性能和用户体验。

    flex4.0实现翻书效果,并动态 使用FlexPaper显示PDF文档

    在本文中,我们将深入探讨如何使用Flex 4.0实现翻书效果,并动态地通过FlexPaper展示PDF文档。Flex是一个强大的开发框架,主要用于构建富互联网应用程序(RIA),它基于ActionScript 3.0和Flash Player或Adobe AIR。...

    Flex之FlexPaper的使用

    FlexPaper是一款强大的在线文档查看和转换工具,尤其适用于展示PDF文档。它基于Adobe Flex技术,允许开发者将PDF或图像文件转换为SWF格式,以便在Web浏览器中流畅地浏览。在本文中,我们将深入探讨FlexPaper的使用,...

    Java+FlexPaper+swfTools_仿百度文库文档在线预览系统设计与实现

    3. **在线播放插件集成**:采用FlexPaper插件实现文档的在线播放。 - **FlexPaper**:一个高度灵活的文档显示解决方案,支持多种浏览器平台。 - 下载并解压FlexPaper,准备相关JavaScript文件和FlexPaperViewer....

    FlexPaper的flex的swc文件

    总之,FlexPaper的flex的swc文件为在Flex工程中实现高质量的文档在线预览提供了便利。通过正确地导入和使用这两个SWC文件,开发者可以轻松地在Web应用中嵌入文档预览功能,提升用户体验。同时,要注意不断更新和优化...

    flex4在线文档

    为了实现文档的在线预览,Flex4可能会利用StageVideo或StageWebView组件来呈现文档内容,或者使用像FlexPaper这样的第三方库。这些组件能够处理复杂的文档格式,并提供流畅的用户体验。 总的来说,"flex4在线文档...

    FlexPaper实现文档在线浏览源码改造版

    总之,FlexPaper 实现文档在线浏览的源码改造版是一个定制化的过程,包括下载源码、创建库和应用程序、编写界面代码以及配置各种参数来满足特定的浏览体验。这个改造版使得开发者可以灵活地调整 FlexPaper 的行为,...

    Java-FlexPaper-swfTools-仿百度文库文档在线预览系统设计与实现.docx

    本文主要介绍了使用Java、FlexPaper和swfTools实现文档在线预览系统的设计和实现。该系统可以将上传的文档(包括ppt、word、excel、txt)转换为swf文件,然后使用FlexPaper插件实现在线预览。 文档转换为swf文件 ...

    ASP.Net使用Flexpaper实现word、ppt、excel、pdf、图片在线预览

    Flexpaper是一个强大的开源解决方案,它允许开发者在网页上实现高质量的PDF、Word、PowerPoint、Excel和图片的在线预览。 首先,我们要理解Flexpaper的基本工作原理。Flexpaper是一个JavaScript库,它可以将上传的...

Global site tag (gtag.js) - Google Analytics