【问题标题】:Take screenshot of selected area in pdf in windows application using c#使用c#在windows应用程序中截取pdf中选定区域的屏幕截图
【发布时间】:2015-02-20 10:49:56
【问题描述】:

我正在.Net 中开发一个windows 应用程序,我想从我的计算机中选择一个pdf 并以​​表格形式显示它。用户可以在应用程序中选择此pdf的某些部分,然后将生成所选区域的图像。

我不知道该怎么做。

如何阅读和显示 pdf 并截取其内容?

我曾尝试使用 com 组件 Acrobat Reader 阅读 pdf,但它不允许我使用鼠标捕获选定区域。

【问题讨论】:

    标签: c# .net winforms pdf


    【解决方案1】:

    最简单的方法是将 pdf 转换为位图(如果 pdf 是多页的,则为一系列位图)然后显示它。当用户选择某个区域时 - 只需剪切位图并保存到文件中。

    您可以找到许多如何将 pdf 转换为位图的示例:

    还有更多

    编辑:

    这篇文章似乎与您的问题非常接近: http://www.codeproject.com/Articles/37637/View-PDF-files-in-C-using-the-Xpdf-and-muPDF-libra

    OpenFileDialog dlg = new OpenFileDialog();
    dlg.Filter = "Portable Document Format (*.pdf)|*.pdf";
    if (dlg.ShowDialog() == DialogResult.OK)
    {
        _pdfDoc = new PDFLibNet.PDFWrapper();
        _pdfDoc.LoadPDF(dlg.FileName);
        _pdfDoc.CurrentPage = 1;
    
       PictureBox pic =new PictureBox();
       pic.Width=800;
       pic.Height=1024;
       _pdfDoc.FitToWidth(pic.Handle);
       pic.Height = _pdfDoc.PageHeight;
       _pdfDoc.RenderPage(pic.Handle);
    
       Bitmap _backbuffer = new Bitmap(_pdfDoc.PageWidth, _pdfDoc.PageHeight);
       using (Graphics g = Graphics.FromImage(_backbuffer))
       {
           _pdfDoc.RenderHDC(g.GetHdc);
           g.ReleaseHdc();
       }
       pic.Image = _backbuffer;
    }  
    

    绘制位图后,您可以在其上进行绘制(即,用于选择范围),根据需要剪切并保存到文件中。

    【讨论】:

    • 如果 pdf 包含这么多页面,那么我认为这不是可行的解决方案
    • 您可以从 pdf 中获取页数,然后在您的 UI 中提供“分页”功能 - 仅转换并显示当前页面或假设提前 3 页
    • 这些位图不会保存在系统上吧?你能举个例子吗?
    • 这取决于您选择哪个库来执行转换。大多数人使用 GhostScript 可调用 exe,它将位图作为文件生成。对我来说,如果您在使用后释放空间,那么存储一些临时文件并没有错。这是一些完整的工作示例:codeproject.com/Articles/41933/…
    • 这里是更接近您的问题的示例:codeproject.com/Articles/37637/…
    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2020-09-12
    相关资源
    最近更新 更多