CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - [BCB] Biblioteka LibHaru
Strona 1 z 1

[BCB] Biblioteka LibHaru

Nowy postNapisane: środa, 15 listopada 2017, 00:33
przez Raffallo
Witam!
Od jakiegoś czasu uczę się samodzielnie programowania w C++, wcześniej pracowałem na C::B, a teraz przerzuciłem się a Borland C++ Builder 6 (tak, wiem, ze stare itp).
Pisze program, który jest mi potrzeby na uczelnię i muszę w nim mieć możliwość zapisywania różnmych danych/zdjęć do pliku PDF. Tu niestety pojawia się problem. Do tego celu wybrałem bibliotekę LibHaru, ale po przeszukaniu różnych wątków, dokumentacji, pobierania różnych wersji i próby kompilacji (pierwszy raz kompilowałem bibliotekę, tzn próbowałem :mrgreen: ) nie udało mi się stworzyc poprawnego prostego programu zapisującego chociażby pustego pdf. Problem polega głównie na kompilacji i linkowaniu tej biblioteki, bo wydaje mi się że z pomocą dokumentacji stworzenie pdf juz jakoś pójdzie. Stąd moja prośba, czy mógłby ktoś mi skompilować bibliotekę pod BCB 6 i wysłać wszystko o co powinienem podlinkować ? Ewentualnie byłbym mega wdzięczny gdyby ktoś zróbił prosty programik robiący pusty pdf, na podstawie dokumentacji: http://libharu.sourceforge.net/how_to_use.html
Znacznie by mi to pomogło!

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: środa, 15 listopada 2017, 11:48
przez polymorphism
Przecież tam na tej stronie są wersje już skompilowane, nawet dla bcc32. Próbowałeś je?

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: środa, 15 listopada 2017, 17:02
przez Raffallo
Jak załączam 3 biblioteki z folderu win32/bcc32 i wszystkiego z include, odpalam program to wyskakuje mi błąd "[C++ Error] Unit1.cpp(5): E2209 Unable to open include file 'hpdf.h'". :mrgreen:
Program pisze tak jak jest w dokumentacji napisane, ale na samym #include "hpdf.h" wywala :/ :mrgreen:
Poza tym w dalszych błędach widać jak by w ogóle nie wykrywało biblioteki, bo nie rozpoznaje funkcji :(

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: środa, 15 listopada 2017, 19:08
przez polymorphism
ale na samym #include "hpdf.h" wywala :/

A gdzie te nagłówki wrzuciłeś?

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: środa, 15 listopada 2017, 19:25
przez Raffallo
na górze pliku cpp

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: środa, 15 listopada 2017, 19:34
przez polymorphism
Nie o to pytałem ;) Chodzi mi o to, do którego katalogu te pliki wrzuciłeś.

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: środa, 15 listopada 2017, 23:15
przez Raffallo
O matko, ale głupotę zrobiłem :P Dzięki za wskazanie problemu :)
Jednakże teraz występują inne problemy :mrgreen:
Taki mam kod w pliku *.cpp:
Kod: Zaznacz cały
#include <vcl.h>
#pragma hdrstop
#include "include/hpdf.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
     : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
HPDF_Doc pdf;
pdf = HPDF_New (NULL, NULL);
    HPDF_Free (pdf);

}
//---------------------------------------------------------------------------


Niestety wyskakują 2 błędy:
Kod: Zaznacz cały
[Linker Error] Unresolved external '_HPDF_New' referenced from C:\USERS\RAFFALLO\DESKTOP\PROBA LIBHARU\UNIT1.OBJ
[Linker Error] Unresolved external '_HPDF_Free' referenced from C:\USERS\RAFFALLO\DESKTOP\PROBA LIBHARU\UNIT1.OBJ


Dodatkowo kod z dokumentacji wyglądał tak:
Kod: Zaznacz cały
#include "hpdf.h"

HPDF_Doc pdf;

pdf = HPDF_New (error_handler, NULL);
if (!pdf) {
    printf ("ERROR: cannot create pdf object.\n");
    return 1;
}

if (setjmp(env)) {
    HPDF_Free (pdf);
    return 1;
}

Ale go przerobiłem tak jak wyżej, bo nie wiem jak działa setjmp(env) i do testów nie zrobiłem żadnego error_handler.

Teraz pytanie, czy te błędy wyskakuję przez błędnie przerobiony kod + ewentualny brak kolejnych linijek kodu z dokumentacji, czy zrobiłem jakaś kolejna inną głupotę?

Edit: dopisanie kolejnych linijek kodu z dokumentacji powoduje jedynie zwiększenie errorów z uresolved itp.

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: czwartek, 16 listopada 2017, 00:57
przez polymorphism
Dodałeś do projektu (opcją Add to project) bibliotekę .lib?

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: czwartek, 16 listopada 2017, 09:54
przez Raffallo
libpng.lib, zlib.lib i hpdf.rc + wrzuciłem hpdf.h

Edit: wrzuciłem plik hpdf.lib i program się odpala, tylko nie tworzy pustego pdf przy kodzie:
KOD cpp:     UKRYJ  
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HPDF_Doc pdf;
pdf = HPDF_New (NULL, NULL);
    HPDF_Free (pdf);
    HPDF_Page page_1;

page_1 = HPDF_AddPage (pdf);
HPDF_Page page_0;

page_0 = HPDF_InsertPage (pdf, page_1);

HPDF_Page_SetSize (page_1, HPDF_PAGE_SIZE_B5, HPDF_PAGE_LANDSCAPE);
HPDF_SaveToFile (pdf, "test.pdf");

}

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: czwartek, 16 listopada 2017, 13:27
przez polymorphism
KOD cpp:     UKRYJ  
pdf = HPDF_New (NULL, NULL);
HPDF_Free (pdf);

Radosna twórczość Cię dopadła, widzę.

To sprawdź:
KOD cpp:     UKRYJ  
        std::string text = "Hello World!";

        HPDF_Doc pdf = HPDF_New (NULL, NULL);
        HPDF_Page page_0 = HPDF_AddPage (pdf);
        HPDF_Page_SetSize (page_0, HPDF_PAGE_SIZE_B5, HPDF_PAGE_LANDSCAPE);
       
        HPDF_Font font = HPDF_GetFont (pdf, "Helvetica", NULL);
        HPDF_Page_SetFontAndSize (page_0, font, 24);
        HPDF_REAL width = HPDF_Page_TextWidth (page_0, text.c_str());

        HPDF_Page_BeginText (page_0);
        HPDF_Page_TextOut (page_0, (HPDF_Page_GetWidth(page_0) - width) / 2, HPDF_Page_GetHeight (page_0) - 50, text.c_str());
        HPDF_Page_EndText (page_0);

        HPDF_SaveToFile (pdf, "test.pdf");
        HPDF_Free (pdf);

U mnie na g++ działa.

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: czwartek, 16 listopada 2017, 18:34
przez Raffallo
rzeczywiście inicjowanie pdf, a później od razu "zamykanie" go w niczym nie pomaga przy tworzeniu pdf :P
Problem (braku moich umiejętności i wiedzy) został rozwiązany i mam nadzieję, ze dalej sobię poradzę ze zdefiniowaniem zawartości pdf, która będzie raczej złożona i zależna od zmiennych :)

Edit: Mądrego to nawet dobrze posłuchać! :) Dzięki wielkie za pomoc i cierpliwość :)

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: poniedziałek, 2 kwietnia 2018, 16:33
przez Arnold_S
Witam!
Zastanawiam się nad skorzystaniem z tej biblioteki w moim programie. Przeczytałem chyba wszystko o tej bibliotece i albo mam kurzą ślepotę albo po prostu ta biblioteka nie posiada metody, która ładuje plik PNG z "resource file". Trochę mi nie na rękę zapisywanie z resourca do pliku w formacie PNG aby go potem wczytywać do programu, w celu zapisania do PDFa.
Czy jest może jakieś w miarę proste rozwiązanie, umożliwiające skorzystanie z tej biblioteki (libharu), w celu pobrania z pliku.RES istniejącego tam obrazka PNG, a następnie zapisanie go na dysku w formacie PDF?

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: wtorek, 3 kwietnia 2018, 11:17
przez polymorphism
Z tego, co widać w dokumentacji, jedyna funkcja, która może czytać grafiki z pamięci to HPDF_LoadRawImageFromMem. Więc w przypadku tej biblioteki innej opcji nie masz - musisz czytać z pliku.

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: wtorek, 3 kwietnia 2018, 23:04
przez Arnold_S
KOD cpp:     UKRYJ  
HPDF_Image HPDF_LoadPngImageFromMem(HPDF_Doc pdf, const HPDF_BYTE *bufor, HPDF_UINT rozmiar_bufora);


HPDF_BYTE *bufor - wskaźnik na bufor, co mam rozumieć przez "bufor"? Czy to nie może być wskaźnik na fragment pamięci, który zajmuje mój plik PDF, w pliku resource.RES?

Re: [BCB] Biblioteka LibHaru

Nowy postNapisane: wtorek, 3 kwietnia 2018, 23:40
przez polymorphism
bufor to wskaźnik na fragment pamięci, w której znajduje się grafika PNG.