C++ PDF转图片

embedded/2024/9/23 10:17:40/
C++ PDF转图片#include "include/fpdfview.h"
#include <fstream>
#include <include/core/SkImage.h>sk_sp<SkImage> pdfToImg(sk_sp<SkData> pdfData)
{sk_sp<SkImage> img;FPDF_InitLibrary(nullptr);FPDF_DOCUMENT doc;FPDF_PAGE     page;doc = FPDF_LoadMemDocument(pdfData->bytes(), pdfData->size(), NULL);if (doc == NULL) {printf("failed to open test document\n");return img;}int numPages = FPDF_GetPageCount(doc);printf("document has %d pages\n", numPages);for (int i = 0; i < numPages; ++i) {page = FPDF_LoadPage(doc, i);if (page == NULL) {printf("failed to open page %s\n", i);continue;}double width  = FPDF_GetPageWidth(page);double height = FPDF_GetPageHeight(page);printf("page %d is : %f x %f\n", i, width, height);// 创建空白位图对象FPDF_BITMAP bitmap = FPDFBitmap_Create(width, height, 0);FPDFBitmap_FillRect(bitmap, 0, 0, width, height, 0xFF, 0xFF, 0xFF, 0xFF);// 渲染图片FPDF_RenderPageBitmap(bitmap, page, 0, 0, width, height, 0, 0);const char *buffer = reinterpret_cast<const char *>(FPDFBitmap_GetBuffer(bitmap));SkImageInfo imageInfo = SkImageInfo::Make(width, height, kRGBA_8888_SkColorType, kUnpremul_SkAlphaType);// const int   totalByte = (imageInfo.minRowBytes() * imageInfo.height());SkPixmap pixmap(imageInfo, buffer, imageInfo.minRowBytes());img = SkImage::MakeRasterCopy(pixmap);FPDFBitmap_Destroy(bitmap);FPDF_ClosePage(page);break;  //只读取第一页}FPDF_DestroyLibrary();return img;
}void main() {std::string strPath("D:/test.pdf");std::ifstream xdZipPath(strPath.c_str(), std::ios::in | std::ios::binary);  // 压缩包zip路径if (!xdZipPath.is_open()) {std::cout << strPath << " not exist!";return;}size_t   bufSize   = xdZipPath.seekg(0, std::ios::end).tellg();uint8_t *buf       = new uint8_t[bufSize];xdZipPath.seekg(0, std::ios::beg).read((char *)buf, bufSize);xdZipPath.close();sk_sp<SkData>  imgData = SkData::MakeWithCopy(buf, bufSize);delete[] buf;              // 提前释放内存sk_sp<SkImage> img = pdfToImg(imgData);
}

参考

https://pdfium.googlesource.com/pdfium

The C# PDF Library | Pdfium.Net SDK

https://github.com/PDFium/PDFium

https://github.com/bblanchon/pdfium-binaries

pdfium_render - Rust

pdfium_render::pdfium - Rust

Class: PDFium::Page — Documentation for pdfium (0.0.2)

@taggun/pdfium - npm

https://blogs.embarcadero.com/pdfium-pdf-engine-for-your-delphi-c-builder-firemonkey-applications/

 pypdfium2 · PyPI


创作不易,小小的支持一下吧!


http://www.ppmy.cn/embedded/47120.html

相关文章

数据赋能(116)——体系:数据收集——影响因素、直接作用、主要特征

影响因素 数据收集主要影响因素如下 数据源的质量与可靠性&#xff1a;数据源是数据收集的基础&#xff0c;其质量和可靠性直接影响收集到的数据的价值。如果数据源本身存在错误、不完整或偏差&#xff0c;那么收集到的数据也会受到影响。因此&#xff0c;选择可靠、权威的数…

【Git】分支管理 -- 详解

一、理解分支 分支就是科幻电影里面的平行宇宙&#xff0c;当你正在电脑前努力学习 C 的时候&#xff0c;另一个你正在另一个平行宇宙里努力学习 JAVA。 如果两个平行宇宙互不干扰&#xff0c;那对现在的你也没啥影响。不过&#xff0c;在某个时间点&#xff0c;两个平行宇宙…

uniapp使用webview内嵌H5的注意事项

一、描述 uniapp项目中构建app&#xff0c;需要内嵌H5页面&#xff0c;在使用webview时&#xff0c;遇到了以下几个问题&#xff1a; 内嵌H5&#xff0c;默认全屏显示&#xff1b;内嵌页面遮挡住了app的自定义tabbar组件&#xff1b;样式修改无效&#xff1b; 二、解决方案&a…

React@16.x(26)useContext

目录 1&#xff0c;上下文的使用2&#xff0c;useContext 1&#xff0c;上下文的使用 之前的文章中介绍过 context上下文。 使用举例&#xff1a; import React, { useState } from "react";const ctx React.createContext();function Child() {return <ctx.C…

易保全网络赋强公证系统,“公证赋强+科技赋能”双重增信

网络赋强公证系统是一种创新的法律服务模式&#xff0c;旨在通过线上方式赋予债权文书强制执行效力。具体来说&#xff0c;该系统结合了互联网技术与公证业务&#xff0c;允许公证机构根据当事人的申请&#xff0c;利用互联网公证技术手段对互联网上的债权文书进行公证&#xf…

C语言 | Leetcode C语言题解之第145题二叉树的后序遍历

题目&#xff1a; 题解&#xff1a; void addPath(int *vec, int *vecSize, struct TreeNode *node) {int count 0;while (node ! NULL) {count;vec[(*vecSize)] node->val;node node->right;}for (int i (*vecSize) - count, j (*vecSize) - 1; i < j; i, --j)…

pnpm : 无法加载文件 C:\Users\WTK\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。

PS D:\VUE3\vue-pure-admin-main> pnpm i pnpm : 无法加载文件 C:\Users\WTK\AppData\Roaming\npm\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?Link ID135170 中的 about_Execution_Policies。 所在…

商业智能(BI)期末复习

商业智能&#xff08;BI&#xff09;期末复习 商业智能&#xff08;BI&#xff09;期末复习 2024/06/17 13:30-15:00 1.工作簿包含工作表 2.tableau是一款轻型BI工具 3.敏捷BI成本比较低 因为可以不建立数据仓库 4.敏捷BI的能带来更高的质量系统 是在用户监督下建立起来的 …