#include "fpdfview.h"
#include <iostream>
#include <string>
#include <string.h>
// #include "opencv2/opencv.hpp"
const char* icudt64_dat ="/data2/jesse/work/pdfium/repo/icudtl.dat2";
int main(int argc, char* argv[]) { // FPDF_InitLibrary();
const char* fonts[] = {
"../fonts/",
NULL
};
FPDF_LIBRARY_CONFIG config;
config.m_pUserFontPaths = fonts;
config.version = ;
config.m_pIsolate = NULL;
config.m_v8EmbedderSlot = ;
FPDF_InitLibraryWithConfig(&config);
char* path = "../sample/test.pdf";
if (argc > ) {
path = argv[];
} FPDF_DOCUMENT doc = FPDF_LoadDocument(path, );
if (doc) {
int page_count = FPDF_GetPageCount(doc);
std::cout << "page count " << page_count << std::endl;
for (int p = ; p < page_count; p++) {
FPDF_PAGE page = FPDF_LoadPage(doc, p);
if (page) {
// 物理尺寸 每英寸72点
double pwidth = FPDF_GetPageWidth(page);
double pheight = FPDF_GetPageHeight(page);
// 150ppi 下的像素尺寸
int width = (int)(pwidth)* / ;
int height = (int)(pheight)* / ;
std::cout << "\t" << p << " (" << width << "," << height << ")" << std::endl;
// BGRx/BGRA 4通道
FPDF_BITMAP bmp = FPDFBitmap_Create(width, height, );
// BGR 3通道
// FPDF_BITMAP bmp = FPDFBitmap_CreateEx(width, height, FPDFBitmap_BGR,NULL,0);
uint8_t* ptr = (uint8_t*)FPDFBitmap_GetBuffer(bmp);
//设置画板白色背景
memset(ptr,,width*height*);
FPDF_RenderPageBitmap(bmp, page, , , width, height, , );
std::string name = "page" + std::to_string(p) + ".ppm";
FILE* fp = fopen(name.c_str(), "wb");
fprintf(fp, "P6\n%d %d\n255\n", width, height); uint8_t* dst = (uint8_t*)malloc(width * height * );
uint8_t* dptr = dst;
for (int y = ; y < height; y++) {
for (int x = ; x < width; x++) {// BGR->RGB
*dst++ = (ptr[]);// * ptr[3] + 255 * (255 - ptr[3])) / 255;
*dst++ = (ptr[]);// * ptr[3] + 255 * (255 - ptr[3])) / 255;
*dst++ = (ptr[]);// * ptr[3] + 255 * (255 - ptr[3])) / 255;
ptr += ;
}
}
fwrite(dptr, width * , height, fp);
fclose(fp);
free(dptr);
FPDFBitmap_Destroy(bmp);
FPDF_ClosePage(page);
}
}
FPDF_CloseDocument(doc);
} FPDF_DestroyLibrary();
return ;
}

https://github.com/xinyu391/pdfium_with_cmake/blob/74baec0ae113f9deeaccd9a556c1fefa69df6425/demo.cpp

pdfium ppm demo的更多相关文章

  1. PDFium 渲染

    PDFium 是 Chromium 的 PDF 渲染引擎,许可协议为 BSD 3-Clause.不同于 Mozilla 基于 HTML5 的 PDF.js,PDFium 是基于 Foxit Softw ...

  2. 通过一个demo了解Redux

    TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...

  3. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo

    有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...

  4. 在线浏览PDF之PDF.JS (附demo)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#skill 下载地址:http://mozilla.gith ...

  5. 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo

    Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...

  6. vue双向数据绑定原理探究(附demo)

    昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ...

  7. Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决

    前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...

  8. iOS之ProtocolBuffer搭建和示例demo

    这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...

  9. 钉钉开放平台demo调试异常问题解决:hostname in certificate didn't match

    今天研究钉钉的开放平台,结果一个demo整了半天,这帮助系统写的也很难懂.遇到两个问题: 1.首先是执行demo时报unable to find valid certification path to ...

随机推荐

  1. mysql安装包安装

    Centos7.4在无网环境下的Mysql简易安装,使用tar包安装MySQL. 使用的资源: mysql5.7安装包:链接:https://pan.baidu.com/s/1tUJs97Gi-ksy ...

  2. 一个驱动导致的内存泄漏问题的分析过程(meminfo->pmap->slabtop->alloc_calls)

    关键词:sqllite.meminfo.slabinfo.alloc_calls.nand.SUnreclaim等等. 下面记录一个由于驱动导致的内存泄漏问题分析过程. 首先介绍问题背景,在一款嵌入式 ...

  3. Windows 10 任务栏添加网易云音乐控制按钮

      软件背景: 算是老帖新发,之前有朋友分享过一个很好用的工具,但可能是因为网易云软件更新后,导致控件失灵了,只剩下歌词控件有用了,所以今天用python重新写了一个小工具,发出来分享给大家,附上之前 ...

  4. 从公司实际沟通中-得知bug的描述与为什么要bug留痕

    从公司实际沟通中-得知bug的描述与为什么要bug留痕 最近在做的一个实际项目.下图为我们的聊天记录,仔细看图,领悟: 从中预期可以学习到的: 1)实际公司--Bug描述的另一个方法: 2)实际公司- ...

  5. Vue动态加载图片图片不显示

    图片是放在assets文件夹下的 使用require进行解决 图片不显示的原因 在webpack,将图片放在assets中,会将图片图片来当做模块来用,因为是动态加载的,所以url-loader将无法 ...

  6. WebScraper for Mac(网站数据抓取软件) 4.10.2

    WebScraper Mac版是一款Mac平台上通过使用将数据导出为JSON或CSV的简约应用程序,WebScraper Mac版可以快速提取与某个网页(包括文本内容)相关的信息.WebScraper ...

  7. 201871010108-高文利《面向对象程序设计(java)》第一周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>  https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>  ...

  8. misc-3-1

    无后缀,用winhex发现是rar,添加后缀解压,依据是无后缀,丢到kali,是一个流量数据包 TCP追踪流在第五个数据包发现flag.rar 导出对象 选择HTTP 找到flag.rar 然后丢到你 ...

  9. webdriver-键盘操作 for java

    2017年01月17日 17:08:25 阅读数:2044 import java.awt.AWTException;import java.awt.Robot;import java.awt.eve ...

  10. 发布Jar包到中央仓库

    参考流程 https://blog.csdn.net/qq_36838191/article/details/81027586 备份还原 gpg-keys https://blog.rathena.c ...