本文主要是介绍C++基于pdfium库实现PDF转图片,VS2022,x64环境,opencv455,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1,pdfium库下载
链接:https://pan.baidu.com/s/1AU_jsrb1MyNN1t9XTybsrA
提取码:lvnw
解压过后文件如图所示:
2,创建VS2022工程
创建VS2022工程,并将pdfium文件夹放入工程文件夹下,如图所示:
将pdfium\bin\x64\pdfium.dll和pdfium\lib\x64\pdfium.lib文件复制到工程文件夹下,如下图所示:
在VS2022中的工程文件名处右键,添加现有项,将pdfium.lib添加到工程中,如下所示:
新建cpp文件,将如下代码输入其中:
#include <iostream>
#include <string>
#include <opencv2\opencv.hpp>
#include "fpdfview.h"
#include "fpdf_formfill.h"
#include "fpdf_ext.h"
#include "fpdf_dataavail.h"
#include "fpdf_text.h"
using namespace std;//file_path(取值如: "test.pdf"): 文件路径
//image_Sharpness(取值如: 5): 得到的图片尺寸与页面尺寸的倍数,越大得到的图片尺寸越大,也就越清晰
void pdf2cimage(char *file_path, const int image_Sharpness)
{//初始化函数FPDF_InitLibrary();//读取pdf文件FPDF_DOCUMENT pdf_doc = FPDF_LoadDocument(file_path, NULL);if (pdf_doc == NULL){printf("open file failed.");return;}//读取pdf页数int pageCount = FPDF_GetPageCount(pdf_doc);if (pageCount <= 0){FPDF_CloseDocument(pdf_doc);return;}//循环读取pdf每一页并保存为图片for (int npage = 0; npage < pageCount; npage++){//读取当前pdf页FPDF_PAGE pdf_page = FPDF_LoadPage(pdf_doc, npage);//获得当前页高度与宽度(图片要比页面的宽度多1个像素)const int page_h = FPDF_GetPageHeight(pdf_page) * image_Sharpness;const int page_w = (FPDF_GetPageWidth(pdf_page) + 1) * image_Sharpness;//创建PDF图片结构体FPDF_BITMAP bit;bit = FPDFBitmap_CreateEx(page_w, page_h, FPDFBitmap_BGR, NULL, NULL);//图片背景涂色FPDFBitmap_FillRect(bit, 0, 0, page_w, page_h, 0xffffff);//渲染图片FPDF_RenderPageBitmap(bit, pdf_page, 0, 0, page_w, page_h, 0, 0);//获取图片指针unsigned char* buffer = (unsigned char*)FPDFBitmap_GetBuffer(bit);const int stride = FPDFBitmap_GetStride(bit);//创建opencv图片变量cv::Mat img(page_h, page_w, CV_8UC3, cv::Scalar(0, 0, 0));//逐元素赋值for (int nRow = 0; nRow < page_h; nRow++){for (int nCol = 0; nCol < stride / 3; nCol++){for (int nCha = 0; nCha < 3; nCha++){img.at<cv::Vec3b>(nRow, nCol)[nCha] = *(buffer + nRow * stride + nCol * 3 + nCha);}}}//保存图像string save_path(file_path);save_path.erase(save_path.end() - 4, save_path.end());save_path = save_path + "_" + std::to_string(npage) + ".jpg";//std::cout << save_path << std::endl;cv::imwrite(save_path, img);//销毁PDF图片结构体FPDFBitmap_Destroy(bit);//关闭页面FPDF_ClosePage(pdf_page);}//关闭文件FPDF_CloseDocument(pdf_doc);
}int main()
{char file_path[] = "test2.pdf";pdf2cimage(file_path, 10);return 0;
}
最终如下图所示:
3,设置VS2022工程
打开工程属性页 ->c/c++ ->常规,在附加包含目录中加入:(工程存放位置)\pdfium\include\public,如下图所示:
打开工程属性页 ->链接器 ->常规,在附加库目录中加入:(工程存放位置)\pdfium\include\public,如下图所示:
至此配置完成
4,运行代码
在工程目录下放入一个test.pdf文件,如下所示:
在Debug,x64环境下运行代码,如下图所示:
运行结果如下图所示,将pdf转成了图片。
至此完。
这篇关于C++基于pdfium库实现PDF转图片,VS2022,x64环境,opencv455的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!