2013-02-15 25 views
0

我打算使用pdf.js來通過帶有Javascript的瀏覽器使用PDF上下文。問題是,我正在使用的一些PDF需要Adobe Reader提供特定的版本。 pdf.js確實還沒有(曾經?)支持欺騙這些。我需要知道的是,如果C#中有辦法打開PDF並刪除這些Reader和Version需求以及如何執行此操作。我打算使用itextsharp來做其他PDF操作服務器端,所以使用這個例子將是最有用的。我計劃通過MVC 4從ajax請求中將這些作爲ActionResult提供,因此MemoryStream在此操作結束時最有幫助。將Adobe Reader和版本要求從PDF輸出到瀏覽器之前

+0

你將不得不打開PDF(在內存中),然後使用保存副本里面不斷用於在C#程序中閱讀pdf的過程。如果您能控制PDF文件(我假設您沒有),您也可以使用Acrobat來執行此操作。 – 2013-02-15 22:14:52

+0

我瞭解這部分內容...我很好奇的是我必須從'In Memory'副本中刪除以刪除版本和讀卡器要求 – 2013-02-15 22:20:26

+0

好吧 - 所以您不想刪除版本號: - )。我會刪除我的答案。 – 2013-02-15 23:06:16

回答

1

您的PDF文件n-400.pdf使用Adobe XML Forms Architecture (XFA)。這意味着您需要一個也支持XFA的查看器,而pdf.js似乎不支持。

這樣的PDF通常包含一些標準的PDF內容,這表明PDF需要一些支持XFA的查看器。在您的情況下,內容包含

如果此郵件最終沒有被正確的文檔內容替換,您的PDF查看器可能無法顯示此類文檔。

這實際上表示XFA使能的瀏覽器所做的事情,它根據XFA XML數據中的信息呈現一些頁面,並顯示它而不是PDF樣式頁面描述。

雖然被Adobe專門定義,但PDF specification ISO 32000-1描述瞭如何將XFA數據嵌入到PDF文檔中,參見參考資料。第12.7.8節XFA表單。

如果您只需要這些表單處於扁平狀態,則可能需要查看iText Demo: Dynamic XFA forms in PDF

到底 pdf.js
+0

我會接受你的回答,因爲它回答我的問題,但請參閱我的回答,以瞭解我真正想要的內容...... – 2013-03-01 06:37:15

+0

@SerjSagan你確定在您的用例中將XFA內容平鋪爲常規PDF是否可以嗎?如果是這樣,您應該仔細研究* iText Demo的展平功能:PDF中的動態XFA表單,它演示了該功能。這種展平的結果很可能被pdf.js顯示。如果您在答案中提到的程序適用於您,那也沒關係。 – mkl 2013-03-01 09:40:06

2

所以無法做什麼,我需要它太,但是,我能夠做的是轉換Xfa/PdfC#對象,然後發送的頁面通過JSON爲需要我的javascript在渲染HTML5 Canvas。下面的代碼需要一個XFA-IN-A-PDF文件,並與itextsharp的幫助下把它變成一個C#對象:

PdfReader.unethicalreading = true; 
    PdfReader reader = new PdfReader(new FileStream(Statics.PdfUploadLocation + PdfFileName, FileMode.Open, FileAccess.Read)); 

    XfaForm xfaForm = new XfaForm(reader); 
    XDocument xDoc = XDocument.Parse(xfaForm.DomDocument.InnerXml); 

    string xfaNamespace = @"{http://www.xfa.org/schema/xfa-template/2.6/}"; 


    List<XElement> formPages = xDoc.Descendants(xfaNamespace + "subform").Descendants(xfaNamespace + "subform").ToList(); 
    TotalPages = formPages.Count(); 


    var fieldIndex = 0; 
    RawPdfFields = new List<XfaField>(); 

    for (int page = 0; page < formPages.Count(); page++) 
    { 
     RawPdfFields.AddRange(formPages[page].Descendants(xfaNamespace + "field") 
        .Select(x => new XfaField 
        { 
         Page = page, 
         Index = fieldIndex++, 
         Name = (string)x.Attribute("name"), 
         Height = GetUnitFromPossibleString((string)x.Attribute("h")), 
         Width = GetUnitFromPossibleString((string)x.Attribute("w")), 
         XPosition = GetUnitFromPossibleString((string)x.Attribute("x")), 
         YPosition = GetUnitFromPossibleString((string)x.Attribute("y")), 
         Reference = GetReference(x.Descendants(xfaNamespace + "traverse")), 
         AssistSpeak = GetAssistSpeak(x.Descendants(xfaNamespace + "speak")) 
        }).ToList()); 
    } 
相關問題