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