【问题标题】:iTextSharp - Convert word doc/docx to pdfiTextSharp - 将 word doc/docx 转换为 pdf
【发布时间】:2009-10-08 10:55:34
【问题描述】:

我了解 iTextSharp 可用于将文档转换为 pdf。

但首先我们必须使用 iTextSharp.text.Document 从头开始​​创建一个文档,然后向该文档添加元素。

如果我有一个现有的 doc 文件,是否可以使用 iTextSharp 将此文档转换为 pdf。

另外,我想使用 iTextSharp 或任何可以对 doc 文件执行以下操作的类似工具:

  1. 处理 doc/docx/text 文件(例如用 DB 值替换一些占位符)以及
  2. 将它们转换为 .pdf

谁有这方面的想法,请分享。

谢谢!

【问题讨论】:

  • 为了获得最大的灵活性,您可以考虑为每个操作和转换步骤分别提供“同类最佳”解决方案。这就是标准文件格式(doc、docx)的美妙之处。

标签: pdf ms-word itextsharp docx doc


【解决方案1】:

Aspose.Words 组件可以可靠地做到这一点(我不隶属于任何人)。

iTextSharp 没有加载和处理 MS Word 文件格式所需的功能集。

【讨论】:

  • 感谢大家的帮助。对于我目前的场景,我将使用 Aspose 库进行 doc/docx 操作,然后在邮件合并后最终将结果文档转换为 pdf。我已经下载了 30 天免费试用版,它似乎解决了我所有的问题。我建议任何打算使用 Aspose 的人先获得试用版,然后再做出决定。
  • Aspose 在大多数情况下都可以很好地进行 OpenXml 到 PDF 的转换,但请注意,它目前对某些 Open XML 功能(例如内容控件和 AltChunk 节点)的支持很差或不存在。跨度>
  • 最近的替代方案是 my/Plutext 的商业 docx 到 PDF 转换器;试试converter-eval.plutext.com
  • Aspose 对于一个初创项目来说成本太高了。
【解决方案2】:

您可以使用 Microsoft.Office 现有的方法

 private Microsoft.Office.Interop.Word.ApplicationClass MSdoc;

    //Use for the parameter whose type are not known or say Missing
    object Unknown = Type.Missing;

  private void word2PDF(object Source, object Target)
    {   //Creating the instance of Word Application
      if (MSdoc == null)MSdoc = new Microsoft.Office.Interop.Word.ApplicationClass();

        try
        {
            MSdoc.Visible = false;
            MSdoc.Documents.Open(ref Source, ref Unknown,
                 ref Unknown, ref Unknown, ref Unknown,
                 ref Unknown, ref Unknown, ref Unknown,
                 ref Unknown, ref Unknown, ref Unknown,
                 ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);
             MSdoc.Application.Visible = false;
              MSdoc.WindowState =   Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMinimize;

            object format = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;

            MSdoc.ActiveDocument.SaveAs(ref Target, ref format,
                    ref Unknown, ref Unknown, ref Unknown,
                    ref Unknown, ref Unknown, ref Unknown,
                    ref Unknown, ref Unknown, ref Unknown,
                    ref Unknown, ref Unknown, ref Unknown,
                   ref Unknown, ref Unknown);
          }
           catch (Exception e)
          {
            MessageBox.Show(e.Message);
           }
         finally
          {
            if (MSdoc != null)
            {
                MSdoc.Documents.Close(ref Unknown, ref Unknown, ref Unknown);
                //WordDoc.Application.Quit(ref Unknown, ref Unknown, ref Unknown);
            }
            // for closing the application
            WordDoc.Quit(ref Unknown, ref Unknown, ref Unknown);
        }
    } 

【讨论】:

  • 当然,请注意,在服务器环境中工作时,不建议这样做。见support.microsoft.com/kb/257757
  • 它看起来不错,因为它是一个 ms office jar,但我不知道如何在我的程序中使用它。我无法获得 microsoft office jar。你能帮帮我吗?
  • 您必须使用某种 COM 互操作性库,例如 Jacob,才能直接从 Java 代码处理那些 MS-Office 对象(至少 JDK 1.5 就是这种情况)——即便如此代码看起来有点难看。从“ref”和Interop库来看,上面的代码是用C#写的
【解决方案3】:

Aspose.Words 确实是一个很好的解决方案,但它不能提供完美的保真度。在撰写本文时,它存在非罗马语言、浮动元素等复杂格式以及许多其他问题。

您可能想看看这个PDF Conversion Web Service,它可以在任何支持 Web 服务的环境中使用,包括 Java 和 .NET。

请注意,我参与了这个项目,所以通常的免责声明适用。

【讨论】:

  • PDF 转换 Web 服务仅调用 Microsoft Word 将文档转换为 PDF。这就是任何人都可以做到的文字自动化。
  • 它实际上做得更多,但知道你是谁,你和我一样有偏见:-) Aspose.Words 做得很好,很棒的产品,我一直推荐它。跨度>
  • 转换服务的价格是 1 台服务器 1500 美元。 @iniki 以相同或更低的价格使用 DynamicPDF Converter 或 Aspose 可能会更好,而且它全部在托管代码中运行,不需要安装 Word 或管理 Web 服务。不过,就您而言,没有什么能提供互操作词自动化可以提供的转换保真度。
  • 非拉丁语或非罗马语,请参阅simple.wikipedia.org/wiki/Roman_alphabet(必须查一下,因为你让我怀疑自己:-)
【解决方案4】:

如果您不关心格式是否忠实于 Word 将显示的内容,那么令人印象深刻的 docx2tex 可以将 Word 2007 docx 文件转换为 Latex 文档。进入 Latex 后,您可以通过编程方式重新格式化文档,并从中生成 PDF。

我在tex.stackexchange 的回答中详细介绍了该实用程序。

【讨论】:

    【解决方案5】:

    我确实有同样的问题。
    经过几天的尝试寻找解决方案后,似乎Docx4J,一个基于 Java 的工具,或者像PDFCreator 这样的 PDF 打印机,可能是免费的解决方案之一。
    可以肯定的是,只需一个商业工具就可以有效地完成所要求的任务。
    在 Microsoft 方面,您可以使用启用服务器端的Sharepoint Word Automation Services,(检查于 2016 年 6 月 7 日),或在您的本地计算机中进行互操作。
    建议的部分到部分转换(将 DOC 或 DOC 转换为某种中间语言,然后转换为 PDF)似乎是因为用户在 stackoverflow 或其他论坛上所说的话,这是不可能的,因为结果不是预期的。

    【讨论】:

      【解决方案6】:

      对于 docx 操作,您应该使用本机 Open XML 方法。从 Microsoft 下载 Open XML SDK 2。

      然后您可以使用此付费库将 docx 文件转换为 pdf:http://www.subsystems.com/dpw.htm。这真的很棒。

      【讨论】:

      • 这不是很好。试过了,它改变了到处的字体并删除了页面格式。
      • 不是很好,@Franklin。我同意。但是一旦你克服了学习曲线,你就可以控制格式、字体等。不过,学习曲线很糟糕
      猜你喜欢
      • 2016-11-20
      • 1970-01-01
      • 2017-07-20
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多