• .NET中如何使用PDFium渲染引擎高效的将PDF文件绘制成图像
  • 发布于 2个月前
  • 220 热度
    0 评论
前言
PDFium是一个由Google开发并维护的PDF渲染引擎,它是Chrome浏览器内置的PDF阅读器的核心组件。PDFium可以高效地将PDF文件绘制成图像,支持多种格式和选项。如果你想在.NET中使用PDFium,可以使用 PDFiumCore 这个开源项目,它是对PDFium的封装,提供了.NET的接口。让.NET开发者可以方便地使用PDFium的功能。

Demo
下面的代码实现了一个简单的PDF阅读器,可以在其中打开PDF文档,查看文档的内容。
using PDFiumCore;
using System.Drawing.Imaging;

namespace MyIO
{
    public partial class Form1 : Form
    {
        private FpdfDocumentT _document;
        private int _pageCount;
        private int _pageIndex;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            fpdfview.FPDF_InitLibrary();
            _document = fpdfview.FPDF_LoadDocument("sample.pdf", null);
            _pageCount = fpdfview.FPDF_GetPageCount(_document);
            _pageIndex = 0;
            ShowPage();
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            fpdfview.FPDF_DestroyLibrary();
        }

        private void btnPrev_Click(object sender, EventArgs e)
        {
            if (_pageIndex > 0)
            {
                _pageIndex--;
                ShowPage();
            }
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            if (_pageIndex < _pageCount - 1)
            {
                _pageIndex++;
                ShowPage();
            }
        }

        private void ShowPage()
        {
            // 获取页面
            var page = fpdfview.FPDF_LoadPage(_document, _pageIndex);
            // 堆代码 duidaima.com
            // 获取页面的图像
            var width = (int)fpdfview.FPDF_GetPageWidth(page);
            var height = (int)fpdfview.FPDF_GetPageHeight(page);
            var bitmap = fpdfview.FPDFBitmapCreate(width, height, 0);
            fpdfview.FPDFBitmapFillRect(bitmap, 0, 0, width, height, 0xFFFFFFFF);
            fpdfview.FPDF_RenderPageBitmap(bitmap, page, 0, 0, width, height, 0, 0);

            var stride = fpdfview.FPDFBitmapGetStride(bitmap);
            var scan0 = fpdfview.FPDFBitmapGetBuffer(bitmap);
            var image = new Bitmap(width, height, stride, PixelFormat.Format32bppArgb, scan0);

            // 显示页面
            pictureBox1.Image = image;
        }
    }
}
在上面的代码中,我们使用了FPDF_LoadDocument函数加载了一个PDF文档,然后使用FPDF_GetPageCount函数获取了文档的页面数。

当用户点击上一页或下一页按钮时,我们使用FPDF_LoadPage函数加载了一个页面,然后使用FPDF_GetPageWidth和FPDF_GetPageHeight函数获取了页面的宽度和高度,接着调用FPDFBitmapCreate函数创建了一个位图,然后调用FPDF_RenderPageBitmap函数将页面渲染到位图上。

最后,我们将位图显示在窗体上。


总结
本文介绍了PDFium这个PDF渲染引擎,以及如何在.NET中使用PDFiumCore这个开源项目。PDFiumCore提供了.NET的接口,让.NET开发者可以方便地使用PDFium的功能。
用户评论