You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
5.7 KiB
214 lines
5.7 KiB
/*
|
|
* << Haru Free PDF Library 2.0.0 >> -- font_demo.cpp
|
|
*
|
|
* Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
|
|
*
|
|
* Permission to use, copy, modify, distribute and sell this software
|
|
* and its documentation for any purpose is hereby granted without fee,
|
|
* provided that the above copyright notice appear in all copies and
|
|
* that both that copyright notice and this permission notice appear
|
|
* in supporting documentation.
|
|
* It is provided "as is" without express or implied warranty.
|
|
*
|
|
*/
|
|
|
|
#include <iconv.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include <string>
|
|
// #include <exception>
|
|
#include "hpdf.h"
|
|
|
|
#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);
|
|
}
|
|
|
|
// const char *font_list[] = {"SimHei", NULL};
|
|
|
|
// int main(int argc, char **argv) {
|
|
// const char *page_title = "Font Demo";
|
|
// HPDF_Doc pdf;
|
|
// char fname[256];
|
|
// HPDF_Page page;
|
|
// HPDF_Font def_font;
|
|
// HPDF_REAL tw;
|
|
// HPDF_REAL height;
|
|
// HPDF_REAL width;
|
|
// HPDF_UINT i;
|
|
|
|
// strcpy(fname, argv[0]);
|
|
// strcat(fname, ".pdf");
|
|
|
|
// pdf = HPDF_New(error_handler, NULL);
|
|
// if (!pdf) {
|
|
// printf("error: cannot create PdfDoc object\n");
|
|
// return 1;
|
|
// }
|
|
|
|
// HPDF_STATUS statu = HPDF_UseCNSFonts(pdf);
|
|
// printf("HPDF_UseCNSFonts: %x\n", statu);
|
|
// statu = HPDF_UseCNTFonts(pdf);
|
|
// printf("HPDF_UseCNTFonts: %x\n", statu);
|
|
// statu = HPDF_UseCNTEncodings(pdf);
|
|
// printf("HPDF_UseCNTEncodings: %x\n", statu);
|
|
// statu = HPDF_UseCNSEncodings(pdf);
|
|
// printf("HPDF_UseCNSEncodings: %x\n", statu);
|
|
|
|
// try {
|
|
// /* Add a new page object. */
|
|
// page = HPDF_AddPage(pdf);
|
|
|
|
// height = HPDF_Page_GetHeight(page);
|
|
// width = HPDF_Page_GetWidth(page);
|
|
|
|
// /* Print the lines of the page. */
|
|
// HPDF_Page_SetLineWidth(page, 1);
|
|
// HPDF_Page_Rectangle(page, 50, 50, width - 100, height - 110);
|
|
// HPDF_Page_Stroke(page);
|
|
|
|
// /* Print the title of the page (with positioning center). */
|
|
// def_font = HPDF_GetFont(pdf, "Helvetica", NULL);
|
|
// HPDF_Page_SetFontAndSize(page, def_font, 24);
|
|
|
|
// tw = HPDF_Page_TextWidth(page, page_title);
|
|
// HPDF_Page_BeginText(page);
|
|
// HPDF_Page_MoveTextPos(page, (width - tw) / 2, height - 50);
|
|
// HPDF_Page_ShowText(page, page_title);
|
|
// HPDF_Page_EndText(page);
|
|
|
|
// /* output subtitle. */
|
|
// HPDF_Page_BeginText(page);
|
|
// HPDF_Page_MoveTextPos(page, 60, height - 80);
|
|
// HPDF_Page_SetFontAndSize(page, def_font, 16);
|
|
// HPDF_Page_ShowText(page, "<Standerd Type1 fonts samples>");
|
|
// HPDF_Page_EndText(page);
|
|
|
|
// HPDF_Page_BeginText(page);
|
|
// HPDF_Page_MoveTextPos(page, 60, height - 105);
|
|
|
|
// i = 0;
|
|
// while (font_list[i]) {
|
|
// const char *samp_text = "abcd";
|
|
// HPDF_Font font = HPDF_GetFont(pdf, font_list[i], NULL);
|
|
// if (!font) {
|
|
// printf("error: cannot get %s font\n", font_list[i]);
|
|
// return 1;
|
|
// }
|
|
|
|
// /* print a label of text */
|
|
// HPDF_Page_SetFontAndSize(page, def_font, 9);
|
|
// HPDF_Page_ShowText(page, font_list[i]);
|
|
// HPDF_Page_MoveTextPos(page, 0, -18);
|
|
|
|
// /* print a sample text. */
|
|
// HPDF_Page_SetFontAndSize(page, font, 20);
|
|
// HPDF_Page_ShowText(page, samp_text);
|
|
// HPDF_Page_MoveTextPos(page, 0, -20);
|
|
|
|
// i++;
|
|
// }
|
|
|
|
// HPDF_Page_EndText(page);
|
|
|
|
// HPDF_SaveToFile(pdf, fname);
|
|
|
|
// } catch (...) {
|
|
// HPDF_Free(pdf);
|
|
// return 1;
|
|
// }
|
|
|
|
// /* clean up */
|
|
// HPDF_Free(pdf);
|
|
|
|
// return 0;
|
|
// }
|
|
|
|
using namespace std;
|
|
|
|
string utf8_to_gb2312(const std::string& utf8_str) {
|
|
// 打开转换描述符
|
|
iconv_t cd = iconv_open("GB2312", "UTF-8");
|
|
if (cd == (iconv_t)-1) {
|
|
perror("iconv_open failed");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
// 输入字符串
|
|
const char* in_str = utf8_str.c_str();
|
|
size_t in_size = utf8_str.size();
|
|
|
|
// 输出缓冲区
|
|
size_t out_size = in_size * 2; // 假设输出的字节数不会超过输入的两倍
|
|
char* out_buf = new char[out_size];
|
|
char* out_str = out_buf;
|
|
|
|
// 进行转换
|
|
if (iconv(cd, const_cast<char**>(&in_str), &in_size, &out_str, &out_size) == (size_t)-1) {
|
|
perror("iconv failed");
|
|
iconv_close(cd);
|
|
delete[] out_buf;
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
// 关闭转换描述符
|
|
iconv_close(cd);
|
|
|
|
// 获取转换后的字符串
|
|
std::string gb2312_str(out_buf, out_str - out_buf);
|
|
// 释放内存
|
|
delete[] out_buf;
|
|
return gb2312_str;
|
|
}
|
|
|
|
int main() {
|
|
HPDF_Doc pdf;
|
|
HPDF_Font font;
|
|
HPDF_Page szPage[10115];
|
|
HPDF_REAL tw;
|
|
|
|
string strPdfContent = utf8_to_gb2312("这是一个测试,支持中文");
|
|
|
|
string strPdfName = "XXX.pdf";
|
|
|
|
pdf = HPDF_New(error_handler, NULL);
|
|
|
|
HPDF_UseCNSFonts(pdf);
|
|
HPDF_UseCNTFonts(pdf);
|
|
HPDF_UseCNTEncodings(pdf);
|
|
HPDF_UseCNSEncodings(pdf);
|
|
|
|
// support Chinese Song (SimSun)and Chinese black (SimHei)
|
|
font = HPDF_GetFont(pdf, "SimSun", "GBK-EUC-H");
|
|
if (!font) {
|
|
printf("error: cannot get font\n");
|
|
return 1;
|
|
}
|
|
|
|
for (int i = 0; i < 10115; ++i) {
|
|
szPage[i] = HPDF_AddPage(pdf);
|
|
|
|
HPDF_Page_SetSize(szPage[i], HPDF_PAGE_SIZE_LETTER, HPDF_PAGE_PORTRAIT);
|
|
|
|
HPDF_Page_BeginText(szPage[i]);
|
|
|
|
HPDF_Page_SetFontAndSize(szPage[i], font, 20);
|
|
|
|
tw = HPDF_Page_TextWidth(szPage[i], strPdfContent.c_str());
|
|
|
|
HPDF_Page_MoveTextPos(szPage[i], (HPDF_Page_GetWidth(szPage[i]) - tw) / 2, (HPDF_Page_GetHeight(szPage[i]) - 20) / 2);
|
|
|
|
HPDF_Page_ShowText(szPage[i], strPdfContent.c_str());
|
|
|
|
HPDF_Page_EndText(szPage[i]);
|
|
}
|
|
|
|
HPDF_SaveToFile(pdf, strPdfName.c_str());
|
|
HPDF_Free(pdf);
|
|
}
|