LibHaru
Тип | бібліотека програм |
---|---|
Розробник | Takeshi Kannod |
Стабільний випуск | 2.2.1 (2008 ) |
Версії | 2.4.4 (18 вересня 2023)[1] |
Нестабільний випуск | 2.3.0 RC2 |
Операційна система | крос-платформова |
Мова програмування | ANSI C |
Ліцензія | Ліцензія zlib/libpng |
Репозиторій | github.com/libharu/libharu |
Вебсайт | libharu.org |
LibHaru — це вільна кросплатформна відкрита бібліотека для створення PDF файлів. На даний момент вона не підтримує читання і редагування існуючих PDF файлів.[2][3][4]
Бібліотека дозволяє:
- Генерувати PDF файли з текстом, векторною і растровою графікою.
- Використовувати закладки, анотації.
- Стискати документ з використанням алгоритму Deflate.
- Вбудовувати рисунки у форматах PNG і JPEG.
- Вбудовувати шрифти Type1 і TrueType.
- Створювати зашифровані PDF файли використовуючи потоковий шифр RC4 з довжиною ключа від 40 до 128 біт.
- Використовувати різні набори символів (ISO8859-1~16, MS CP1250~8, KOI8-R).
- Застосовувати китайські, корейські і японські шрифти (CID) і набори символів.
Створення PDF файлів за допомогою бібліотеки libHaru не потребує знання складностей внутрішньої структури PDF файлів.
LibHaru написана на ANSI C і повинна компілюватись будь-яким компілятором, сумісним з ANSI C.
Вона тестувалась на наступних платформах:
- Cygwin + GCC (Microsoft Windows).
- Cygwin + MinGW (Microsoft Windows).
- MSYS + MinGW (Microsoft Windows).
- Microsoft VC++ (Microsoft Windows).
- Borland C++ (Microsoft Windows).
- GCC (Linux, FreeBSD, NetBSD, Solaris...).
Може використовуватись у вигляді статичної (.a, .lib) або динамічної (.so, .dll) бібліотек. У вигляді статичної бібліотеки її можна використовувати лише в мовах програмування C і C++. У вигляді динамічної бібліотеки може бути використана в будь-якій мові програмування, яка їх підтримує.
Біндінги бібліотеки доступні для таких мов програмування:
- C++[5]
- C#
- Delphi
- Free Basic
- Free Pascal
- Python
- Ruby
- Visual Basic
- PHP[6]
- Perl[7]
- Lua[8]
- JavaScript[9]
libHary використовує бібліотеку zlib[10] для стиснення даних і libpng[11] для вбудовування рисунків у форматі PNG.
Приклад використання в мові програмування C з обробником помилок:
#include <stdio.h>
#include <setjmp.h>
#include <hpdf.h>
jmp_buf env;
#ifdef HPDF_DLL
void __stdcall
#else
void
#endif
error_handler(HPDF_STATUS error_no, HPDF_STATUS detail_no, void *user_data)
{
/* виклик longjmp() у випадку виникнення помилки */
printf("ERROR: error_no=%04X, detail_no=%d\n", (unsigned int)error_no, (int)detail_no);
longjmp(env, 1);
}
int main()
{
/* встановлюємо обробник помилок під час створення об'єкта PDF_Doc */
HPDF_Doc pdf;
pdf = HPDF_New(error_handler, NULL);
if (!pdf) {
printf("ERROR: cannot create PdfDoc object\n");
return 1;
}
if (setjmp(env)) {
HPDF_Free(pdf);
return 1;
}
/* робота з документом
* (перевіряти коди повернень функцій не потрібно)
*/
/* збереження документа у файл */
HPDF_SaveToFile(pdf, fname);
/* очищення */
HPDF_Free(pdf);
return 0;
}
#include <cstdio>
#include <stdexcept>
#include <iostream>
#include <hpdf.h>
#ifdef HPDF_DLL
void __stdcall
#else
void
#endif
error_handler(HPDF_STATUS error_no, HPDF_STATUS detail_no, void *user_data)
{
// генерування виключення у випадку виникнення помилки
char err_msg[50];
sprintf(err_msg, "ERROR: error_no=%04X, detail_no=%d", (unsigned int)error_no, (int)detail_no);
throw std::runtime_error(err_msg);
}
int main()
{
HPDF_Doc pdf;
pdf = HPDF_New(error_handler, NULL);
if (!pdf) {
std::cout << "ERROR: cannot create PdfDoc object" << std::endl;
return 1;
}
try {
const char* message = "Hello, world!";
// завантаження стандартного шрифту Times Roman з набором символів за замовчуванням
HPDF_Font font = HPDF_GetFont(pdf, "Times-Roman", NULL);
// додавання нової сторінки до документа і задання для неї шрифту
HPDF_Page page = HPDF_AddPage(pdf);
HPDF_Page_SetFontAndSize(page, font, 36);
// отримання ширини і висоти сторінки та довжини повідомлення
const HPDF_REAL page_width = HPDF_Page_GetWidth(page);
const HPDF_REAL page_height = HPDF_Page_GetHeight(page);
const HPDF_REAL message_width = HPDF_Page_TextWidth(page, message);
// вивід повідомлення в центрі сторінки
HPDF_Page_BeginText(page);
HPDF_Page_TextOut(page, (page_width-message_width)/2, page_height/2, message);
HPDF_Page_EndText(page);
// збереження результату у файл
HPDF_SaveToFile(pdf, "helloworld.pdf");
} catch (std::exception& e) {
std::cout << e.what() << std::endl;
HPDF_Free(pdf);
return 1;
}
// очищення
HPDF_Free(pdf);
return 0;
}
Підтримка кирилиці стандартними шрифтами PDF дуже обмежена. Для повноцінної її підтримки потрібно використовувати зовнішні шрифти.
const char* font_path = "c:\\windows\\fonts\\times.ttf";
const char* font_name = HPDF_LoadTTFontFromFile(pdf, font_path, HPDF_TRUE);
HPDF_Font font = HPDF_GetFont(pdf, font_name, "CP1251");
HPDF_Page_SetFontAndSize(page, font, 10);
- ↑ https://github.com/libharu/libharu/releases/tag/v2.4.4
- ↑ Сайт libHaru [Архівовано 23 червня 2015 у Wayback Machine.](англ.)
- ↑ libHaru на SourceForge.net [Архівовано 10 серпня 2015 у Wayback Machine.](англ.)
- ↑ Open source PDF library for C/C++ application? [Архівовано 26 червня 2015 у Wayback Machine.](англ.)
- ↑ PocoPDF [Архівовано 26 червня 2015 у Wayback Machine.](англ.)
- ↑ Біндінг для PHP [Архівовано 7 жовтня 2008 у Wayback Machine.](англ.)
- ↑ Біндінг для PERL [Архівовано 24 червня 2015 у Wayback Machine.](англ.)
- ↑ LuaHPDF - біндінг для Lua [Архівовано 26 червня 2015 у Wayback Machine.](англ.)
- ↑ hpdf.js [Архівовано 25 червня 2014 у Wayback Machine.](англ.)
- ↑ zlib [Архівовано 17 вересня 2020 у Wayback Machine.](англ.)
- ↑ libpng [Архівовано 3 липня 2015 у Wayback Machine.](англ.)
На цю статтю не посилаються інші статті Вікіпедії. Будь ласка розставте посилання відповідно до прийнятих рекомендацій. |