zoukankan      html  css  js  c++  java
  • 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 <!-- saved from url=(0014)about:internet -->
     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     <!--首先引入相关的js文件-->
    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         <!-- For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. -->
    28         var swfVersionStr = "10.0.0";
    29         <!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. -->
    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("<a href='http://www.adobe.com/go/getflashplayer'><img src='"
    80                                 + pageHost + "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>");
    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     /// <summary>
     7     /// 转换所有的页,图片质量80%
     8     /// </summary>
     9     /// <param name="pdfPath">PDF文件地址</param>
    10     /// <param name="swfPath">生成后的SWF文件地址</param>
    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     /// <summary>
    17     /// 转换前N页,图片质量80%
    18     /// </summary>
    19     /// <param name="pdfPath">PDF文件地址</param>
    20     /// <param name="swfPath">生成后的SWF文件地址</param>
    21     /// <param name="page">页数</param>
    22     public static bool PDF2SWF(string pdfPath, string swfPath, int page)
    23     {
    24         return PDF2SWF(pdfPath, swfPath, 1, page, 80);
    25     }
    26 
    27     /// <summary>
    28     /// PDF格式转为SWF
    29     /// </summary>
    30     /// <param name="pdfPath">PDF文件地址</param>
    31     /// <param name="swfPath">生成后的SWF文件地址</param>
    32     /// <param name="beginpage">转换开始页</param>
    33     /// <param name="endpage">转换结束页</param>
    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     /// <summary>
    68     /// 返回页数
    69     /// </summary>
    70     /// <param name="pdfPath">PDF文件地址</param>
    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(@"/Types*/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

  • 相关阅读:
    nginx
    mysql
    intelij maven
    redis命令大全
    绑定touch事件后click无效,vue项目解决棒法
    新的用法
    img
    vuedragable
    自己总结
    vuex的项目在id中不能运行
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/3525437.html
Copyright © 2011-2022 走看看