c# 实现word转换成pdf (带图片的word)

小弟最近在研究这个。网上搜索的答案自己琢磨了一些但是还是不成功。求会的大哥给个简单能用的demo啊!!调试过程中出现了因为该程序集缺少“ImportedFromTypeL... 小弟最近在研究这个。网上搜索的答案 自己琢磨了一些 但是还是不成功。求会的大哥给个简单能用的demo啊!!
调试过程中 出现了因为该程序集缺少“ImportedFromTypeLibAttribute”特性或“PrimaryInteropAssemb 这问题把嵌入互操作类型改成false。还是不行。跪求解惑!!!
展开
 我来答
1804438115
高粉答主

2013-09-09 · 醉心答题,欢迎关注
知道大有可为答主
回答量:1.1万
采纳率:61%
帮助的人:3745万
展开全部
private string adobePdfPrint = "Adobe PDF";
private string adobeDisPrint = "Acrobat Distiller";
private string regRoot = "SOFTWARE//Adobe//Acrobat Distiller//";
private string printerFileName = "acrodist.exe";
private string regName = "InstallPath";

/// <summary>
/// 获取acrodist.exe的安装路径
/// </summary>
/// <returns></returns>
private string GetAdobeDisFilePath()
{
RegistryKey regKey = null;
RegistryKey acrodistKey = null;
string printerName = string.Empty;
int i;
string regRootVersion = string.Empty;
regKey = Registry.LocalMachine;
// acrodist的4-8版本适用
for (i = 4; i < 9; i++)
{
regRootVersion = string.Format("{0}{1}.0", regRoot, i);
acrodistKey = regKey.OpenSubKey(regRootVersion);
if (acrodistKey != null)
{
printerName = acrodistKey.GetValue(regName, "") + "//" + printerFileName;
if (File.Exists(printerName))
{
return printerName;
}
}
}
throw new Exception("Acrobat Distiller printer not found!");
}
/// <summary>
/// 获取Adobe Printer
/// "Adobe PDF" 或 "Acrobat Distiller"
/// </summary>
/// <returns></returns>
private string GetAdobePrinter()
{
foreach (string printername in PrinterSettings.InstalledPrinters)
{
if (printername.ToUpper().IndexOf(adobePdfPrint.ToUpper()) != -1 || printername.ToUpper().IndexOf(adobeDisPrint.ToUpper()) != -1)
{
return printername;
}
}
return string.Empty;
}
public void ConvertWord2Pdf(string sourceFile)
{
if (PrinterSettings.InstalledPrinters.Count == 0)
throw new Exception("Did not find the printer, please install the printer.");
if (!File.Exists(sourceFile))
throw new Exception(string.Format("File not found:{0}", sourceFile));

string strDir = Path.GetDirectoryName(sourceFile);
string strName = Path.GetFileNameWithoutExtension(sourceFile);
string prnFile = string.Format("{0}//{1}.prn",strDir,strName);
string pdfFile = string.Format("{0}//{1}.pdf",strDir,strName);
object objPrnFile = (object)prnFile;
object background = true;
object printToFile = true;
object collate = true;
object append = false;
object manualDuplexPrint = false;
object copies = false;
object range = Word.WdPrintOutRange.wdPrintAllDocument;
object missing = System.Reflection.Missing.Value;
string msg = string.Empty;

string adobePrinter = GetAdobePrinter();
if (adobePrinter.Length == 0)
throw new Exception("Did not find Adobe PDF printer or Acrobat Distiller printer, please install the printer.");

IWord word = new Word2003Factory().CreateWord();
// 打开Word文档
Word.Document doc = word.OpenDocument(sourceFile);
string oldPrint = doc.Application.ActivePrinter;
// 将Adobe Printer设置为默认打印机
doc.Application.ActivePrinter = adobePrinter;
DateTime start = DateTime.Now;
DateTime end = start.AddSeconds(20);
// Word文档打印到Prn文件
doc.PrintOut(ref background, ref append, ref range, ref objPrnFile, ref missing, ref missing,
ref missing, ref missing,ref missing, ref printToFile, ref collate, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing);

while (!File.Exists(prnFile))
{
if (DateTime.Now > end)
{
throw new Exception("Word document print to prn document overtime");
}
else
{
Application.DoEvents();
}
}
doc.Application.ActivePrinter = oldPrint;
word.Close(false);
doc = null;
word = null;
// Prn装PDF
Process objProcess = new Process();
objProcess.StartInfo.CreateNoWindow = true;
objProcess.StartInfo.UseShellExecute = false;
objProcess.StartInfo.FileName = GetAdobeDisFilePath();
objProcess.StartInfo.Arguments = prnFile;
start = DateTime.Now;
end = start.AddSeconds(20);
objProcess.Start();

while (!File.Exists(pdfFile))
{
if (DateTime.Now > end)
{
throw new Exception("Word document print to prn document overtime");
}
else
{
Application.DoEvents();
}
}
objProcess.CloseMainWindow();
//if (File.Exists(prnFile))
//{
// File.Delete(prnFile);
//}
/*
ACRODISTXLib.PdfDistiller pdfDis = new ACRODISTXLib.PdfDistiller();
pdfDis.FileToPDF(prnFile, pdfFile, string.Empty);
start = DateTime.Now;
end = start.AddSeconds(20);
while(!File.Exists(pdfFile))
{
if (DateTime.Now > end)
{
throw new Exception("prn document print to pdf document overtime");
}
else
{
Application.DoEvents();
}
}
pdfDis = null;
*/
}

其实这个网上有不少案例,你可以都搜搜,主要的是去下载个别案例,对比写写,这样就知道了
百度网友3cac56c
2019-05-20 · TA获得超过130个赞
知道小有建树答主
回答量:180
采纳率:0%
帮助的人:65.2万
展开全部
using Word= Microsoft.Office.Interop.Word;//引入空间,设置互操作,注意版本12.0.0.0,官方的还有个14.0.0.0的,我用的是12,可正常生成。
public  bool  DOCToPDF(string sourcePath, string targetPath)
      

        }  // end doc
更多追问追答
追问
大哥,能运行的demo有没有? 跪求一个。 类似的我也学习过,但是总是有错。 我怀疑是环境有问题。 如果你的能用,放到我的电脑上 不能用 。 我就决定重装一下。 之前装过两个版本的office。
追答
采纳了!
那,那就没下文了。。。
二楼的是装了一个 转换器,再在程序调用的,我的是 引用dll ,那个通用性高,不用我说吧,别说我功利,代码是我之前项目,一行行敲的,付出想回报,这是必然的。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式