zoukankan      html  css  js  c++  java
  • win8 应用中使用pdf

    在win8.1中系统提供了 相应的pdf查看api  在win8中就杯具了.  系统未提供和datepicker一样...

    所以去网上 找了下  发现MuPDF.WinRT 可以使用  https://github.com/MishaUliutin/MuPDF.WinRT  一个c++ 的库  

    根据情景 可以分为两类:

    1.打开本地pdf  这样比较简单 直接调用就ok

    private async void OpenPdfFile(string path)

    {

    var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(path);

    //var file = await KnownFolders.DocumentsLibrary.GetFileAsync(path);
    using (var stream = await file.OpenReadAsync())
    {
     IBuffer readBuffer;
     using (IInputStream inputStreamAt = stream.GetInputStreamAt(0))
     using (var dataReader = new DataReader(inputStreamAt))
     {
     uint bufferSize = await dataReader.LoadAsync((uint)stream.Size);
     readBuffer = dataReader.ReadBuffer(bufferSize);
     }

     pdfDocument = Document.Create(readBuffer, DocumentType.PDF, (int)Windows.Graphics.Display.DisplayProperties.LogicalDpi);
    }

    if (pdfDocument.PageCount == 0)
     return;

    //根据业务定义

    }

    2.从网络上获取到pdf 保存到本地后 在读取

    在win8中可以使用 BackgroundDownloader 在后台进行下载  如果使用保存到 功能 文档库 需要在配置Application 中加入节点

    <Extensions>
    <Extension Category="windows.fileTypeAssociation">
    <FileTypeAssociation Name="data">
    <EditFlags AlwaysUnsafe="true" />
    <SupportedFileTypes>
    <FileType>.pdf</FileType> //your file type
    </SupportedFileTypes>
    </FileTypeAssociation>
    </Extension>
    </Extensions>

    StorageFile destinationFile = await KnownFolders.DocumentsLibrary.CreateFileAsync(
    destination, CreationCollisionOption.GenerateUniqueName);

    BackgroundDownloader downloader = new BackgroundDownloader();
    //创建下载
    DownloadOperation download = downloader.CreateDownload(source, destinationFile);

    Progress<DownloadOperation> progressCallback = new Progress<DownloadOperation>(DownloadProgress);

    cts = new CancellationTokenSource();
    download.StartAsync().AsTask(cts.Token, progressCallback);

    在callback中可以处理 文件 可以使用OpenPdfFile  根据保存位置 ,本例中使用为保存到文档库中 使用KnownFolders.DocumentsLibrary.GetFileAsync 打开

    这个基本的存取就完成了 

    但是有问题 如果文件已存在 就不必要去下载了 在使用

    StorageFile destinationFile = await KnownFolders.DocumentsLibrary.GetFileAsync(
    destination);  

    会抛出异常   根据这样 

    try
    {
    StorageFile destinationFile1 = await KnownFolders.DocumentsLibrary.GetFileAsync(
    destination);

    OpenPdfFile(destination);
    return;
    }
    catch (Exception ex)
    {
    System.Diagnostics.Debug.WriteLine(ex.ToString());
    }

    //保存逻辑

    这样可以实现缓存打开

    这样显得有些过于暴力  

    所以试试 正常的

    var folder = await KnownFolders.DocumentsLibrary.GetFolderAsync(Folder);
    var files = await folder.GetFilesAsync(CommonFileQuery.OrderByName);
    var file = files.FirstOrDefault(x => x.Name == FileName);
    if (file != null)
    {

    //保存逻辑
    }

    //读取逻辑

     简单的 堆了些代码  不具有什么 教学意义  对有这个功能需求的 希望有点帮助  希望对学习的也有帮助 如有问题 请留言 

  • 相关阅读:
    H5+CSS3知识点
    三维立体
    HTML5的Audio标签打造WEB音频播放器
    video.js-H5视频播放库
    js事件(Event)知识整理
    高端大气上档次的fullPage.js
    javascript的正则表达式学习
    轮播图—运动框架来实现(拥有透明度效果)
    Android FM模块学习之四源码分析(3)
    Android FM模块学习之四源码学习(2)
  • 原文地址:https://www.cnblogs.com/liumianweifeng/p/3298243.html
Copyright © 2011-2022 走看看