gpt4 book ai didi

Silverlight:业务应用程序需要访问文件才能打印和移动

转载 作者:行者123 更新时间:2023-12-03 10:24:11 24 4
gpt4 key购买 nike

我对业务应用程序有以下要求:

(所有这些都可以在本地或服务器上)

  • 允许用户选择文件夹位置
  • 显示文件夹内容
  • 打印文件夹中的选定项目 (*.pdf)
  • 显示已打印的文件
  • 可能将打印的文件移动到新位置(打印的子文件夹)

  • 如何在 Silverlight 中实现这一点?

    亲切的问候,

    下流的

    最佳答案

    首先,除了最后一项之外的所有项目都可以完成(按照您期望的方式)。由于安全协议(protocol),silverlight 无法访问用户的驱动器并对其进行操作。您可以获得的最接近的方法是访问 silverlight 的应用程序存储,在这种情况下这对您没有任何帮助。我将重点介绍如何执行前 4 项。

  • 允许用户选择文件夹位置并显示文件夹内容
    public void OnSelectPDF(object sender)
    {
    //create the open file dialog
    OpenFileDialog ofg = new OpenFileDialog();
    //filter to show only pdf files
    ofg.Filter = "PDF Files|*.pdf";
    ofg.ShowDialog();
    byte[] _import_file = new byte[0];
    //once a file is selected proceed
    if (!object.ReferenceEquals(ofg.File, null))
    {

    try
    {
    fs = ofg.File.OpenRead();
    _import_file = new byte[fs.Length];
    fs.Read(_import_file, 0, (int)fs.Length);
    }
    catch (Exception ex)
    {
    }
    finally
    {
    if (!object.ReferenceEquals(fs, null))
    fs.Close();
    }
    //do stuff with file - such as upload the file to the server
    };
    }

    如果您注意到,在我的示例中,一旦文件被检索到,我建议将其上传到网络服务器或具有临时公共(public)访问权限的地方。我建议通过 Web 服务执行此操作。例如
    //configure the system file (customn class)
    TSystemFile objFile = new TNetworkFile().Initialize();
    //get the file description from the Open File Dialog (ofg)
    objFile.Description = ofg.File.Extension.Contains(".") ? ofg.File.Extension : "." + ofg.File.Extension;
    objFile.FileData = _import_file;
    objFile.FileName = ofg.File.Name;
    //upload the file
    MasterService.ToolingInterface.UploadTemporaryFileAsync(objFile);

  • 上传此文件后,在异步结果中,很可能会返回临时文件名和上传位置,我会在浏览器中转发对某些 javascript 方法的调用,以使用通用的“download.aspx?fileName=givenFileName”技术强制在用户系统上下载,这将同时处理 保存到新位置 打印 .这就是你所寻求的。

    javascript 技术的示例(记得包括 System.Windows.Browser):
    public void OnInvokeDownload(string _destination)
    {
    //call the browser method/jquery method
    //(I use constants to centralize the names of the respective browser methods)
    try
    {
    HtmlWindow window = HtmlPage.Window;
    //where BM_INVOKE_DOWNLOAD is something like "invokeDownload"
    window.Invoke(Constants.TBrowserMethods.BM_INVOKE_DOWNLOAD, new object[] { _destination});
    }
    catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); }
    }

    确保您的 javascript 方法存在于包含的 javaScript 文件或与您的 silverlight 应用程序相同的托管页面中。例如:
    function invokeDownload(_destination) {
    //some fancy jquery or just the traditional document.location change here
    //open a popup window to http://www.myurl.com/downloads/download.aspx? fileName=_destination
    }

    download.aspx 的代码超出了我的回答范围,因为它因需要而异,并且只会延长这篇文章(更多)。但是从我给出的内容来看,它会为你正在寻找的东西“工作”,但可能并不完全符合你的预期。但是,请记住,这主要是由于 Silverlight 的限制。这种方法的作用不是强制您需要插件才能在应用程序中查看 pdf 文件,而是允许用户计算机通过使用现有的 adobe pdf 阅读器来播放它的一部分。在silverlight 中,至少据我所知,大多数打印都是使用您所称的和作为UIElement 的“ImageVisual”完成的。要直接从 silverlight 打印 pdf,您需要在 silverlight 控件中查看该 PDF,或者要求 Web 服务将 PDF 呈现为图像,然后将该图像放在控件中。只有这样你才能直接打印。我将这种方法介绍为更干净和直接的方法。

    注意 - 对于临时目录,我建议在每次添加文件时对服务器端的文件进行一段时间的清理。节省您定期运行某些任务以检查文件夹并删除旧文件的工作。 ;)

    关于Silverlight:业务应用程序需要访问文件才能打印和移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10230668/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com