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
目录
相关文章
|
8月前
|
Web App开发 Windows
【Windows】 chrome 如何下载网站在线预览PDF文件,保存到本地
【Windows】 chrome 如何下载网站在线预览PDF文件,保存到本地
738 0
|
8月前
|
Java API Apache
使用 Apache PDFBox 操作PDF文件
Apache PDFBox库是一个开源的Java工具,专门用于处理PDF文档。它允许用户创建全新的PDF文件,编辑现有的PDF文档,以及从PDF文件中提取内容。此外,Apache PDFBox还提供了一些命令行实用工具。
682 6
|
8月前
|
存储
Vue3 实现 PDF 文件在线预览功能
Vue3 实现 PDF 文件在线预览功能
1567 0
iframe 在线预览pdf、word、excel、ppt、txt、图片、视频
iframe 在线预览pdf、word、excel、ppt、txt、图片、视频
|
6月前
|
移动开发 小程序 前端开发
uniap开发微信小程序如何在线预览pdf文件
这是一段关于在线预览和处理PDF的多方案说明,包括使用JavaScript库PDF.js(如`pdfh5.js`)实现H5页面预览,提供QQ群和技术博客链接以获取帮助和支持。还介绍了两个适用于Uni-app的插件,一个用于H5、小程序和App中的PDF预览和下载,另一个专门解决手机端PDF预览问题。此外,还详细描述了在Uni-app中使用微信小程序API`wx.openDocument`显示PDF的步骤,包括上传文件、配置权限和编写代码。
|
7月前
|
编解码 文字识别
印刷文字识别操作报错合集之在尝试将PDF文件转换为图片时出现了问题,具体的错误代码是415,该怎么处理
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
7月前
|
XML Java 数据处理
视觉智能开放平台操作报错合集之pdf识别报503,是什么导致的
在使用视觉智能开放平台时,可能会遇到各种错误和问题。虽然具体的错误代码和消息会因平台而异,但以下是一些常见错误类型及其可能的原因和解决策略的概述,包括但不限于:1. 认证错误、2. 请求参数错误、3. 资源超限、4. 图像质量问题、5. 服务不可用、6. 模型不支持的场景、7. 网络连接问题,这有助于快速定位和解决问题。
|
7月前
|
移动开发 JavaScript 前端开发
必知的技术知识:JqueryMedia插件使用,解决在线预览及打开PDF文件
必知的技术知识:JqueryMedia插件使用,解决在线预览及打开PDF文件
|
8月前
|
数据采集 数据安全/隐私保护 Python
2024年最新【Python】如何用Python来操作PDF文件,收藏(2),2024年最新阿里p7Python面试题
2024年最新【Python】如何用Python来操作PDF文件,收藏(2),2024年最新阿里p7Python面试题
2024年最新【Python】如何用Python来操作PDF文件,收藏(2),2024年最新阿里p7Python面试题
|
8月前
|
存储 传感器 编解码
CVPR 2023 最全分割类论文整理:图像/全景/语义/实例分割等【附PDF+代码】
CVPR 2023 最全分割类论文整理:图像/全景/语义/实例分割等【附PDF+代码】
1150 1