1

我有一种情况需要将 Doc 文件转换为 PDF 文件。我正在 vb.net 中开发 Windows 应用程序。如果可能的话,我也不想使用第三方 dll。那么谁能给我更多的想法?

4

4 回答 4

2

为此,您可以使用 Office 互操作。但最好使用一些托管库,如 Aspose

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;
于 2012-03-19T13:27:32.700 回答
1

2007 Microsoft Office 插件:Microsoft 另存为 PDF 和2007 Microsoft Office 插件:Microsoft 另存为 XPS 允许 Microsoft Office Word 2007 以 PDF 和 XPS 格式导出和保存文档。

检查这些:
将 Word 2007 文档保存为 PDF 和 XPS 格式
如何在 asp.net 中将 Word 转换为 PDF

如果你想使用第三方 dll,那么检查这个 SO 线程: Converting MS Word Documents to PDF in ASP.NET

于 2012-03-19T13:24:44.173 回答
1
Imports Microsoft.Office.Interop

'This code happens to be loading a template, but it isn't necessary...

'Opens Word Application

Dim MyApp As New Word.Application

'Opens new WordDoc

Dim MyWordDoc As Word.Document = MyApp.Documents.Add(template)

MyApp.Visible = True

MyWordDoc = MyApp.ActiveDocument

'code to fill doc

'code to fill doc

'code to fill doc

MyWordDoc.SaveAs(FileLocation, Word.WdSaveFormat.wdFormatPDF)
于 2014-02-03T19:46:58.117 回答
0

您可以在我的代码中得到想法,我使用 Office.Interop 从 word 模板文件另存为 pdf 生成文件。不要忘记添加参考 office.Interop.Word

    sFileName = "billing"
    wdApp = New Word.Application
    wdDocs = wdApp.Documents

    Dim wdDoc As Word.Document = wdDocs.Add(sPath & "template.dotx")
    Dim wdBooks As Word.Bookmarks = wdDoc.Bookmarks
    Dim wdTable As Word.Table


    Dim r As Integer, c As Integer
    wdTable = wdDoc.Tables.Add(wdDoc.Bookmarks.Item("bkTable").Range, 3, 6)
    Dim rowCOunt As Integer = dgvSample.Rows.Count, colCount As Integer = dgvSample.Columns.Count

    'DATAGRIDVIEW TO WORDTABLE
    For r = 1 To rowCOunt
        For c = 1 To colCount
            wdTable.Cell(r, c).Range.Text = dgvSample.Rows(r - 1).Cells(c - 1).Value
        Next
    Next

    wdTable.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle
    wdTable.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleSingle

    wdBooks("bkClient_name").Range.Text = txtClient.Text.ToString
    wdBooks("bkDate").Range.Text = dtpDate.Text.ToString
    wdDoc.SaveAs2(sPath & sFileName & ".pdf", Word.WdSaveFormat.wdFormatPDF)

    ReleaseObject(wdBooks)
    wdDoc.Close(False)
    ReleaseObject(wdDoc)
    ReleaseObject(wdDocs)
    wdApp.Quit()
于 2019-06-15T02:19:29.520 回答