专栏首页程序员互动联盟如何用c语言做个阅读器?

如何用c语言做个阅读器?

libHaru是一个用来生成PDF文件的C语言、跨平台开发开源包,能再Windows、Linux、FreeBSD等等下使用。它支持线条、文本、图片、轮廓、文本注释、链接注释、文档压缩、图片嵌入、TrueType字体、加密PDF、支持多种字符集。libHaru目前的稳定版本是V2.3版。

编译libHaru这个开源库,需要其它的开源作为依赖,下面我们在Windows下编译libHaru。

1,下载zlib库,这个在官方网站上有最新的windows版本bin,不需要编译。

2,下载libpng,这个没有windows版本的二进制库文件,需要编译,最好下载1.2.51版本,因为我们要编译的libharu不是最新版本。

3,编译libpng,从projects目录中用vs2008,选择visualc71,打开工程。从工程中去掉依赖项(zlib,我们这里直接使用编译好的zlib,不需要编译),在设置从属性中的c++设置好头文件路径,和属性的连接设置好zlib的路径和库名字,编译动态库。

4,下载libharu库,注意要下载libharu_2_0_8_win32.zip这个版本,其他总是出错。拷贝zlib和libpng的头文件和库(lib,dll)到libharu工程下,修改script目录下的Makefile.msvc_dll,这里我们也是编译为动态库,以便以后使用。将Makefile.msvc_dll中的zlib和libpng指向目录和库名修改正确,在命令行下执行:

nmake -f script\Makefile.msvc_dll即可编译成功。

5,使用编译好的libhpdf.dll和libhpdf.lib。拷贝好库和头文件到使用的工程,包含头文件时如下:

#define HPDF_DLL

#include "hpdf.h"

#pragma comment (lib, "libhpdf.lib")

这里必须定义HPDF_DLL(原因看hpdf.h的头文件),否则找不到那些libhpdf.lib输出的函数,提示入:

font_demo.obj : error LNK2001: unresolved external symbol _HPDF_SaveToFile

font_demo.obj : error LNK2001: unresolved external symbol _HPDF_Page_ShowText

font_demo.obj : error LNK2001: unresolved external symbol _HPDF_Page_MoveTextPos

之类的错误。

如果没有在工程中设置包含libhpdf.lib(属性设置或者使用#pragma comment (lib, "libhpdf.lib")),则会出现如下错误:

font_demo.obj : error LNK2001: unresolved external symbol __imp__HPDF_SaveToFile@8

font_demo.obj : error LNK2001: unresolved external symbol __imp__HPDF_Page_ShowText@8

font_demo.obj : error LNK2001: unresolved external symbol __imp__HPDF_Page_MoveTextPos@12

之类的错误。

注意着两点之后编译成功。

libHaru的使用在sample目录下有文本、图片等常见的使用实例,感兴趣可以去参考一下。


本文分享自微信公众号 - 程序员互动联盟(coder_online),作者:程序员互动联盟

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-03-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【编程基础】初学者如何学习Linux网络

    1. Linux网络编程--网络知识介绍 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 1.1 客户端 在网络程序中,...

    程序员互动联盟
  • 程序员最喜欢说的十句话

    1. 见鬼了,昨天还好好的 ? 2. 不用担心,这次肯定不会有问题了 ? 3. 只需要改一行代码,不会影响其它程序的。 ? 4. 这问题我改了呀! ? 5. 在...

    程序员互动联盟
  • 如何才能写出“高质量”的代码?

    作为一个已经写了十几年代码的程序员,做好软件不是全部围绕代码而展开,换句话讲一个程序员的程序员优秀不仅仅体现在代码上,更要有内在的编程思想说的层次再高深点就是框...

    程序员互动联盟
  • “增长编辑”来了,数据分析是拯救媒体的最后稻草?

    早在十几年前,美国的一些企业已开始通过数字化运营来驱动业务增长,这样的角色如今被称为“增长黑客”(Growth Hacker)。而现在在传统的媒体业,也出现了类...

    DT数据侠
  • 1.1 可视化概述

    学习PowerBI有三大独立的模块,Power Query获取数据、Power Pivot & DAX 数据建模、Power View 数据可视化,以可视化作为...

    公众号PowerBI大师
  • Python字符串格式化

    用于字符串的拼接,性能更优。 字符串格式化有两种方式:百分号方式、format方式。 百分号方式比较老,而format方式是比较先进的,企图替代古老的方式,目前...

    用户1173509
  • 阿里达摩院实习生立功!何恺明Mask R-CNN精度提升,一半输入数据量就行 | CVPR2020

    这就是阿里达摩院提出的图像分析新方法:“频域学习”(Learning in the Frequency Domain)。

    Amusi
  • 百度地图电子围栏功能

    今年疫情以来,工作都比较紧凑,没能抽出时间来记录工作日常了。最近接触一个项目需要使用到百度地图的围栏功能,作为前期调研,先探探路。 经过一番搜搜,找到一篇不错...

    用户5640963
  • Android高频面试专题 - 架构篇(三)Retrofit

    Retrofit并不是网络请求框架,严格说只是对网络请求的一种封装,我们只需要定义一个接口类,在请求方法上加上相应的注解,甚至都不需要实现,就可以实现网络请求。...

    Android扫地僧
  • 从零开始开发企业级angularjs应用

    lilugirl

扫码关注云+社区

领取腾讯云代金券