4

我有大约 200 个 word 文档需要 pdf。

显然,我不能一个接一个地 pdf,因为首先它需要很长时间,其次我确信这样做不是一个好习惯。

我需要找到一种方法来自动化这种转换,因为我们需要一次又一次地这样做。

我使用C#,但解决方案不一定非要在c#中,但它是首选。

我查看了一些库,例如 PDfCreator、Office 2007 插件、ITextSharp 等,论坛上没有任何明确的答案。

PDFCreator 有 c# 示例,但它只适用于 txt 文件。Office 2007 插件没有自动化必须的文档锁定功能。

以前有没有人实施过这样的场景?我想听听你的建议。

提前致谢

问候

4

7 回答 7

3

你可以试试这篇博文中的方法:

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

于 2011-02-17T14:53:29.590 回答
3

我这样做是为了自动将我们的 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 的别名。

于 2011-02-17T15:43:04.860 回答
2

你检查过这篇MSDN 文章吗?


编辑:

请注意,此“操作方法”示例不会按原样工作,因为:

  1. 由于某些原因,它会ConvertDocCS.exe [sourceDoc] [targetDoc] [targetFormat]在 #77、#81 和 #82 行中的程序参数 ( ) 上运行。
  2. 我将项目转换为 VS 2010 并且不得不重新引用Microsoft.Office.Core. 这是一个名为Microsoft Office 12.0 Object Library.
  3. 除了相对路径之外,示例没有。

我相信你会设法克服这些障碍:)


最后一件事。Missing.Value如果您正在使用 .NET 4,由于可选参数的奇妙,您不需要发送所有这些烦人的东西。

于 2011-02-17T14:58:34.467 回答
1

您可以尝试Aspose.Words for .NETDOC 文件转换为 PDF。它可以用于任何带有 C# 或 VB.NET 的 .NET 应用程序,就像任何其他 .NET 程序集一样。它也适用于任何 Windows 操作系统和 32/64 位系统。

披露:我在 Aspose 担任开发人员布道师。

于 2011-08-10T08:20:27.487 回答
0

正如HuBeZa所说,如果您的工作站上安装了Word,您可以使用Word Automation将您的文件一个一个打开并保存为PDF。您所需要的只是引用 COM 组件“Microsoft Word 对象库”并使用该程序集的类。

执行时间可能会有点长,但您的转换将是自动化的。

于 2011-02-17T15:04:45.590 回答
0

我们可以为单词自动化设置字体,我将单一字体应用于从我的解决方案中针对同一应用程序生成的所有文档 - 并节省了我手动进入每个模板并为每个标签和标题等单独设置字体的时间......

 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();
                }
于 2013-04-09T08:05:42.133 回答
-2

我认为直接回答是否定的!但可以通过我建议的解决方法是使用 imagemagik 或一些库,看看它是否可以提供你的 word doc 的图像,然后在 itextsharp 中使用这些图像来创建 pdf

于 2011-02-17T15:01:46.807 回答