fbpx
Welcome, Guest
Username: Password: Remember me
Hier wird Deutsch gesprochen
  • Page:
  • 1

TOPIC:

PDF erzeugen 22 Dec 2020 20:54 #16993

  • Silvio's Avatar

  • Silvio

  • Topic Author


  • Posts: 3
  • Hallo allerseits,
    um meine VO-Appls auf X# portieren zu können, sehe ich momentan nur noch ein einziges Problem:
    Wie erzeuge ich schnell und elegant PDF-Dokumente? In VO hatte ich ein Tool, dass es schon lange nicht mehr gibt (ISedQuickPDF). Es soll aber angeblich einen Nachfolger geben (QuickPDF von Foxit). Hat jemand Erfahrung mit QuickPDF unter X#, resp. funktioniert das überhaupt? Wenn nein, welche Alternativen gibt es? Ich möchte natürlich, wenn es irgendwie geht, den Aufwand vermeiden, die z.T. komplexen PDFs Zeile für Zeile neu programmieren zu müssen.

    Dankbar für jede erhellende Antwort.

    Silvio

    Please Log in or Create an account to join the conversation.

    PDF erzeugen 22 Dec 2020 22:01 #16994

  • Heinrich's Avatar

  • Heinrich


  • Posts: 27
  • Hallo Silvio

    In XSharp und .NET verwende ich die Library "PdfSharp". Funktioniert einwandfrei und ist im Quellcode verfügbar.
    NuGetPackage

    Die DLL's habe ich in .NET erstellt und verwende diese dann in XSharp und .NET. Sogar .Net Core funktioniert.

    Gruss Heinrich

    Please Log in or Create an account to join the conversation.

    PDF erzeugen 23 Dec 2020 14:45 #16998

  • Karl-Heinz's Avatar

  • Karl-Heinz


  • Posts: 590
  • Hallo Silvio,

    es kommt darauf an ob Du bei Deiner VO -> X# Umstellung die ISedQuickPDF.dll zuerst einmal beibehalten willst oder nicht ? Bestehende ISed Deklarationen kannst Du mehr oder weniger 1:1 übernehmen. Beispiel:
    _DLL FUNCTION iSEDAddImageFromFile ( sFileName AS PSZ, iOptions AS INT ) AS INT PASCAL:iSEDQuickPDF.iSEDAddImageFromFile
    kompiliert ohne Änderung mit X#.

    Gibt die ISed dll allerdings floats zurück würde eine VO Deklaration zum Beispiel ja so aussehen:
    FUNCTION iSEDPageHeight () AS REAL8 PASCAL
    LOCAL r8Value AS REAL8
    __iSEDPageHeight()
    r8Value := _PopI87Real8()
    RETURN r8Value
    
    _DLL FUNCTION __iSEDPageHeight() AS REAL8 PASCAL:iSEDQuickPDF.iSEDPageHeight
    

    mit X# reicht diese Deklaration - was auch eher dem gesunden Menschenverstand entspricht :-)
    _DLL FUNCTION iSEDPageHeight() AS REAL8 PASCAL:iSEDQuickPDF.iSEDPageHeight

    Sowohl mit VO als auch mit X# zeigt mir bei einem DIN A4 Format dieser Aufruf das gleiche Ergebnis an:

    ? iSEDPageHeight()  // ---> 297.00 

    zu Foxit nur so viel: Complety over priced !.

    Gruß
    Karl-Heinz

    Please Log in or Create an account to join the conversation.

    Last edit: by Karl-Heinz.

    PDF erzeugen 23 Dec 2020 16:48 #16999

  • FFF's Avatar

  • FFF


  • Posts: 1068
  • Es kommt natürlich auch drauf an, was genau das erzeugte PDF können muß. Wenn der Output eines "PDF-Druckers" reicht, verwende ich seit Jahren den FreePDFPrinter von Bull. (www.bullzip.com/products/pdf/info.php)
    Regards
    Karl (X# 2.7; Xide 1.27; W8.1/64 German)

    Please Log in or Create an account to join the conversation.

    PDF erzeugen 23 Dec 2020 20:16 #17000

  • Karl-Heinz's Avatar

  • Karl-Heinz


  • Posts: 590
  • FFF wrote: Es kommt natürlich auch drauf an, was genau das erzeugte PDF können muß. Wenn der Output eines "PDF-Druckers" reicht, verwende ich seit Jahren den FreePDFPrinter von Bull. (www.bullzip.com/products/pdf/info.php)

    Du sprichst in Rätseln ?

    Die isedquickpdf.dll ist *kein* PDF-Druckertreiber, sondern eine ganz normale win32 dll die Funktionen beinhaltet mit der man PDFs erstellen kann. In eine Klasse gepackt, sieht der code für das PDF im Anhang so aus:

    FUNCTION Start( ) AS VOID
    LOCAL oPDF AS RptPDFPruef
    LOCAL i AS DWORD 
    LOCAL dVon, dBis AS Date 
    
    	
    
    	oPDF := RptPDFPruef{"D:\Test\prüf.pdf"} 
    	
    	IF oPDF:Init 
    		
    		dVon := ConDate ( 2019 , 1 , 1 ) 
    		dBis := ConDate ( 2019 , 12 , 31 ) 	
    		
    		oPDF:Slot := "Prüfung"
    		
    	
    		oPDF:BeginPrint( PDF_PAPER_A4 ,TRUE )	
    
    		FOR i := 1 UPTO 1000 
            	
    			oPDF:Qout ( PadL ( i , 4 , "0" ) + Chr ( 9 ) + "Street " + NTrim ( i ) + Chr ( 9 ) + ;
    						DToC ( dVon ) + Chr ( 9 ) + DToC ( dBis ) )         	
            	
    		NEXT 	
    
    		oPDF:EndPrint()
    		oPDF:Close()
    
    	ENDIF 
    	
    RETURN

    Natürlich geht damit noch wesentlich mehr, wie Farben, verschiedene Schriftgrößen, Grafiken einbinden etc ..

    Gruß
    Karl-Heinz
    Attachments:

    Please Log in or Create an account to join the conversation.

    PDF erzeugen 19 Jan 2021 10:55 #17223

  • Horst's Avatar

  • Horst


  • Posts: 199
  • Hallo Silvio
    Im Anhang die Klasse MDPdf und eine Beispiel Routine.
    Du musst dann aber schon die Pdfs wieder neu erstellen.
    Die Klasse kannst du ja deine Bedürfnissen anpassen. Ist klein aber fein.

    Gruss
    Horst
     
    Attachments:

    Please Log in or Create an account to join the conversation.

    • Page:
    • 1
    Moderators: wriedmann