2010-04-03 261 views
3

我遇到了一些問題,我試圖在我的應用程序中獲取PDF作爲資源。 在這一點上,我有一個可填寫的PDF,我已經能夠作爲一個文件存儲在二進制文件旁邊,但現在我試圖將PDF作爲資源嵌入到二進制文件中。從C#中的資源獲取二進制文件

byte[] buffer; 
try 
{ 
    s = typeof(BattleTracker).Assembly.GetManifestResourceStream("libReports.Resources.DAForm1594.pdf"); 
    buffer = new byte[s.Length]; 
    int read = 0; 
    do 
    { 
     read = s.Read(buffer, read, 32768); 

    } while (read > 0);       
} 
catch (Exception e) 
{ 
    throw new Exception("Error: could not import report:", e); 
} 

// read existing PDF document 
PdfReader r = new PdfReader(
    // optimize memory usage 
    buffer, null 
); 

我每次運行代碼我得到一個錯誤說「重建拖車沒有找到原來的錯誤:未找到PDF startxref」。

當我只是打開文件通過我的目錄中的靜態文件的路徑它工作正常。我曾嘗試使用不同的編碼UTF-8,UTF-32,UTF-7,ASCII等等...... 作爲一個方面說明,我有與獲得一個Powerpoint文件作爲資源相同的問題,我終於能夠通過將Powerpoint轉換爲xml並使用它來解決該問題。 我已經考慮過爲PDF執行相同的操作,但是我通過字段名稱引用了元素,這似乎不適用於XML PDF。

任何人都可以幫我解決這個問題嗎?

回答

2

try塊更改代碼這樣:

using (s = typeof(BattleTracker).Assembly.GetManifestResourceStream 
    ("libReports.Resources.DAForm1594.pdf")) 
{ 
    buffer = new byte[(int)s.Length]; 
    s.Read(buffer, 0, (int)s.Length); 
} 

我假設你有正確的路徑到你的資源,並且其Build Action屬性設置爲Embedded Resource

+0

非常好!這解決了它!謝謝您的幫助! – 2010-04-04 00:39:52

+0

沒有問題。你也可能想檢查一下,看看'PdfReader'是否有一個構造函數需要一個流而不是一個字節數組,在這種情況下你的代碼變得更簡單了。 – MusiGenesis 2010-04-04 01:52:15

+0

絕對要添加'使用'塊作爲我編輯的答案。 – MusiGenesis 2010-04-04 02:06:50