Libharu

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Vbxler
Beiträge: 125
Registriert: Sa 25. Mai 2013, 07:43
OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1)
CPU-Target: 32Bit

Libharu

Beitrag von Vbxler »

Hallo an Alle!

Hat von Euch jemand erfahrung mit FPC + Libharu (libhpdf.dll)??
(ja, es gibt auch die powerpdf)

Ich kann ein Dokument und eine Seite erzeugen, Linien zeichnen und das Dokument speichern.
Wenn ich aber einen Text schreiben will, kommt es zu einer Ausnahme mit der Fehlernummer 4174.

Code: Alles auswählen

 
var
  myPDF     : HPDF_Doc;
  myFont    : HPDF_Font;
  myPage    : HPDF_Page;
 
  page_title: string = 'Line Demo';
  fname     : string = 'LineDemo.pdf';
  sText     : string = 'Das ist der Text';
  sFontName : PChar =  'Helvetica';
  xSize     : Real = 0.0;
  ySize     : Real = 0.0;
  dwRetval  : DWord;
begin
  myPDF := HPDF_New(@error_handler, nil);
 
  if (myPDF = Nil) then
      Application.MessageBox('Fehler beim erstellen des Pdf-Objekts!','Fehler', MB_OK)
  else
    begin
 
        try
          //default-Font
          myFont := HPDF_GetFont(myPDF, sFontName, nil);
 
          //neue Seite eingfügen
          myPage := HPDF_AddPage(myPDF);
 
          //Rahmen einfügen
          HPDF_Page_SetLineWidth(myPage, 1);
          xSize := HPDF_Page_GetWidth(myPage) - 100;
          ySize := HPDF_Page_GetHeight(myPage) - 100;
          HPDF_Page_Rectangle(myPage, 50, 50, xSize, ySize);
          HPDF_Page_Stroke(myPage);
 
          //HPDF_Page_BeginText(myPage);
          //HPDF_Page_MoveTextPos(myPage, 60, 450);
          //HPDF_Page_ShowText(myPage, PChar(sText));    // <-- hier tritt der Fehler 4174 auf
          //HPDF_Page_EndText(myPage);
 
          HPDF_Page_SetLineWidth (myPage, 0);
          HPDF_Page_MoveTo(myPage, 60, 500);
          HPDF_Page_LineTo(myPage, 300, 500);
          HPDF_Page_Stroke(myPage);
 
 
          //PDF erstellen
          HPDF_SaveToFile (myPDF, PChar(fname));
 
        except
          on e: Exception do
          begin
            Application.MessageBox(PChar(e.message), '',MB_OK);
            HPDF_Free (myPDF);
          end;
        end;
 
        //zusammenräumen
        HPDF_Free (myPDF);
 
    end

Die entsprechende Funktiondeklaration 'HPDF_Page_ShowText' sieht so aus:

Code: Alles auswählen

function HPDF_Page_ShowText (page: HPDF_Page; const text: HPDF_PCHAR): HPDF_STATUS; stdcall external LIBHPDF_DLL;

Ich verwende die libharu_2_0_8_dll_win32, DLL und Deklaration sollten also zusammenpassen.


Kann mir da jemand weiter helfen?


Danke
Vbxler
-------------------------

Vbxler
Beiträge: 125
Registriert: Sa 25. Mai 2013, 07:43
OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1)
CPU-Target: 32Bit

Re: Libharu

Beitrag von Vbxler »

Habe soeben die Lösung gefunden:

Auf : http://libharu.sourceforge.net/documentation.html ist eine Fehlerliste zu finden. Der Fehler war ein ungültiger Font.
Richtig muss der Font so aussehen:

Code: Alles auswählen

//neue Seite eingfügen
    myPage := HPDF_AddPage(myPDF);
 
    //Rahmen einfügen
    HPDF_Page_SetLineWidth(myPage, 1);
    xSize := HPDF_Page_GetWidth(myPage) - 100;
    ySize := HPDF_Page_GetHeight(myPage) - 100;
    HPDF_Page_Rectangle(myPage, 50, 50, xSize, ySize);
    HPDF_Page_Stroke(myPage);
 
    //Font festlegen
    myFont := HPDF_GetFont(myPDF, sFontName,  nil);
    HPDF_Page_SetFontAndSize (myPage, myFont, 10);
 
    //Text ausgeben
    HPDF_Page_BeginText(myPage);
    HPDF_Page_MoveTextPos(myPage, 60, 450);
    HPDF_Page_ShowText(myPage, PChar(sText));
    HPDF_Page_EndText(myPage);
 
    //PDF erstellen
    HPDF_SaveToFile (myPDF, fname);
 
    //zusammenräumen
    HPDF_Free (myPDF)
 


Vielelicht hilf es jemanden.

Danke
Vbxler
-------------------------

Antworten