首页 新闻 会员 周边 捐助

使用Adobe Acroba 实现pdf转换图片功能, 报“无法创建 ActiveX 组件”错误

0
悬赏园豆:5 [已关闭问题] 关闭于 2016-08-08 15:06

public void ConvertPdf2Image(string pdfFilePath, string imageDirectoryPath,
int beginPageNum, int endPageNum, ImageFormat format, double zoom = 1)
{
Acrobat.CAcroPDDoc pdfDoc = null;
Acrobat.CAcroPDPage pdfPage = null;
Acrobat.CAcroRect pdfRect = null;
Acrobat.CAcroPoint pdfPoint = null;

//生成操作Pdf文件的Com对象

pdfDoc = (Acrobat.CAcroPDDoc)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.PDDoc", "");

//检查输入参数
if (!pdfDoc.Open(pdfFilePath))
{
throw new FileNotFoundException(string.Format("源文件{0}不存在!", pdfFilePath));
}

if (!Directory.Exists(imageDirectoryPath))
{
Directory.CreateDirectory(imageDirectoryPath);
}

if (beginPageNum <= 0)
{
beginPageNum = 1;
}

if (endPageNum > pdfDoc.GetNumPages() || endPageNum <= 0)
{
endPageNum = pdfDoc.GetNumPages();
}

if (beginPageNum > endPageNum)
{
throw new ArgumentException("参数\"beginPageNum\"必须小于\"endPageNum\"!");
}

if (format == null)
{
format = ImageFormat.Png;
}

if (zoom <= 0)
{
zoom = 1;
}

//转换
for (int i = beginPageNum; i <= endPageNum; i++)
{
//取出当前页
pdfPage = (Acrobat.CAcroPDPage)pdfDoc.AcquirePage(i - 1);
//得到当前页的大小
pdfPoint = (Acrobat.CAcroPoint)pdfPage.GetSize();
//生成一个页的裁剪区矩形对象
pdfRect = (Acrobat.CAcroRect)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.Rect", "");

//计算当前页经缩放后的实际宽度和高度,zoom==1时,保持原比例大小
int imgWidth = (int)((double)pdfPoint.x * zoom);
int imgHeight = (int)((double)pdfPoint.y * zoom);

//设置裁剪矩形的大小为当前页的大小
pdfRect.Left = 0;
pdfRect.right = (short)imgWidth;
pdfRect.Top = 0;
pdfRect.bottom = (short)imgHeight;

//Bitmap pdfBitmap = (Bitmap)pdfRect;

//pdfBitmap.Save(
// Path.Combine(imageDirectoryPath, i.ToString("0000") + "." + format.ToString()), format);

//pdfBitmap.Dispose();

//将当前页的裁剪区的内容编成图片后复制到剪贴板中
pdfPage.CopyToClipboard(pdfRect, 0, 0, (short)(100 * zoom));

//ToBitmap(imageDirectoryPath, i, format);

IDataObject clipboardData = Clipboard.GetDataObject();

//检查剪贴板中的对象是否是图片,如果是图片则将其保存为指定格式的图片文件
if (clipboardData.GetDataPresent(DataFormats.Bitmap))
{
Bitmap pdfBitmap = (Bitmap)clipboardData.GetData(DataFormats.Bitmap);

pdfBitmap.Save(
Path.Combine(imageDirectoryPath, i.ToString("0000") + "." + format.ToString()), format);

pdfBitmap.Dispose();
}
}

//关闭和释放相关COM对象

pdfDoc.Close();
Marshal.ReleaseComObject(pdfRect);
Marshal.ReleaseComObject(pdfPoint);
Marshal.ReleaseComObject(pdfPage);
Marshal.ReleaseComObject(pdfDoc);


}

 

本地开发能正使用,发布到IIS上pdfRect = (Acrobat.CAcroRect)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.Rect", "");这句代码报错“无法创建 ActiveX 组件”,求大神指导怎么解决。

一念成魔卍的主页 一念成魔卍 | 初学一级 | 园豆:4
提问于:2016-01-14 15:40
< >
分享
所有回答(1)
0

LZ  这个问题解决啦?我现在也遇见啦这个问题,在本地成功但是发布到IIS上之后,就不能用啦

 

米兰_跳跳虎 | 园豆:202 (菜鸟二级) | 2016-05-11 10:01

没有,没有找到好用的,就换了其他方式了

支持(0) 反对(0) 一念成魔卍 | 园豆:4 (初学一级) | 2016-07-13 13:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册