2010-04-03 262 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