我打算使用pdf.js來通過帶有Javascript的瀏覽器使用PDF上下文。問題是,我正在使用的一些PDF需要Adobe Reader提供特定的版本。 pdf.js確實還沒有(曾經?)支持欺騙這些。我需要知道的是,如果C#中有辦法打開PDF並刪除這些Reader和Version需求以及如何執行此操作。我打算使用itextsharp來做其他PDF操作服務器端,所以使用這個例子將是最有用的。我計劃通過MVC 4從ajax請求中將這些作爲ActionResult
提供,因此MemoryStream
在此操作結束時最有幫助。將Adobe Reader和版本要求從PDF輸出到瀏覽器之前
回答
您的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
我會接受你的回答,因爲它回答我的問題,但請參閱我的回答,以瞭解我真正想要的內容...... – 2013-03-01 06:37:15
@SerjSagan你確定在您的用例中將XFA內容平鋪爲常規PDF是否可以嗎?如果是這樣,您應該仔細研究* iText Demo的展平功能:PDF中的動態XFA表單,它演示了該功能。這種展平的結果很可能被pdf.js顯示。如果您在答案中提到的程序適用於您,那也沒關係。 – mkl 2013-03-01 09:40:06
所以無法做什麼,我需要它太,但是,我能夠做的是轉換Xfa/Pdf
爲C#
對象,然後發送的頁面通過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());
}
- 1. 如何強制瀏覽器使用特定的Adobe Reader版本
- 2. 在沒有Adobe Reader的情況下將pdf文件顯示到瀏覽器
- 3. 在Adobe Reader中打開PDF,而不是在瀏覽器
- 4. Awesomium在瀏覽器窗口之外顯示Adobe Reader插件
- 5. 約PDF表單,Acrobat Reader軟件,瀏覽器插件和JavaScript
- 6. 瀏覽器之前和UL
- 7. 將pdf從wp_remote_get發送到瀏覽器
- 8. 強制網頁瀏覽器僅在Adobe Acrobat Reader上顯示PDF文件
- 9. 從Adobe Acrobat Reader和DejaVu Reader進程中提取當前頁面?
- 10. 如何使用NodeJS將PDF緩衝區輸出到瀏覽器?
- 11. PDF輸出因瀏覽器而異
- 12. 使用Javascript獲取Adobe Reader版本
- 13. MongoDB輸出到瀏覽器
- 14. WPF web瀏覽器中打開在Adobe Reader窗口
- 15. 檢測操作系統,瀏覽器,Adobe Reader,帶寬等
- 16. Adobe Reader丟失了Response.Stream輸出(PDF)
- 17. 輸出到Web瀏覽器
- 18. 當前瀏覽器版本檢測
- 19. 如何使用Adobe Reader從PDF導出圖像?
- 20. 檢測從瀏覽器安裝Adobe Acrobat Reader的最佳方法是什麼?
- 21. 驗證瀏覽器要求和設置
- 22. 在mpdf輸出PDF文件到瀏覽器
- 23. 將PDF流式傳輸到瀏覽器並利用Adobe PDF參數(如#search,#zoom,#page)
- 24. Actionscript 3瀏覽器要求
- 25. 從Perl CGI腳本輸出XML到瀏覽器?
- 26. 基於瀏覽器版本
- 27. Android中打開PDF使用Adobe Reader
- 28. 轉換PDF文件使用Adobe Reader時
- 29. 打印PDF文件並終止Adobe Reader
- 30. PDF鏈接Adobe Reader 11.0.11不工作
你將不得不打開PDF(在內存中),然後使用保存副本里面不斷用於在C#程序中閱讀pdf的過程。如果您能控制PDF文件(我假設您沒有),您也可以使用Acrobat來執行此操作。 – 2013-02-15 22:14:52
我瞭解這部分內容...我很好奇的是我必須從'In Memory'副本中刪除以刪除版本和讀卡器要求 – 2013-02-15 22:20:26
好吧 - 所以您不想刪除版本號: - )。我會刪除我的答案。 – 2013-02-15 23:06:16