FlexPaper+SWFTool+操作类=在线预览PDF

简介:

引言

由于客户有在线预览PDF格式的需求,在网上找了一下解决方案,觉得FlexPaper用起来还是挺方便的,flexpaper是将pdf转换为swf格式的文件预览的,所以flexpaper一般和swftool配合使用,在程序运行时将pdf文件转换为swf格式的文件。

如果flexpaper不满足你的要求,也可以对其进行二次开发,这里推荐两篇文章,希望对您有所帮助:

http://www.cnblogs.com/xcong/archive/2013/06/20/3142155.html

http://www.cnblogs.com/zamlove/archive/2013/05/07/3065079.html

如何使用flexpaper

测试demo项目结构如图

使用的页面代码:

复制代码
 1 DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 
 3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 4 <head>
 5     <title></title>
 6     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 7     <style type="text/css" media="screen">
 8         html, body {
     
 9             height: 100%;
10         }
11 
12         body {
     
13             margin: 0;
14             padding: 0;
15             overflow: auto;
16         }
17 
18         #flashContent {
     
19             display: none;
20         }
21     </style>
22     
23     <script type="text/javascript" src="js/swfobject/swfobject.js"></script>
24     <script type="text/javascript" src="js/flexpaper_flash.js"></script>
25     
26     <script type="text/javascript">
27         
28         var swfVersionStr = "10.0.0";
29         
30         var xiSwfUrlStr = "playerProductInstall.swf";
31 
32         var flashvars = {
33             SwfFile: escape("Paper.swf"),
34             Scale: 0.6,
35             ZoomTransition: "easeOut",
36             ZoomTime: 0.5,
37             ZoomInterval: 0.1,
38             FitPageOnLoad: false,
39             FitWidthOnLoad: true,
40             PrintEnabled: true,
41             FullScreenAsMaxWindow: false,
42             ProgressiveLoading: true,
43             PrintToolsVisible: true,
44             ViewModeToolsVisible: true,
45             ZoomToolsVisible: true,
46             FullScreenVisible: true,
47             NavToolsVisible: true,
48             CursorToolsVisible: true,
49             SearchToolsVisible: true,
50             localeChain: "en_US"
51         };
52         var params = {
53         }
54         params.quality = "high";
55         params.bgcolor = "#ffffff";
56         params.allowscriptaccess = "sameDomain";
57         params.allowfullscreen = "true";
58         var attributes = {};
59         attributes.id = "FlexPaperViewer";
60         attributes.name = "FlexPaperViewer";
61         swfobject.embedSWF(
62             "FlexPaperViewer.swf", "flashContent",
63             "650", "500",
64             swfVersionStr, xiSwfUrlStr,
65             flashvars, params, attributes);
66         swfobject.createCSS("#flashContent", "display:block;text-align:left;");
67     </script>
68 
69 </head>
70 <body>
71     <div style="position:absolute;left:10px;top:10px;">
72         <div id="flashContent">
73             <p>
74                 To view this page ensure that Adobe Flash Player version
75                 10.0.0 or greater is installed.
76             </p>
77             <script type="text/javascript">
78                 var pageHost = ((document.location.protocol == "https:") ? "https://" : "http://");
79                 document.write("Get Adobe Flash player");
81             </script>
82         </div>
83         <div id="errNoDocument" style="padding-top:10px;">
84             Can't see the document? Running FlexPaper from your local directory? Make sure you have added FlexPaper as trusted. You can do that at <a href="http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04a.html#119065">Adobe's website</a>.
85         </div>
86     </div>
87 </body>
88 </html> 
复制代码

效果图

上面的工具栏:打印,全屏等功能可配置。

swftool工具

 操作类(本类来自常用类库,从网上下载的,一搜一大把)

复制代码
 1 using System.Web;
 2 using System.Text;
 3 
 4 public static class PSD2swfHelper
 5 {
 6     /// 
 7     /// 转换所有的页,图片质量80%
 8     /// 
 9     /// 
PDF文件地址 10 /// 生成后的SWF文件地址 11 public static bool PDF2SWF( string pdfPath, string swfPath) 12 { 13 return PDF2SWF(pdfPath, swfPath, 1, GetPageCount(HttpContext.Current.Server.MapPath(pdfPath)), 80 ); 14 } 15 16 /// 17 /// 转换前N页,图片质量80% 18 /// 19 /// PDF文件地址 20 /// 生成后的SWF文件地址 21 /// 页数 22 public static bool PDF2SWF( string pdfPath, string swfPath, int page) 23 { 24 return PDF2SWF(pdfPath, swfPath, 1, page, 80 ); 25 } 26 27 /// 28 /// PDF格式转为SWF 29 /// 30 /// PDF文件地址 31 /// 生成后的SWF文件地址 32 /// 转换开始页 33 /// 转换结束页 34 private static bool PDF2SWF( string pdfPath, string swfPath, int beginpage, int endpage, int photoQuality) 35 { 36 // swftool,首先先安装,然后将安装目录下的东西拷贝到tools目录下 37 string exe = HttpContext.Current.Server.MapPath( " ~/Bin/tools/pdf2swf.exe " ); 38 pdfPath = HttpContext.Current.Server.MapPath(pdfPath); 39 swfPath = HttpContext.Current.Server.MapPath(swfPath); 40 if (!System.IO.File.Exists(exe) || !System.IO.File.Exists(pdfPath) || System.IO.File.Exists(swfPath)) 41 { 42 return false ; 43 } 44 StringBuilder sb = new StringBuilder(); 45 sb.Append( " \" " + pdfPath + " \" " ); 46 sb.Append( " -o \" " + swfPath + " \" " ); 47 sb.Append( " -s flashversion=9 " ); 48 if (endpage > GetPageCount(pdfPath)) endpage = GetPageCount(pdfPath); 49 sb.Append( " -p " + " \" " + beginpage + "" + " - " + endpage + " \" " ); 50 sb.Append( " -j " + photoQuality); 51 string Command = sb.ToString(); 52 System.Diagnostics.Process p = new System.Diagnostics.Process(); 53 p.StartInfo.FileName = exe; 54 p.StartInfo.Arguments = Command; 55 p.StartInfo.WorkingDirectory = HttpContext.Current.Server.MapPath( " ~/Bin/ " ); 56 p.StartInfo.UseShellExecute = false ; 57 p.StartInfo.RedirectStandardError = true ; 58 p.StartInfo.CreateNoWindow = false ; 59 p.Start(); 60 p.BeginErrorReadLine(); 61 p.WaitForExit(); 62 p.Close(); 63 p.Dispose(); 64 return true ; 65 } 66 67 /// 68 /// 返回页数 69 /// 70 /// PDF文件地址 71 private static int GetPageCount( string pdfPath) 72 { 73 byte[] buffer = System.IO.File.ReadAllBytes(pdfPath); 74 int length = buffer.Length; 75 if (buffer == null ) 76 return - 1 ; 77 if (buffer.Length <= 0 ) 78 return - 1 ; 79 string pdfText = Encoding.Default.GetString(buffer); 80 System.Text.RegularExpressions.Regex rx1 = new System.Text.RegularExpressions.Regex( @" /Type\s*/Page[^s] " ); 81 System.Text.RegularExpressions.MatchCollection matches = rx1.Matches(pdfText); 82 return matches.Count; 83 } 84 }
复制代码

然后安装swftool工具,将安装后的目录中的文件拷贝到tools目录下,如图

 

test.asp.cs代码

复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7 
 8 namespace Wolfy.FlexPaperDemo
 9 {
10     public partial class Test : System.Web.UI.Page
11     {
12         protected void Page_Load(object sender, EventArgs e)
13         {
14             //这里需要虚拟路径
15             PSD2swfHelper.PDF2SWF("PDFFile/王牌2_C#_控件查询手册.pdf", "SWFFile/王牌2_C#_控件查询手册.swf");
16         }
17     }
18 }
复制代码

结果

如何禁用右键中的打印,复制功能

如果pdf保密性强,不让别人复制,打印等该如何?在上面推荐的两篇文章中,他们对其进行了二次开发,禁用了这个功能。非常感谢,那么之后只需将FlexPaperViewer.swf替换就可以了。

原图

替换后的

 

说保密只是相对的,在互联网上,只要能看,别人想盗取还是很容易的事,大不了,一张一张的截图。

总结

demo下载:链接:链接:http://pan.baidu.com/s/1hqEpx5a 密码:gupg

swftools-2013-04-09-1007下载:链接:http://pan.baidu.com/s/1c0CvBDA 密码:v38r

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。

转载:http://www.cnblogs.com/wolf-sun/p/3525437.html
目录
相关文章
|
3月前
|
Java API Apache
使用 Apache PDFBox 操作PDF文件
Apache PDFBox库是一个开源的Java工具,专门用于处理PDF文档。它允许用户创建全新的PDF文件,编辑现有的PDF文档,以及从PDF文件中提取内容。此外,Apache PDFBox还提供了一些命令行实用工具。
107 6
|
3月前
|
存储
Vue3 实现 PDF 文件在线预览功能
Vue3 实现 PDF 文件在线预览功能
315 0
iframe 在线预览pdf、word、excel、ppt、txt、图片、视频
iframe 在线预览pdf、word、excel、ppt、txt、图片、视频
|
4月前
|
JavaScript 前端开发
nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件
nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件
|
3月前
|
Web App开发 JavaScript 前端开发
网页VUE纯前端在线预览编辑Office,支持doc/docx、xls/xlsx、ppt/pptx、pdf等格式
随着互联网技术的不断发展,越来越多的企业开始采用在线办公模式,微软Office Word 是最好用的文档编辑工具,然而doc、docx、xls、xlsx、ppt、pptx等格式的Office文档是无法直接在浏览器中直接打开的,如果可以实现Web在线预览编辑OffIce,肯定会还带来了更高效、便捷的办公体验,为我们的工作带来了更多可能性。
545 0
|
10月前
|
前端开发
前端如何支持PDF、Excel、Word在线预览 #42
前端如何支持PDF、Excel、Word在线预览 #42
515 0
|
9月前
|
前端开发 C#
C# 基于NPOI+Office COM组件 实现20行代码在线预览文档(word,excel,pdf,txt,png)
C# 基于NPOI+Office COM组件 实现20行代码在线预览文档(word,excel,pdf,txt,png)
|
2月前
|
存储 传感器 编解码
CVPR 2023 最全分割类论文整理:图像/全景/语义/实例分割等【附PDF+代码】
CVPR 2023 最全分割类论文整理:图像/全景/语义/实例分割等【附PDF+代码】
117 1
|
7月前
|
人工智能 API 数据安全/隐私保护
Python3,5行代码,Chatxxx能对PDF文件进行旋转、提取、合并等一系列操作,看了这篇,80岁老奶奶走路都不扶墙了。
Python3,5行代码,Chatxxx能对PDF文件进行旋转、提取、合并等一系列操作,看了这篇,80岁老奶奶走路都不扶墙了。
70 0
|
7月前
|
前端开发
前端实现在线预览文档(pdf、doc文件)
前端实现在线预览文档(pdf、doc文件)