Как конвертировать Word файлы в PDF программно?


Я нашел несколько программ с открытым исходным кодом / freeware, которые позволяют конвертировать .doc файлов .pdf-файлы, но все они относятся к разнообразию драйверов приложений/принтеров, без подключения SDK.

Я нашел несколько программ, которые имеют SDK, позволяющий конвертировать .doc файлов .pdf-файлы, но все они проприетарного типа, $ 2,000 за лицензию или около того.

кто-нибудь знает о каком-либо чистом, недорогом (желательно бесплатном) программном решении для моего проблема, используя C# или VB.NET?

спасибо!

15 208

15 ответов:

используйте цикл foreach вместо цикла for-это решило мою проблему.

int j = 0;
foreach (Microsoft.Office.Interop.Word.Page p in pane.Pages)
{
    var bits = p.EnhMetaFileBits;
    var target = path1 +j.ToString()+  "_image.doc";
    try
    {
        using (var ms = new MemoryStream((byte[])(bits)))
        {
            var image = System.Drawing.Image.FromStream(ms);
            var pngTarget = Path.ChangeExtension(target, "png");
            image.Save(pngTarget, System.Drawing.Imaging.ImageFormat.Png);
        }
    }
    catch (System.Exception ex)
    {
        MessageBox.Show(ex.Message);  
    }
    j++;
}

вот модификация программы, которая работала для меня. Он использует Word 2007 с Сохранить как PDF надстройку установлен. Он ищет каталог для .doc файлы, открывает их в Word, а затем сохраняет их в формате PDF. Обратите внимание, что вам нужно будет добавить ссылку на Microsoft.Офис.Взаимодействие.Слово к решению.

using Microsoft.Office.Interop.Word;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

...

// Create a new Microsoft Word application object
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();

// C# doesn't have optional arguments so we'll need a dummy value
object oMissing = System.Reflection.Missing.Value;

// Get list of Word files in specified directory
DirectoryInfo dirInfo = new DirectoryInfo(@"\server\folder");
FileInfo[] wordFiles = dirInfo.GetFiles("*.doc");

word.Visible = false;
word.ScreenUpdating = false;

foreach (FileInfo wordFile in wordFiles)
{
    // Cast as Object for word Open method
    Object filename = (Object)wordFile.FullName;

    // Use the dummy value as a placeholder for optional arguments
    Document doc = word.Documents.Open(ref filename, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing);
    doc.Activate();

    object outputFileName = wordFile.FullName.Replace(".doc", ".pdf");
    object fileFormat = WdSaveFormat.wdFormatPDF;

    // Save document into PDF Format
    doc.SaveAs(ref outputFileName,
        ref fileFormat, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing);

    // Close the Word document, but leave the Word application open.
    // doc has to be cast to type _Document so that it will find the
    // correct Close method.                
    object saveChanges = WdSaveOptions.wdDoNotSaveChanges;
    ((_Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);
    doc = null;
}

// word has to be cast to type _Application so that it will find
// the correct Quit method.
((_Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
word = null;

чтобы подвести итог vb.net пользователи, бесплатная опция (должен быть установлен office):

Microsoft office собирает скачать:

  • pia для office 2010
  • pia для office 2007

  • добавить ссылку на Microsoft.Офис.Взаимодействие.Слово.Применение

  • добавить с помощью или импортировать (vb.net) заявление к Microsoft.Офис.Взаимодействие.Слово.Применение

VB.NET пример:

        Dim word As Application = New Application()
        Dim doc As Document = word.Documents.Open("c:\document.docx")
        doc.Activate()
        doc.SaveAs2("c:\document.pdf", WdSaveFormat.wdFormatPDF)
        doc.Close()

PDFCreator имеет компонент COM, вызываемый из .NET или VBScript (образцы включены в загрузку).

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

просто хотел добавить, что я использовал Microsoft.Библиотеки взаимодействия, в частности функция ExportAsFixedFormat, которую я не видел в этом потоке.

    using Microsoft.Office.Interop.Word;
    using System.Runtime.InteropServices;
    using System.IO;
    using Microsoft.Office.Core;Application app;

    public string CreatePDF(string path, string exportDir)
    {
        Application app = new Application();
        app.DisplayAlerts = WdAlertLevel.wdAlertsNone;
        app.Visible = true;

        var objPresSet = app.Documents;
        var objPres = objPresSet.Open(path, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse);

        var baseFileName = Path.GetFileNameWithoutExtension(path);
        var pdfFileName = baseFileName + ".pdf";
        var pdfPath = Path.Combine(exportDir, pdfFileName);

        try
        {
            objPres.ExportAsFixedFormat(
                pdfPath,
                WdExportFormat.wdExportFormatPDF,
                false,
                WdExportOptimizeFor.wdExportOptimizeForPrint,
                WdExportRange.wdExportAllDocument
            );
        }
        catch
        {
            pdfPath = null;
        }
        finally
        {
            objPres.Close();
        }
        return pdfPath;
    }

Я прошел через слово в PDF боль, когда кто-то бросил меня с 10000 файлов word для преобразования в PDF. Теперь я сделал это в C# и использовал Word interop, но он был медленным и разбился, если я вообще пытался использовать ПК.. очень неприятно.

Это привело меня к открытию, что я мог бы сбросить interops и их медлительность..... для Excel я использую (EPPLUS), а затем я обнаружил, что вы можете получить бесплатный инструмент под названием Spire, который позволяет конвертировать в PDF... с ограничениями!

http://www.e-iceblue.com/Introduce/free-doc-component.html#.VtAg4PmLRhE

Я делаю это как часть процесса выпуска - преобразование Word Doc в PDF.

http://www.suodenjoki.dk/us/productions/articles/word2pdf.htm и http://www.oooforum.org/forum/viewtopic.phtml?t=3772&highlight=pdf + форма

не совсем программно, но может помочь вам.

когда я наткнулся на некоторые проблемы с автоматизацией работы на стороне сервера, мы рассмотрели описанную технику здесь на codeproject. Он использует портативную версию (которая может быть развернута с помощью xcopy) OpenOffice в сочетании с макросом. Хотя мы еще не сделали переключение сами, это выглядит очень многообещающе.

Я был впечатлен Gembox (http://www.gemboxsoftware.com/), которые предоставляют ограниченную бесплатную версию управления документами (включая преобразование pdf). Они также делают библиотеки для электронных таблиц. Лицензия разработчика 1, Если вы превысите их пределы (что, я думаю, вы сделаете), хотя составляет около $ 580 (http://www.gemboxsoftware.com/document/pricelist). хорошо, это не бесплатно (или на мой взгляд относительно недорого), но это намного дешевле, чем $2000. Как я понимаю это из их прайс-листа нет роялти либо для развертывания серверов. Может быть, стоит подойти к ним и посмотреть, если они будут делать сделку, если вы не хотите, чтобы свернуть свой собственный.

кажется, здесь есть какая-то релевантная информация:

преобразование документов MS Word в PDF in ASP.NET

кроме того, с Office 2007, имеющим функцию публикации в PDF, я думаю, вы можете использовать Office automation для открытия *.DOC файл в Word 2007 и сохранить как PDF. Я не слишком увлекаюсь автоматизацией офиса, поскольку она медленная и склонна к зависанию, но просто бросает это там...

Я использовал ABCpdf, который является программным вариантом и не был слишком дорогим, $300/лицензия. Он работает либо с OpenOffice, либо возвращается к Word, если OpenOffice недоступен. Настройка была немного сложнее с разрешениями OpenOffice COM, но это определенно стоило аутсорсинга этой части приложения.

Microsoft PDF add-in для word, кажется, лучшее решение на данный момент, но вы должны принять во внимание, что он не преобразует все документы word правильно в pdf, и в некоторых случаях вы увидите огромную разницу между словом и выходным pdf. К сожалению, я не смог найти api, который бы правильно конвертировал все документы word. Единственное решение, которое я нашел, чтобы убедиться, что преобразование было 100% правильно, было путем преобразования документов через драйвер принтера. Недостатком является то, что документы помещаются в очередь и преобразуются один за другим, но вы можете быть уверены, что полученный pdf-файл точно такой же, как макет документа word. Я лично предпочел использовать UDC(универсальный конвертер документов) и установил Foxit Reader (бесплатная версия) на сервере, а затем распечатал документы, запустив "процесс" и установив его свойство Verb на "печать". Вы также можете использовать FileSystemWatcher для установки сигнала после завершения преобразования.

пока у Вас установлен Word 2010 или более поздняя версия, вы можете использовать DocTo что предоставляет приложение командной строки для этого.

для программистов, которые находятся в ситуации, когда они не могут установить Office на своем сервере или работать в какой-либо облачной среде-недорогая альтернатива другим ответам Api2Pdf который поддерживает преобразование файлов Word в PDF, а также любой другой файл MS Office. Это веб-API и использует LibreOffice под капотом.

Я использовал iTextSharp для создания PDF-файлов перед. Это порт с открытым исходным кодом iText из мира Java и довольно мощный.

Я явно не сделал преобразование Word в PDF, но я программно создал и манипулировал PDF-файлами с ним.

вот еще ссылке к проекту.