1. 程式人生 > >實現線上預覽PDF的幾種解決方案

實現線上預覽PDF的幾種解決方案

因客戶需要實現PDF的預覽處理,在網上找了一些PDF線上預覽的解決方案,有的用PDFJS的線上預覽方式,有的使用PDFObject的嵌入式顯示,有的通過轉換JPG/PNG方式實現間接顯示的方式,開始是想通過簡單的方式,能夠使用JS外掛實現預覽最好,可是線上預覽總是有一些不足,如不同瀏覽器的相容問題,甚至不同的手機平臺中展示的效果也不一樣,不過最好還是採用了間接的方式,把PDF轉換為圖片展示效果,達到客戶的要求。

1、線上實現預覽的方式

一開始我還是很傾向使用這種方式,希望能採用一個較為好的JS外掛的方式,實現PDF的線上預覽(通過Web預覽),因此在Github上找到排名比較高的PDF外掛

一看排名還是很高的,那麼採用它應該不錯,檢視自帶的PDF檔案,效果還是槓槓的。

不過客戶的要求是顯示正常的發票PDF檔案,換一下檔案地址,有部分資訊顯示不了,找了一下沒有看到解決方法,所以效果不達標。

連基本的發票也顯示不了,那我這個就不能用它來顯示發票PDF檔案了。

最後,測試了使用PDFObject(https://pdfobject.com/ )的方式實現線上嵌入PDF顯示的方式,這個JS外掛也是不錯的,同樣可以在GitHub上可以找到。

它的使用也是很簡單的,如下程式碼所示。

<script src="/js/pdfobject.js"></script
> <script>PDFObject.embed("/pdf/sample-3pp.pdf", "#example1");</script>

如果需要設定預覽視窗的大小,通過設定樣式即可。

<style>
.pdfobject-container { height: 500px;}
.pdfobject { border: 1px solid #666; }
</style>

顯示的效果是正常的了,不過我在蘋果手機開啟Safari瀏覽器測試發現,不能正常顯示。

因此也不能使用來進行預覽顯示。

在實際的測試中,發現安卓手機的瀏覽器對於預覽PDF也是支援不一,有些直接下載PDF,不支援預覽顯示。

為了避免這些問題,最好找了一個折中的方案,把PDF轉換為圖片進行顯示,圖片在不同的瀏覽器中顯示可是沒有問題的。

2、PDF轉換圖片進行顯示

把PDF轉換為圖片也有很多控制元件處理,例如Aspose.Pdf、Spire.Pdf、 pdfiumviewer 等等,不同的第三方類庫使用的方法有所差異,不過思路都很類似。

本來傾向於使用Aspose.Pdf的,不過發現轉換後的發票資訊還是缺失了某些中文字元或者亂碼,導致不能正常顯示。

後來尋找Spire.Pdf 版本以及對應的綠色版本,終於能夠轉換為正確的格式了,因此也就使用這個第三方控制元件進行轉換圖片使用了。

至於線上預覽,我們在第一次請求PDF預覽檔案的時候,生成對應的圖片檔案,後面直接返回路徑即可。

實現的預覽效果如下所示。

由於我們是在asp.net MVC的專案上進行顯示的,因此需要修改控制器的處理邏輯,對圖片的生成進行判斷處理即可。

控制器後臺的實現程式碼如下所示。

                //判斷是否存在PDF生成的圖片檔案,
                //生成的jpg檔名為附件的ID
                string pdfjpgPath = string.Format("/GenerateFiles/pdf/{0}.jpg", info.ID);
                string pdfjpg = Server.MapPath(pdfjpgPath);

                //PDF檔案路徑,相對目錄即可
                string pdfPath = @"/Content/Template/fapiao.pdf";
                string pdfRealPath = Server.MapPath(pdfPath);

                //如果不存在,則生成,否則返回已生成的檔案
                if(!FileUtil.IsExistFile(pdfjpg))
                {                    
                    //破解
                    ModifyInMemory_Spire.ActivateMemoryPatching();
                    PdfDocument doc = new PdfDocument(pdfRealPath);
                    var image = doc.SaveAsImage(0, Spire.Pdf.Graphics.PdfImageType.Bitmap, 300, 300);
                    FileUtil.BytesToFile(ImageHelper.ImageToBytes(image), pdfjpg);
                }
                //儲存一個路徑
                info.SavePath = pdfjpgPath;//修改使用這個屬性返回使用

最後返回對應的Json資訊即可

                //序列號返回物件資訊
                string result = JsonConvert.SerializeObject(info, Formatting.Indented);
                return Content(result);

我們在頁面檢視中,通過ajax請求處理即可實現圖片的動態顯示了。

        //重新整理列表
    var ID = '';
    function Refresh() {
        var filename = $("#WHC_FileName").val();
        //獲取或生成對應的PDF檔案,根據路徑顯示
        $.getJSON("/PdfView/FindByFileName?r=" + Math.random() + "&name=" + filename, function (info) {
            if (info != '') {
                //獲取圖片路徑,設定顯示
                $("#imgfapiao").attr("src", info.SavePath);
            }
        });
    }

最後實現了圖片的預覽展示。

上面就是我的一個解決思路,如果您有更好的方式解決PDF線上預覽問題,歡迎彼此交流。 

相關推薦

實現線上PDF解決方案

因客戶需要實現PDF的預覽處理,在網上找了一些PDF線上預覽的解決方案,有的用PDFJS的線上預覽方式,有的使用PDFObject的嵌入式顯示,有的通過轉換JPG/PNG方式實現間接顯示的方式,開始是想通過簡單的方式,能夠使用JS外掛實現預覽最好,可是線上預覽總是有一些不足,如不同瀏覽器的相容問題,甚至不同的

.net mvc使用FlexPaper外掛實現線上PDF,EXCEL,WORD的方法

  FlexPaper外掛可以實現在瀏覽器中線上預覽pdf,word,excel等。 在網上看到很多關於這個外掛實現預覽的技術,但是很難做到word和excel線上預覽。 pdf很好實現。   首先下載相關的外掛資訊,這裡不多說了。   其中這個外掛主要需要配合As

ionic3專案實現線上PDF檔案

這裡參考了大牛提供的預覽外掛完成自己需要實現的功能,ng2-pdf-viewer,該外掛不支援ionic3的懶載入,廢話少說,直接擼程式碼。 第一步,安裝 ng2-pdf-viewer npm install ng2-pdf-viewer --save 第二步,在專案中新建頁面

前端實現線上pdf、word、xls、ppt等檔案

1、前端實現pdf檔案線上預覽功能 方式一: 通過a標籤href屬性實現 pdf檔案理論上可以在瀏覽器直接開啟預覽但是需要開啟新頁面。在僅僅是預覽pdf檔案且UI要求不高的情況下可以直接通過a標籤href屬性實現預覽 <a href="文件地址"></

文件轉換、線上方式以及推薦

網際網路時代的繁榮期,線上教育猶如三國中的巴蜀之地,無論是各大巨頭還是中小軟體。都希望在此領域分的一口肥肉。 其中,關於文件轉換。一直是開發線上教育軟體讓人頭痛的事。 在這先說一下文件轉換以及預覽的幾種方式。 一、伺服器先轉換為PDF,再轉換為SWF,最後通過網頁載入Fl

移動端利用pdf.js實現線上pdf文件

專案中要求在移動端實現線上預覽pdf檔案,通過一番折騰,最後選擇用pdf.js實現。1、下載pdf.js    官網地址:https://mozilla.github.io/pdf.js/2、各種配置    下載下來的檔案包,就是一個demo,我們仿照這個demo做就可以啦 

jquery.media.js 外掛實現線上PDF檔案

 程式碼: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content

jsp實現線上pdf、word、xls、ppt等檔案

最近在做一個共享數字化平臺,一些所涉功能知識記錄一下。 、其他教程寫得太老了,可能到如今已經不再適用。 1、jsp實現pdf檔案線上預覽功能 方式一、pdf檔案理論上可以在瀏覽器直接開啟預覽但是需要開啟新頁面。在僅僅是預覽pdf檔案且UI要求不高的情況下可以直

實現在線PDF解決方案

動態 api for ive pdf span www 控制器 動態顯示 原文:實現在線預覽PDF的幾種解決方案因客戶需要實現PDF的預覽處理,在網上找了一些PDF在線預覽的解決方案,有的用PDFJS的在線預覽方式,有的使用PDFObject的嵌入式顯示,有的通過轉換JPG

Jquery.media.js實現網頁線上pdf檔案

近期在工作中遇到了需要在網站預覽pdf檔案的需求,網上的資料很多,我使用了其中一種,即使用 Jquery.media.js包實現。 首先需要準備兩個內容: 1,jquery.js,任意版本 2,jquery.media.js,可以從網上搜,或者去下面我提供的地方下載(是我上傳的),

java 使用openoffice 轉換文件,成.pdf實現線上效果

1. 下載 openoffice 地址     https://pan.baidu.com/s/1dfpoG6zlawoW1pqpDvBL0A 密碼: v4ej     如果上面的地址無法訪問請訪問這個地址:下載地址如下:http://www.openof

Asp.net MVC 利用(aspose+pdfobject.js) 實現線上word、excel、ppt、pdf檔案

線上預覽word、excel、ppt利用aspose動態生成html 主要程式碼 private bool OfficeDocumentToHtml(string sourceDoc, string saveDoc) { bool result = false;

通過Aspose對Word,Excel檔案進行Pdf轉換,實現線上

解決思路:1.利用AsposeCells,AsposeWords相關Jar包提供的轉換功能,將Excel及Word型別文件轉換為Pdf檔案,並存於當前專案目錄下2.通過瀏覽器的iframe標籤功能,直接訪問應用下的相關Pdf檔案,目前主流瀏覽器均支援直接在頁面上瀏覽Pdf檔案

office轉pdf和圖片實現線上

jar包和openoffice的下載 最好都到官網下載或者sourceforge下載,不要在csdn或者其他的地方下載,因為很多都被人重新打包過導致各種問題。 - pdfbox的下載地址 只需要pdfbox-1.8.13.jar,fontbox-

vue外掛開發 使用pdf.js實現手機端線上pdf文件

        目前大多數PC瀏覽器支援線上預覽pdf檔案,但大多數手機瀏覽器還未支援,嘗試用手機瀏覽器開啟一個pdf檔案會彈出是否下載的提示框。網上查了一些資料,在實現的過程中,還是走了比較多的彎路,最後採用了倍受推薦的pdf.js外掛來實現(文末附Demo)。     

Android實現線上office文件(Word,Pdf,excel,PPT.txt等格式)

1.概述 我們都知道,Android原生並沒有提供瀏覽office文件格式的相關Api,在安卓端想要實現線上預覽office文件的功能顯然很是複雜,我們手機安裝QQ瀏覽器時,在手機開啟office文件時會提示如圖, 這就是這篇文章的主角–騰訊X5核心(T

java實現線上--poi實現word、excel、ppt轉html

分享一下我的偶像大神的人工智慧教程!http://blog.csdn.net/jiangjunshow 也歡迎轉載我的文章,轉載請註明出處 https://blog.csdn.net/aabbyyz java實現線上預覽 - -之poi實現word、e

Java實現線上--openOffice實現

Java實現線上預覽–openOffice實現 簡介 之前有寫了poi實現線上預覽的文章,裡面也說到了使用openOffice也可以做到,這裡就詳細介紹一下。 我的實現邏輯有兩種: 一、利用jodconverter(基於OpenOffice服務)將檔案(.doc、.docx、.xls、.pp

centos6.5下安裝openoffice+jodconverter+swftool+flexpaper工具實現線上文件功能

作用:linux下文件伺服器上傳文件轉換成pdf文件,再由swftool工具轉換成swf檔案實現線上預覽 環境:OS   centos6.5           java環境 軟體包:Apac

瀏覽器中線上pdf檔案(不使用外掛)

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>demo</title> <script src="jquer