在 c# 中将 RTF 文件转换为 PDF
本文关键字:转换 PDF 文件 RTF 中将 | 更新日期: 2023-09-27 18:31:47
我需要提供将RTF/WORD文件转换为PDF并将其作为附件发送到电子邮件的功能,为此我尝试了如下所示的代码:
// 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;
Document doc;
protected void Page_Load(object sender, EventArgs e)
{
ConvertToPDF("test.doc");
}
void ConvertToPDF(string sFileName)
{
// 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;
Document doc;
try
{
word.Visible = false;
word.ScreenUpdating = false;
DirectoryInfo dirInfo = new DirectoryInfo(Server.MapPath(".") + "''TempDoc");
FileInfo[] wordFile = dirInfo.GetFiles(sFileName);
if (wordFile.Length > 0)
{
Object filename = (Object)wordFile[0].FullName;
// Use the dummy value as a placeholder for optional arguments
doc = word.Documents.Open2000(ref filename, 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[0].FullName.Replace(".doc", "");
object fileFormat = WdSaveFormat.wdFormatPDF;
// Save document into PDF Formats
doc.SaveAs2000(ref outputFileName, ref fileFormat, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
}
}
catch (Exception ex)
{
Response.Write(ex);
}
finally
{
// 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.
doc = null;
// word has to be cast to type _Application so that it will find
// the correct Quit method.
word = null;
}
}
但它给出了错误.doc。SaveAs2000(ref output文件名, ref fileFormat, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);陈述。
这可能是我们有Microsoft Office 2007的原因,在这种情况下,没有任何选项可以另存为PDF文件。在Microsoft Office 2010 中,它具有该选项,因此当服务器上安装 Office 2010 时Microsoft此代码可能有效。
是的,它在 2010 年确实有效。我最近用过它,但我相信 2007 年有一个补丁也添加了另存为 PDF 功能
也许试试这个 http://msdn.microsoft.com/en-us/library/bb412305(v=office.12).aspx
Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application();
appWord.Visible = false;
//object oMissing = Type.Missing;
object oMissing = System.Reflection.Missing.Value;
// Declare variables for the Document.ExportAsFixedFormat method parameters.
bool paramOpenAfterExport = false;
Office.WdExportOptimizeFor paramExportOptimizeFor =
Office.WdExportOptimizeFor.wdExportOptimizeForOnScreen;
Office.WdExportRange paramExportRange = Office.WdExportRange.wdExportAllDocument;
int paramStartPage = 0;
int paramEndPage = 0;
Office.WdExportItem paramExportItem = Office.WdExportItem.wdExportDocumentWithMarkup; //This is
//the key to keep track changes markup;
bool paramIncludeDocProps = true;
bool paramKeepIRM = true;
Office.WdExportCreateBookmarks paramCreateBookmarks =
Office.WdExportCreateBookmarks.wdExportCreateWordBookmarks;
bool paramDocStructureTags = true;
bool paramBitmapMissingFonts = true;
bool paramUseISO19005_1 = false;
Microsoft.Office.Interop.Word.Document wordDocument = appWord.Documents.Open(fileToProcess);
wordDocument.ExportAsFixedFormat(tempPDFFilePath, Office.WdExportFormat.wdExportFormatPDF, paramOpenAfterExport, paramExportOptimizeFor, paramExportRange, paramStartPage, paramEndPage, paramExportItem,
paramIncludeDocProps, paramKeepIRM, paramCreateBookmarks, paramDocStructureTags, paramBitmapMissingFonts, paramUseISO19005_1, ref oMissing);
((Office._Document)wordDocument).Close(false, Type.Missing, Type.Missing);
((Office._Application)appWord).Quit(false);
首先需要从 nugget 包中添加 Microsoft.Office.Interop.dll。将.rft原始文件添加为文件到处理,并在tempFilePath中添加需要保存转换后的pdf文件的位置路径。