автоматизация Doc в PDF в c # - PullRequest
4 голосов
/ 17 февраля 2011

У меня есть около 200 документов в формате Word, которые мне нужны в формате pdf.

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

Мне нужно найти способ автоматизировать это преобразование, поскольку мы будем нуждаться в этом снова и снова.

Я использую C #, но решение не обязательно должно быть в C #, но это предпочтительнее.

Я просмотрел несколько библиотек, таких как PDfCreator, надстройка Office 2007, ITextSharp и т. д., и на форумах нет четкого ответа.

PDFCreator имеет образец c #, но он работает только с текстовыми файлами.В надстройке Office 2007 нет возможностей блокировки документов, которые необходимы для автоматизации.

Кто-нибудь реализовывал такой сценарий раньше?Я хотел бы, чтобы вы услышали ваши предложения.

Заранее спасибо

С уважением

Ответы [ 7 ]

3 голосов
/ 17 февраля 2011

Я делаю это для автоматизации преобразования наших документов doc и docx в pdf:

private bool ConvertDocument(string file)
{
    object missing = System.Reflection.Missing.Value;

    OW.Application word = null;
    OW.Document doc = null;

    try
    {
        word = new OW.Application();
        word.Visible = false;
        word.ScreenUpdating = false;

        Object filename = (Object)file;

        doc = word.Documents.Open(ref filename, ref missing,
            ref missing, ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing);
        doc.Activate();

        if (Path.GetExtension(file) == ".docx")
            file = file.Replace(".docx", ".pdf");
        else
            file = file.Replace(".doc", ".pdf");

        object fileFormat = OW.WdSaveFormat.wdFormatPDF;

        doc.ExportAsFixedFormat(file, OW.WdExportFormat.wdExportFormatPDF, false, OW.WdExportOptimizeFor.wdExportOptimizeForPrint,
            OW.WdExportRange.wdExportAllDocument, 1, 1, OW.WdExportItem.wdExportDocumentContent, true, true, OW.WdExportCreateBookmarks.wdExportCreateNoBookmarks,
            true, true, false, ref missing);
    }
    catch(Exception ex)
    {
        return false;
    }
    finally
    {
        if (doc != null)
        {              
            object saveChanges = OW.WdSaveOptions.wdDoNotSaveChanges;
            ((OW._Document)doc).Close(ref saveChanges, ref missing, ref missing);
            doc = null;
        }

        if (word != null)
        {
            ((OW._Application)word).Quit(ref missing, ref missing, ref missing);
            word = null;
        }
    }

    return true;
}

, где OW - это псевдоним Microsoft.Office.Interop.Word.

3 голосов
/ 17 февраля 2011

Вы можете попробовать метод в этом сообщении в блоге:

http://angrez.blogspot.com/2007/06/create-pdf-in-net-using-pdfcreator.html

2 голосов
/ 17 февраля 2011

Вы проверяли эту статью MSDN ?


Edit:

Обратите внимание , что образцы "How To" не будут работать как есть, потому что:

  1. По некоторым причинам он работает над параметрами программы (ConvertDocCS.exe [sourceDoc] [targetDoc] [targetFormat]) в строке # 77, # 81 и # 82.
  2. Я преобразовал проект в VS 2010, и мне пришлось повторно сослаться на Microsoft.Office.Core. Это ссылка на COM под названием Microsoft Office 12.0 Object Library.
  3. В примере не указывается относительный путь.

Я уверен, что вам удастся преодолеть эти препятствия:)


И последнее. Если вы работаете с .NET 4, вам не нужно отправлять все эти надоедливые Missing.Value благодаря чуду дополнительных параметров.

1 голос
/ 10 августа 2011

Вы можете попробовать Aspose.Words для .NET в конвертировать файлы DOC в PDF . Он может использоваться в любом приложении .NET с C # или VB.NET, как и любая другая сборка .NET. Он также работает на любой ОС Windows и в 32/64-битных системах.

Раскрытие информации: я работаю евангелистом-разработчиком в Aspose.

0 голосов
/ 09 апреля 2013

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

 using (WordprocessingDocument wordProcessingDocument = WordprocessingDocument.Open(input, true))
                {
                    // Get all content control elements
                    List<DocumentFormat.OpenXml.OpenXmlElement> elements =
                        wordProcessingDocument.MainDocumentPart.Document.Body.ToList();
                    // Get and set the style properties of each content control
                    foreach (var itm in elements)
                    {
                        try
                        {
                            List<RunProperties> list_runProperties = 
                                  itm.Descendants<RunProperties>().ToList();
                            foreach (var item in list_runProperties)
                            {
                                if (item.RunFonts == null)
                                    item.RunFonts = new RunFonts();

                                item.RunFonts.Ascii = "Courier New";
                                item.RunFonts.ComplexScript = "Courier New";
                                item.RunFonts.HighAnsi = "Courier New";
                                item.RunFonts.Hint = FontTypeHintValues.ComplexScript;
                            }
                        }
                        catch (Exception)
                        {
                            //continue for other tags in document 
                            //throw;
                        }
                    }
                    wordProcessingDocument.MainDocumentPart.Document.Save();
                }
0 голосов
/ 17 февраля 2011

Как сказал HuBeZa, если Word установлен на вашей рабочей станции, вы можете использовать Word Automation, чтобы открывать файлы по одному и сохранять их в формате PDF. Все, что вам нужно, это ссылаться на компонент COM «Библиотека объектов Microsoft Word» и играть с классами этой сборки.

Время выполнения, вероятно, будет немного большим, но ваши преобразования будут автоматизированы.

0 голосов
/ 17 февраля 2011

Думаю, прямого ответа на это нет !!!но это возможно с помощью обходного пути, что я предлагаю, это использовать imagemagik или некоторую библиотеку и посмотреть, может ли он предоставить изображения вашего слова документа, а затем использовать эти изображения в itextsharp для создания pdf

...