Получение бинарного файла из ресурса в C # - PullRequest
3 голосов
/ 04 апреля 2010

У меня небольшая проблема, я пытаюсь получить 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 голосов
/ 04 апреля 2010

Измените код в вашем блоке 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...