Существует несколько других вариантов в случае, если Adobe ActiveX не то, что Вы ищете (так как Acrobat должен присутствовать на пользовательской машине, и Вы не можете поставить его сами).
Для создания предварительного просмотра PDF, сначала взгляните на некоторые другие обсуждения предмета на StackOverflow:
В последних двух, я говорю о нескольких вещах, которые можно попробовать:
можно получить коммерческий рендерер ( PDFViewForNet, PDFRasterizer.NET , ABCPDF, ActivePDF, XpdfRasterizer и другие в других ответах...).
Большинство довольно дорого, хотя, особенно если все Вы заботитесь о, делает простой предварительный просмотр/миниатюры.
В дополнение к фрагменту кода Omar Shahine, существует статья CodeProject, которая показывает, как использовать Adobe ActiveX, но это может устареть, легко поврежденное новыми выпусками, и его законность темна (в основном, это хорошо для внутреннего пользования, но Вы не можете поставить его, и Вы не можете использовать его на сервере для создания изображений PDF).
Вы могли взглянуть на исходный код для [1 110] SumatraPDF, средство просмотра OpenSource PDF для окон.
существует также Poppler, механизм визуализации, который использует Xpdf в качестве механизма визуализации. Все они являются большими, но они потребуют, чтобы изрядное количество обязательства сделать заставило их работать и взаимодействовать через интерфейс с .NET, и они имеют тенденцию быть быть распределенными под GPL.
можно хотеть рассмотреть использование GhostScript как интерпретатор, потому что рендеринг страниц является довольно простым процессом.
недостаток состоит в том, что Вы должны будете или повторно упаковать его для установки его с приложением или сделаете его предпосылкой (или по крайней мере часть процесса установки).
Это не сложная задача, и это, конечно, легче, чем необходимость массажировать другие механизмы визуализации в сотрудничество с .NET.
я сделал маленький проект, который Вы найдете на форумы Developer Express как вложение.
остерегаться лицензионных требований для GhostScript через.
, Если Вы не можете уехать с тем затем коммерческим программным обеспечением, вероятно, Ваш единственный выбор.
Одна проблема в том, что вы спите 30 секунд. Обычно вы вызываете ReportProgress
в различных точках вашей длительной задачи. Итак, чтобы продемонстрировать это, вы можете изменить свой код на режим сна на 1 секунду, но 30 раз - вызывая ReportProgress
каждый раз, когда он завершает сон.
Другая проблема заключается в том, что вы показываете свой ProgressForm
из фонового потока. Вы должны запустить его в потоке UI , но привязать к нему событие фонового рабочего ProgressChanged
. Затем, когда фоновый рабочий сообщает о ходе выполнения, форма выполнения будет обновлена.
ReportProgress - это метод, который вам придется вызывать в своем «рабочем» методе. Этот метод вызовет событие ProgressChanged.
В вашей форме вы можете присоединить обработчик событий к событию ProgressChanged. Внутри этого обработчика событий вы можете изменить положение индикатора выполнения. Вы также можете присоединить обработчик событий к событию RunWorkerCompleted, и внутри этого обработчика событий вы можете закрыть форму, содержащую индикатор выполнения.
Следует отметить, что вам нужно установить
backgroundWorker1.WorkerReportsProgress = true;
, если вы хотите, чтобы фоновый рабочий процесс инициировал событие ProgressChanged, и
backgroundWorker1.WorkerSupportsCancellation = true;
, если вы хотите иметь возможность отменить рабочий поток.
] Как говорили другие, запустите f.ShowDialog () в потоке пользовательского интерфейса и используйте ProgressChanged для обновления ProgressWindow.
Чтобы заставить ProgressForm самозакрываться, в backgroundWorker1_RunWorkerCompleted вызовите f.Close (); Это означает, что долгая операция завершена, и мы можем закрыть окно.