IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++ PDFium pdf转为图片 -> 正文阅读

[C++知识库]c++ PDFium pdf转为图片

本来想使用mupdf库实现pdf转为png图片,但是折腾了很久,最新版本不支持vs2013,就是使用高版本vs编译,也没有编译成功,于是换成PDFium实现这个功能,vs采用2013,以下是转换图片的代码:

// TestPdf2Img.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "fpdfdoc.h"
#include "fpdftext.h"
#include "fpdfedit.h"
#include <string>
using namespace std;
#include <stdio.h>

void WriteBmp(const char* pdf_name, int num, const void* buffer,
?? ?int stride, int width, int height) {
?? ?if (stride < 0 || width < 0 || height < 0)
?? ??? ?return;
?? ?if (height > 0 && width > INT_MAX / height)
?? ??? ?return;
?? ?int out_len = stride * height;
?? ?if (out_len > INT_MAX / 3)
?? ??? ?return;

?? ?char filename[256];
?? ?sprintf(filename, "%s.%d.bmp", pdf_name, num);
?? ?FILE* fp = fopen(filename, "wb");
?? ?if (!fp)
?? ??? ?return;

?? ?BITMAPINFO bmi = { 0 };
?? ?bmi.bmiHeader.biSize = sizeof(bmi) - sizeof(RGBQUAD);
?? ?bmi.bmiHeader.biWidth = width;
?? ?bmi.bmiHeader.biHeight = -height; ?// top-down image
?? ?bmi.bmiHeader.biPlanes = 1;
?? ?bmi.bmiHeader.biBitCount = 32;
?? ?bmi.bmiHeader.biCompression = BI_RGB;
?? ?bmi.bmiHeader.biSizeImage = 0;

?? ?BITMAPFILEHEADER file_header = { 0 };
?? ?file_header.bfType = 0x4d42;
?? ?file_header.bfSize = sizeof(file_header) + bmi.bmiHeader.biSize + out_len;
?? ?file_header.bfOffBits = file_header.bfSize - out_len;

?? ?fwrite(&file_header, sizeof(file_header), 1, fp);
?? ?fwrite(&bmi, bmi.bmiHeader.biSize, 1, fp);
?? ?fwrite(buffer, out_len, 1, fp);
?? ?fclose(fp);
}

void pdf2cimage(char *file_path, int image_Sharpness = 1)
{
?? ?FPDF_InitLibrary(NULL);
?? ?//读取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;
?? ?}
?? ?for (int npage = 0; npage < pageCount; npage++)
?? ?{
?? ??? ?FPDF_PAGE pdf_page = FPDF_LoadPage(pdf_doc, npage);
?? ??? ?FPDF_TEXTPAGE text_page = FPDFText_LoadPage(pdf_page);
?? ??? ?int page_w = static_cast<int>(FPDF_GetPageWidth(pdf_page));
?? ??? ?int page_h = static_cast<int>(FPDF_GetPageHeight(pdf_page));

?? ??? ?FPDF_BITMAP bit;
?? ??? ?bit = FPDFBitmap_Create(page_w, page_h, 0);;

?? ??? ?FPDFBitmap_FillRect(bit, 0, 0, page_w, page_h, 0xFFFFFFFF);

?? ??? ?FPDF_RenderPageBitmap(bit, pdf_page, 0, 0, page_w, page_h, 0, 0);

?? ??? ?const char* buffer = reinterpret_cast<const char*>(FPDFBitmap_GetBuffer(bit));
?? ??? ?const int stride = FPDFBitmap_GetStride(bit);

?? ??? ?WriteBmp("xx", npage, buffer,stride, page_w, page_h);

?? ??? ?FPDFBitmap_Destroy(bit);
?? ??? ?FPDFText_ClosePage(text_page);
?? ??? ?FPDF_ClosePage(pdf_page);
?? ?}
?? ?//关闭文件
?? ?FPDF_CloseDocument(pdf_doc);
}


int _tmain(int argc, _TCHAR* argv[])
{
?? ?pdf2cimage("1.pdf");
?? ?return 0;
}

所依赖的PDFium头文件与lib静态库可以在本人资源里面下载:

??????PDFium_vs2013-C++文档类资源-CSDN文库

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:50:13  更:2022-04-04 11:52:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 17:21:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码