Как отобразить офисный и / или PDF-контент в форме Windows? - PullRequest
5 голосов
/ 29 января 2009

У нас есть приложение, в котором администраторы могут добавлять контент для просмотра подчиненным. Их требование заключается в том, что он должен иметь возможность отображать документы Word, Excel, PowerPoint и PDF без возможности редактирования.

Единственный вариант, который я нашел для этого, - загрузить контент в компонент веб-браузера. Недостатком является то, что он предлагает пользователю открыть / сохранить / отменить. Мы обеспокоены тем, что у подчиненных, в основном неграмотных, возникнут проблемы с открытием документов таким образом.

Использование вышеуказанного метода также означает, что Microsoft Office и Adobe Acrobat (или другой просмотрщик PDF с поддержкой IE) необходимо установить на все машины, на которых будет работать приложение, что подразумевает дорогостоящие лицензионные сборы.

Есть ли лучший способ, чтобы этот контент отображался на моих формах в C #?

Ответы [ 5 ]

3 голосов
/ 30 января 2009

Возможно, также интересно:

Сохраните документы в XPS с помощью Microsoft Office 2007 (или распечатайте их на принтере XPS).

Вы можете отобразить доступный только для чтения документ XPS либо с помощью компонента просмотра XPS, либо постранично отображать изображение PNG или JPEG. Этого рендеринга можно добиться довольно просто, используя .NET 3.5 / WPF.

XpsDocument xpsDoc = new XpsDocument(xpsFileName, System.IO.FileAccess.Read);

FixedDocumentSequence docSeq = xpsDoc.GetFixedDocumentSequence();
const double scaleFactor = 0.8;
for (int pageNum = 0; pageNum < docSeq.DocumentPaginator.PageCount; pageNum++)
{
    DocumentPage docPage = docSeq.DocumentPaginator.GetPage(pageNum);

    // FIX: calling GetPage without calling UpdateLayout causes a memory leak
    ((FixedPage)docPage.Visual).UpdateLayout();

    RenderTargetBitmap renderTarget = new RenderTargetBitmap((int)Math.Round(scaleFactor * docPage.Size.Width),
                (int)Math.Round(scaleFactor * docPage.Size.Height), (int)Math.Round(scaleFactor * 96), (int)Math.Round(scaleFactor * 96), PixelFormats.Default);
    renderTarget.Render(docPage.Visual);

    JpegBitmapEncoder encoder = new JpegBitmapEncoder();
    encoder.QualityLevel = 75;
    // Choose type here ie: JpegBitmapEncoder, etc
    //BitmapEncoder encoder = new PngBitmapEncoder();  // Choose type here ie: JpegBitmapEncoder, etc
    encoder.Frames.Add(BitmapFrame.Create(renderTarget));

    string pageImageFileName = string.Format("{0}-{1}.jpg", Path.Combine(Path.GetDirectoryName(xpsFileName), Path.GetFileNameWithoutExtension(xpsFileName)), pageNum);
            using (FileStream pageOutStream = new FileStream(pageImageFileName, FileMode.Create, FileAccess.Write))
    {
        encoder.Save(pageOutStream);
    }
}

Для этого кода требуются ссылки на сборки PresentationCore, PresentationFramework и ReachFramework.

РЕДАКТИРОВАТЬ: Приведенный выше код содержал утечку памяти (см. Открытие XPS-документа в .Net вызывает утечку памяти ). Обходной путь был вставлен в пример.

1 голос
/ 30 января 2009

SpreadsheetGear for .NET имеет совместимый с Excel элемент управления Windows Forms , который будет отображать ваши книги Excel (он будет гораздо больше, чем вы, если хотите) Вы можете посмотреть, что люди говорят и скачать бесплатную пробную версию, если вы хотите попробовать.

SpreasheetGear также может создавать изображения из диаграмм и диапазонов ячеек , если вам нужно сгенерировать изображения для отображения на веб-странице.

0 голосов
/ 23 августа 2010

Отказ от ответственности, я из Atalasoft

Если вы хотите отображать PDF в любом виде .NET GUI (Winforms, ASP.NET, Silverlight, WPF), наше DotImage с PDF Reader поддерживает его , Он не использует Adobe и не требует установки чего-либо на клиентском компьютере или сервере (только наши сборки).

0 голосов
/ 29 января 2009

Все это зависит от Windows.

Если вы хотите отобразить что-то на клиентском компьютере, не полагаясь на локальную установку, тогда вы должны взять на себя полную ответственность за рендеринг:

  1. Поставка неинвазивных библиотек, которые запускаются на клиенте и знают, как их отобразить
  2. Используйте «правильные» инструменты / библиотеки, чтобы отобразить их на сервере в образе в памяти и отправить это изображение клиенту. Медленно, очень дорого в вычислительном отношении на вашем сервере и не обеспечит интерфейс, подобный документу, для ваших клиентов.

Sumatra является полностью бесплатным и открытым исходным кодом. Это не потребует какой-либо формы установки, таким образом, включив его в установку вашего приложения в виде двоичного файла в подпапке, а затем выделив его непосредственно для отображения pdf, будет работать нормально (либо доступная сеть pdf ids, так что это просто, как выполнить 1013 *

SumatraPDF.exe {path-to-file}

Если он недоступен по сети, загрузите его в фоновом режиме во временное местоположение, а затем выполните, как указано выше.

Офисные документы немного сложнее, поскольку все они требуют локальной установки. Вот (устарел) список Обратите внимание, что многие ссылки на скачивание будут указывать вам самую последнюю версию, которая рекомендуется.

Альтернативным подходом для этого является использование OpenOffice.org в его «переносном» воплощении, которое позволит ему работать без установки (так что вы можете поместить его на место точно так же, как и в подходе Суматры), однако это имеет очень много недостатки в вашем случае, потому что это все еще потребует установки Java, полученные поля будут доступны для редактирования (если вы не внесли изменения в версию OpenOffice, которая может быть сложной), и у вас может не получиться ужасно хорошее отображение.

Если у вас есть какая-либо возможность запускать произвольные программы при установке приложения, установка программ просмотра, вероятно, является лучшей, они полностью бесплатны и распространяются.

Если у вас есть доступ к SharePoint, вы можете попробовать совершенно другой подход, который заключается в том, чтобы делать все это через веб-приложение. Плагины sharepoint позволят размещать представления документов прямо в браузере. Обратите внимание, что для этого требуется, чтобы Internet Explorer полностью использовался.

0 голосов
/ 29 января 2009

Вы смотрели на библиотеку объектов Microsoft Word 9.0? Возможно, будет невозможно просто отобразить данные в том виде, в котором они были изначально записаны, однако, вы МОЖЕТЕ сделать что-нибудь здесь, как насчет печати в виде временного pdf-файла в памяти и отображения этого?

Это способ отображения PDF с помощью C #

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