最近公司准备在PDF方面发力了,我也要行动起来,就找到了LibHaru这个开源库

编译Libharu需要用到zlib库和libpng库,libpng库又依赖zlib库.

zlib 下载地址:http://www.zlib.net/

libpng下载地址:http://www.libpng.org/pub/png/libpng.html

libharu下载地址:http://libharu.org/

下载好后,最好放到一个单独的文件夹下,

进入目录  D:\Users\PDF\lpng\projects\visualc71 里面有VS的工程,根据自己的需求编译DLL或者LIb选择不同的编译选项,

设置libpng工程的zlib头文件路径,zlib工程和上图一样,编译后,生成libpng.lib和zlib.lib,2个静态库。

为了方便编译Libharu,将zlib和libpng的头文件与静态库,单独存放到各自的include和lib文件夹里。

修改D:\Users\PDF\libharu\script\Makefile.msvc文件,如下图所示的2处

管理员 运行 “VS2008命令提示” ,

cd /D D:\Users\PDF\libharu

nmake script/Makefile.msvc

至此,LibHaru编译完成。

创建win32命令行工程测试下。

 #include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <setjmp.h>
#include "hpdf.h" #ifndef HPDF_NOPNGLIB jmp_buf env; #ifdef HPDF_DLL
void __stdcall
#else
void
#endif
error_handler (HPDF_STATUS error_no,
HPDF_STATUS detail_no,
void *user_data)
{
printf ("ERROR: error_no=%04X, detail_no=%u\n", (HPDF_UINT)error_no,
(HPDF_UINT)detail_no);
longjmp(env, );
} void
draw_image (HPDF_Doc pdf,
const char *filename,
float x,
float y,
const char *text)
{
#ifdef __WIN32__
const char* FILE_SEPARATOR = "\\";
#else
const char* FILE_SEPARATOR = "/";
#endif
char filename1[]; HPDF_Page page = HPDF_GetCurrentPage (pdf);
HPDF_Image image; strcpy(filename1, "pngsuite");
strcat(filename1, FILE_SEPARATOR);
strcat(filename1, filename); image = HPDF_LoadPngImageFromFile (pdf, filename1); /* Draw image to the canvas. */
HPDF_Page_DrawImage (page, image, x, y, HPDF_Image_GetWidth (image),
HPDF_Image_GetHeight (image)); /* Print the text. */
HPDF_Page_BeginText (page);
HPDF_Page_SetTextLeading (page, );
HPDF_Page_MoveTextPos (page, x, y);
HPDF_Page_ShowTextNextLine (page, filename);
HPDF_Page_ShowTextNextLine (page, text);
HPDF_Page_EndText (page);
} int main (int argc, char **argv)
{
HPDF_Doc pdf;
HPDF_Font font;
HPDF_Page page;
char fname[];
HPDF_Destination dst; strcpy (fname, argv[]);
strcat (fname, ".pdf"); pdf = HPDF_New (error_handler, NULL);
if (!pdf) {
printf ("error: cannot create PdfDoc object\n");
return ;
} /* error-handler */
if (setjmp(env)) {
HPDF_Free (pdf);
return ;
} HPDF_SetCompressionMode (pdf, HPDF_COMP_ALL); /* create default-font */
font = HPDF_GetFont (pdf, "Helvetica", NULL); /* add a new page object. */
page = HPDF_AddPage (pdf); HPDF_Page_SetWidth (page, );
HPDF_Page_SetHeight (page, ); dst = HPDF_Page_CreateDestination (page);
HPDF_Destination_SetXYZ (dst, , HPDF_Page_GetHeight (page), );
HPDF_SetOpenAction(pdf, dst); HPDF_Page_BeginText (page);
HPDF_Page_SetFontAndSize (page, font, );
HPDF_Page_MoveTextPos (page, , HPDF_Page_GetHeight (page) - );
HPDF_Page_ShowText (page, "PngDemo");
HPDF_Page_EndText (page); HPDF_Page_SetFontAndSize (page, font, ); draw_image (pdf, "hand.png", , /*HPDF_Page_GetHeight (page)*/,
"1bit grayscale."); /* save the document to a file */
HPDF_SaveToFile (pdf, fname); /* clean up */
HPDF_Free (pdf); return ;
} #else /* HPDF_NOPNGLIB */ int main()
{
printf("WARNING: if you want to run this demo, \n"
"make libhpdf with HPDF_USE_PNGLIB option.\n");
return ;
} #endif /* HPDF_NOPNGLIB */

工程头文件目录

D:\Users\PDF\libharu\include;

D:\Users\PDF\lpng\include;

D:\Users\PDF\zlib\include;

D:\Users\PDF\libharu\win32\include

工程库文件目录

D:\Users\PDF\libharu;

D:\Users\PDF\lpng\lib

工程使用库

libhpdf.lib libpng.lib zlib.lib

LibHaru编译使用的更多相关文章

  1. pdf生成库-libharu编译

    相关文章:libharu 源码编译 VS2010 1.首先下载libharu源码,libharu依赖于libpng和libzib,如果编译过libpng和libzib的话,直接拿过来用即可.否则需要自 ...

  2. libharu 源码编译 VS2010

    最近项目中接过了一个libharu PDF 开源库的锅,哈哈.于是就自己编译了一套libharu 的MFC下的静态库和动态库. 编译libharu需要用到zlib库和libpng库,libpng库又依 ...

  3. MinGW 编译zlib、libpng、libjpeg、libcurl等(全都是Qt项目)

    MinGW 这里使用的是Qt5自带的MinGw版本,将路径D:\Qt\Qt5.1.0\Tools\mingw48_32\bin加到"环境变量"→"系统变量"→& ...

  4. PODOFO编译

    由于LibHaru库只能创建PDF,所以只能换了. PODOFO项目的依赖项目有: FreeType2: https://sourceforge.net/projects/freetype/files ...

  5. TODO:macOS编译PHP7.1

    TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...

  6. Centos6.5下编译安装mysql 5.6

    一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm -e mysql //普通删除模式 rpm -e ...

  7. CENTOS 6.5 平台离线编译安装 PHP5.6.6

    一.下载php源码包 http://cn2.php.net/get/php-5.6.6.tar.gz/from/this/mirror 二.编译 编译之前可能会缺少一些必要的依赖包,加载一个本地yum ...

  8. CENTOS 6.5 平台离线编译安装 Mysql5.6.22

    一.下载源码包 http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.22.tar.gz 二.准备工作 卸载之前本机自带的MYSQL 安装 cmake,编 ...

  9. Android注解使用之注解编译android-apt如何切换到annotationProcessor

    前言: 自从EventBus 3.x发布之后其通过注解预编译的方式解决了之前通过反射机制所引起的性能效率问题,其中注解预编译所采用的的就是android-apt的方式,不过最近Apt工具的作者宣布了不 ...

随机推荐

  1. python基础之字符串以及切片等操作

    1.字符类型 1.整型 int  2. str 字符串 3.bool 布尔值 4.list 表格,常用于大量数据的存储 用[ ]表示  5.tuple 元祖 ,不能发生改变()表示  6.dict 字 ...

  2. 动态改变Listview的item背景颜色和item中字体的颜色

    https://blog.csdn.net/qq_14813933/article/details/50417859

  3. Quartz理解与实现

    记录关于Quartz定时调度任务的知识点,知识点主要分为两个部分,第一个部分介绍Quartz,第二部分使用Quartz+Spring来配置使用Quartz的实际操作. (一)Quartz知识点 Qua ...

  4. Android(二)——frida安装教程

    pc端下载:pip install frida 之后就是在手机端或者模拟器下载对应版本的server 在手机或者模拟器上查看cpu版本型号,就根据这个来下载server system/build.pr ...

  5. leetcode-algorithms-22 Generate Parentheses

    leetcode-algorithms-22 Generate Parentheses Given n pairs of parentheses, write a function to genera ...

  6. 安卓——BroadcastReceiver

    package com.example.administrator.myapplication_reciver; import android.content.BroadcastReceiver; i ...

  7. CO15批次确定,标准的太蛋疼了

    1.批次确定的配置,之前有转过,自己也动手配过,可以是可以,但是蛋疼,用户不愿意去弹出的界面选批次...2.因为这边的批次全部是按年月日+流水生成的,所以在批次确定这里就需要按照批次的号来排序选择了 ...

  8. mybatis的update使用选择

    更新后台设置时,会分多个页面更新同一个表中的数据,愿想是尽量减少sql请求数据量并且减少重复代码. 比如博客园的: 假如只有一个用户信息表,这样的话每个页面只更新部分字段. 这种情况下的更新推荐在xm ...

  9. [CodeForces - 614E] E - Necklace

    E - Necklace Ivan wants to make a necklace as a present to his beloved girl. A necklace is a cyclic ...

  10. SecureCRT修改显示行数

    Scrollback buffer应该是保留的行数,初始值500,修改成自己想要的数值保存即可. 参考:http://blog.csdn.net/w410589502/article/details/ ...