pdfium ppm demo

#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 = 2;
    config.m_pIsolate = NULL;
    config.m_v8EmbedderSlot = 0;
    FPDF_InitLibraryWithConfig(&config);
    char* path = "../sample/test.pdf";
    if (argc > 1) {
        path = argv[1];
    }

    FPDF_DOCUMENT doc = FPDF_LoadDocument(path, 0);
    if (doc) {
        int page_count = FPDF_GetPageCount(doc);
        std::cout << "page count " << page_count << std::endl;
        for (int p = 0; 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)*150 / 72;
                int height = (int)(pheight)*150 / 72;
                std::cout << "\t" << p << " (" << width << "," << height << ")" << std::endl;
                // BGRx/BGRA 4通道
                FPDF_BITMAP bmp = FPDFBitmap_Create(width, height, 0);
                // BGR 3通道
                //  FPDF_BITMAP bmp = FPDFBitmap_CreateEx(width, height, FPDFBitmap_BGR,NULL,0);
                uint8_t* ptr = (uint8_t*)FPDFBitmap_GetBuffer(bmp);
                //设置画板白色背景
                memset(ptr,255,width*height*4);
                FPDF_RenderPageBitmap(bmp, page, 0, 0, width, height, 0, 0);
                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 * 3);
                uint8_t* dptr = dst;
                for (int y = 0; y < height; y++) {
                    for (int x = 0; x < width; x++) {// BGR->RGB
                        *dst++ = (ptr[2]);// * ptr[3] + 255 * (255 - ptr[3])) / 255;
                        *dst++ = (ptr[1]);// * ptr[3] + 255 * (255 - ptr[3])) / 255;
                        *dst++ = (ptr[0]);// * ptr[3] + 255 * (255 - ptr[3])) / 255;
                        ptr += 4;
                    }
                }
                fwrite(dptr, width * 3, height, fp);
                fclose(fp);
                free(dptr);
                FPDFBitmap_Destroy(bmp);
                FPDF_ClosePage(page);
            }
        }
        FPDF_CloseDocument(doc);
    }

    FPDF_DestroyLibrary();
    return 0;
}

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

原文地址:https://www.cnblogs.com/hshy/p/12022952.html

时间: 2025-01-02 22:48:33

pdfium ppm demo的相关文章

微信h5支付demo微信H5支付demo非微信浏览器支付demo微信wap支付

一.首先先确定H5支付权限已经申请!(需要微信h5支付demo的可以加 851 488 243 备注:h5支付) 二.开发流程 1.用户在商户侧完成下单,使用微信支付进行支付 2.由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB 3.统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名"mweb_url"),商户通过mweb_url调起微信支付中间页 4.中间页进行H5权限的校验,安全性检查(此处常见错误请见下文) 5.如支付成

Maven+SpringMVC+Freemarker入门Demo

1 参考http://blog.csdn.net/haishu_zheng/article/details/51490299,用第二种方法创建一个名为mavenspringmvcfreemarker的Maven工程. 2 文件目录结构如下图所示 3 在pom.xml中添加springmvc和freemarker的依赖包,添加完之后的完整内容为 [html] view plain copy <project xmlns="http://maven.apache.org/POM/4.0.0&q

Spring Security入门Demo

一.spring Security简介 SpringSecurity,这是一种基于Spring AOP和Servlet过滤器的安全框架.它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理身份确认和授权.在Spring Framework基础上,Spring Security充分利用了依赖注入(DI,Dependency Injection)和面向切面技术. 二.建立工程 参考http://blog.csdn.net/haishu_zheng/article/details/51490

沫沫金Echarts移动端demo

鄙视百度!!! 官网给的Demo支持自动大小,确不给完整的源码XXX 自己动手,丰衣足食 http://echarts.baidu.com/demo.html#bar-tick-align 用最基本的柱状图官网代码 简单两步,实现移动端自适应大小 //1.下载Echarts <script src="dep/Echarts/echarts-all-3.js"></script> //2.chart容器宽度自适应 <!-- 为ECharts准备一个具备大小(

Flask---使用Bootstrap新建第一个demo

Flask---使用Bootstrap新建第一个demo 参考自http://www.jianshu.com/p/417bcbad82fb 还有<Flask web开发> 前端用到Bootstrap开源框架,Bootstrap是客户端框架,后台当然就是Flask了. 服务器需要做的只是提供引用了Bootstrap层叠样式表(CSS)和JS文件的html响应,并且在html.css和js代码中实例化需要的组件,这些操作的最理想的执行环境就是模板 关于模板的介绍及其实现原理:https://kb.

struts2和hibernate整合的小Demo

jar包下载地址 创建一个web项目. 导入jar包 配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="

移动端上传照片 预览+draw on Canvas demo(解决iOS等设备照片旋转90度的bug)

背景: 本人的一个移动端H5项目,需求如下: 手机相册选取或拍摄照片后在页面上预览 然后绘制在canvas画布上. 这里,我们先看一个demo(http://jsfiddle.net/q3011893/83qfqpk8/embedded/) 操作步骤: 1.点击选择文件,拍摄一张照片,此时"预览:"文字下会显示你刚才拍摄的照片: 2.再点击"draw on Canvas",该按钮下的画布会绘制你刚才拍摄的照片. 正常的结果: 正文: 让input file支持拍照+

爬虫2:html页面+beautifulsoap模块+post方式+demo

爬取html页面,有时需要设置参数post方式请求,生成json,保存文件中. 1)引入模块 import requests from bs4 import BeautifulSoup url_ = 'http://www.c.....................' 2)设置参数 datas = { 'yyyy':'2014', 'mm':'-12-31', 'cwzb':"incomestatements", 'button2':"%CC%E1%BD%BB",

Nancy之基于Self Hosting的补充小Demo

前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self Hosting Nancy.和Owin 下面的Self Hosting作个补充. 首先是Self Hosting Nancy的补充: 这里主要是介绍一下Topshelf 官网:http://topshelf-project.com/ GitHub地址:https://github.com/Topshe