我有一种情况需要将Doc文件转换为PDF文件。我在vb.net中开发windows应用程序。如果可能的话,我也不想使用第三方DLL。 所以有人能给我一些更多的想法吗?
答案 0 :(得分:3)
您可以使用Office Interop。但是最好使用像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;
答案 1 :(得分:2)
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)
答案 2 :(得分:1)
2007 Microsoft Office Add-in:Microsoft另存为PDF和2007 Microsoft Office Add-in:Microsoft另存为XPS允许Microsoft Office Word 2007以PDF和XPS格式导出和保存文档。
检查这些:
Saving Word 2007 Documents to PDF and XPS Formats
How to convert Word to PDF in asp.net
如果您想使用Thirt party dll,请检查此SO主题:Converting MS Word Documents to PDF in ASP.NET
答案 3 :(得分: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()