PPT и PDF в XPS или PNG с C # - PullRequest
       4

PPT и PDF в XPS или PNG с C #

1 голос
/ 07 февраля 2012

Я не могу преобразовать PPT в XPS или PNG в файл PDF.

Два способа решения этой проблемы:

Первый способ: использование COM-компонента Microsoft.Например,

: Microsoft.Office.Interop.PowerPoint, Microsoft.Office.Core, ....

Мой код:

private static void PPT2XPS()
{
    Microsoft.Office.Interop.PowerPoint.Application powerpoint;
    Microsoft.Office.Interop.PowerPoint.Presentation presentation;
    Microsoft.Office.Interop.PowerPoint.Presentations presentations;
    powerpoint = new Microsoft.Office.Interop.PowerPoint.Application();
    presentations = powerpoint.Presentations;
    presentation = presentations.Open(@"d:\test.ppt", MsoTriState.msoFalse, MsoTriState.msoTrue, MsoTriState.msoTrue);
    Microsoft.Office.Interop.PowerPoint.Slides slides = presentation.Slides;
    for (int i = 1; i <= slides.Count; i++)
    {
        Microsoft.Office.Interop.PowerPoint.Slide slide = slides[i];
        String slideName = slide.Name;
        releaseCOM(slide);
        slide.Export(@"d:\test\" + i.ToString() + ".xps", "");
    }
}

private static void releaseCOM(object o)
{
    try
    {
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(o);
    }
    catch { }
    finally
    {
        o = null;
    }
}

Второй способ: отправка файла на принтер

«Microsoft XPS Document Writer» с процессом.

Мой код:

 Process P = new Process();
    ProcessStartInfo psInfo = new ProcessStartInfo();

    psInfo.FileName = @"C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe";
    string option = @"/t";
    string xps = "Microsoft XPS Document Writer";
    string targetFile = Path.GetDirectoryName(filename) + Path.DirectorySeparatorChar +
        Path.GetFileNameWithoutExtension(filename) +  @".xps";

    string Myargs = String.Format("{0} \"{1}\" \"{2}\" {0} \"{3}\"", option, filename, xps, targetFile);
    psInfo.CreateNoWindow = true;
    psInfo.Arguments = Myargs;
    psInfo.UseShellExecute = false;
    psInfo.ErrorDialog = false;

    P.StartInfo = psInfo;
    P.Start();
    P.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

Третий способ:Использование API Windows и отправка двоичного файла.Вот пример для этого способа:

http://support.microsoft.com/kb/322091

Моя проблема:

Первый способ: COM-объект, который имеетбыл отделен от лежащего в его основе RCW, не может использоваться

Второй способ: невозможно скрыть окно и закрыть окно

Третий способ: невозможно создать файл XPS.di.OutPutFile Создать плохой [плохой?] файл.

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Владелец этого ответа: Эммануэль N

Вы можете сделать это так или это для PDF / Word. Вы также можете использовать 2007 надстройка Microsoft Office: Microsoft Сохранить как PDF или XPS , например

1 голос
/ 07 февраля 2012

Ваше первое направление кажется верным, но я не понимаю некоторые из ваших кодов.

1) Почему вы звоните в releaseCOM? Конечно, вы получите исключение COM, которое вы описываете, так как вы освобождаете объект COM в одну строку, а затем пытаетесь получить доступ к его методам. Прервите вызов releaseCOM внутри своего цикла.

2) Вы звоните slide.Export с двумя параметрами, именем файла и пустой строкой. Вторым параметром должно быть имя графического фильтра, а не пустая строка. Попробуйте передать ".xps" в качестве второго параметра.

3) Если вам не нужен каждый слайд в отдельном файле, вы можете позвонить presentation.ExportAsFixedFormat("filename", Microsoft.Office.Interop.PowerPoint.PpFixedFormatType.ppFixedFormatTypeXPS)

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