在C#中从资源获取二进制文件

3

我遇到了一个小问题,我正试图在我的应用程序中将PDF作为资源获取。目前,我有一个可以填写的PDF文件,已经存储为二进制文件旁边的文件,但现在我正在尝试将PDF嵌入二进制文件作为资源。

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 中不起作用。
有人能帮我解决这个问题吗?
1个回答

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


没问题。您还可以检查一下 PdfReader 是否有一个接受流而不是字节数组的构造函数,这样您的代码就更简单了。 - MusiGenesis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接