[C#]用acrobat将pdf转成图片时候到剪贴板Bitmap始终是null

参考代码:

复制代码
public static 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;
            //1)       //     生成操作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++)
            {
                //2)               
                //  取出当前页
                pdfPage = (Acrobat.CAcroPDPage)pdfDoc.AcquirePage(i - 1);
                //3)                
                //    得到当前页的大小               
                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;
                //4)                
                //    将当前页的裁剪区的内容编成图片后复制到剪贴板中            
                pdfPage.CopyToClipboard(pdfRect, 0, 0, (short)(100 * zoom));
                // 5)             
                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);
        }

但是发现始终获取不到图像,原因是acrobat DC好像不行,clipboardData.GetDataPresent(DataFormats.Bitmap)始终返回false。因此需要安装acrobat XI或者acrobat 9.0才行

相关推荐
下页、再停留3 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
GlobalTradercrb7 小时前
独立站SEO先写博客还是先优化产品页?看站点阶段
数据库·人工智能·google·pdf·go·seo
波力海苔夹心脆6758 小时前
VisionMaster 两级位置修正实战:塑料外壳与金属件装配角度检测
经验分享·计算机视觉·c#·visionmaster·海康机器人·位置修正
小羊没烦恼!10 小时前
C#综合揭秘——Entity Framework 并发处理详解
java·开发语言·前端·javascript·数据库·mysql·c#
热爱生活的五柒10 小时前
zotero能导入已经下载好的pdf文件嘛,并且点击条目时,能直接看到下载的pdf文件嘛,我还希望能在里面做笔记
笔记·pdf
淡海水11 小时前
05-02-源码-Boehm GC标记阶段
算法·unity·c#·游戏引擎·gc
信可维11 小时前
AI 读 Word 表格总读错?先查合并单元格和表头这 3 处
开发语言·人工智能·c#·word·软件工程
半摆烂日常13 小时前
手机表单的左滑操作:触摸事件的处理细节
大数据·开发语言·人工智能·智能手机·https·c#
开开心心就好14 小时前
白天晚上自动调蓝光,护眼工具亮度可调
服务器·开发语言·算法·pdf·ocr·intellij-idea·idea
绛橘色的日落(。・∀・)ノ14 小时前
C#学习笔记
笔记·学习·c#