PDF-Tools - PDFMgt.dll
PDF-Tools in extensies
De "PDF-Tools" zoals we die kenden in de oudere C/SIDE versies is in extensies volledig herschreven geweest.
De oude “exe” is daarbij niet meer gebruikt, in de plaatst maken we gebruik van de dll’s:
- itextSharp.dll
- PDFMgt.dll
In de addins folder van Business Central (onder map Christiaens)
Een aantal oude vereisten zijn niet meer nodig
- C:\temp moet niet bestaan
- Pdf bestanden mogen gewoon opgeslaan worden (opslaan als is niet meer vereist)
- De pdf bestanden hebben geen kop en voettekst vak meer nodig. Briefpapier moet niet meer op de template als achtergrond worden toegepast. Het briefpapier kan nu apart worden ingesteld.
- Parameter tekst file wordt niet meer gebruikt.
Werking
De PDF-Tools rapporten zijn aangepast aan deze nieuwe werking en bevatten 2 nieuwe functies
- AddPDF
- ClosePDF
De “NewPage” functie roept de “AddPDF” functie aan en start het opvullen van een nieuwe pagina. Indien er reeds een vorige pagina actief was, wordt die eerst toegevoegd aan de output file.
Op einde moet de functie ClosePDF worden aangeroepen om het gemaakte bestand te finaliseren.
Om de nodige functies te kunnen aanroepen moet een dotnet referentie worden aangemaakt.
dotnet
{
assembly("PDFMgt")
{
type("PDFMgt.Program"; CFLPDFProgram) { }
}
}
In het rapport dient dan een globale variabele te worden gemaakt verwijzend naar deze dotnet assembly.
PDFProgram: dotnet PDFProgram;
Functies
SetCompanyPaper
Deze functie heeft 1parameter:
- String pCompanyPaperFile: bestandspad van de briefpapier pdf die kan worden toegepast.
SetTemplate
Deze functie heeft 1 parameter:
- String pTemplateFile: bestandspad van de template pdf die wordt gebruikt voor aanmaak van een pagina.
UpdateTemplate
Deze functie heeft 2 parameters:
- String TemplateFile: bestandspad van de template
- Integer NoOfLines: aantal lijnen
Deze functie gaat de template overlopen naar velden en voor alle velden met in de veldnaam een “.” Gevolgd door een getal (bvb artref.0) zal dit de velden kopiëren in evenveel lijnen als de parameter opgeeft.
De lijnen starten bij eeste veld met “.0” en worden naar beneden gekopieerd en naar boven indien het veld een getalwaarde heeft groter dan 0. (bvb langeomschrijving.1 wordt 1 x naar boven gekopieerd als langeomschrijving.0 en verder een aantal keer naar beneden).
SetOutputFile
Deze functie heeft een string als parameter. Deze string is het bestandspad van de output pdf.
StartOutputFile
Deze functie heeft 2 parameters:
- String Creator: zet de creator op de outputfile
- String Author: zet de author op de output file
StartFillPage
Deze functie start het opvullen van een nieuwe pagina.
EndFillPage
Deze functie eindigt het opvullen van een pagina.
Deze functie heeft 2 parameters:
- Boolean AddBackground: bij true zal dit de pdf die is ingesteld via de functie SetCompanyPaper toepassen als achtergrond op de pdf.
- Boolean FormFlatteing: bij true worden alle invulvelden op de pdf vervangen door hun waarde (standaard). Bij false blijven alle velden als invulbare velden bestaan op de pdf.
AddPageToOutputFile
Deze functie gaat de ingevulde pagina gaan toevoegen aan de outputfile.
ClosePDF
Deze functie finaliseert de outputfile tot leesbare pdf.
Veldfuncties
SetField
Deze functie heeft 2 parameters:
- String FieldName: veldnaam van het veld dat je wenst in te vullen
- String FieldValue: de waarde die je wenst in te vullen in het veld
PDFProgram.SetField('TypeDocument', (txtPurchReceipt));
SetFieldColor
Deze functie heeft 4 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- Integer R : red value van RGB-kleur
- Integer G: green value van RGB-kleur
- Integer B: blue value van RGB-kleur
PDFProgram.SetFieldColor('TypeDocument',255,0,0);
SetFieldBackgroundColor
Deze functie heeft 4 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- Integer R : red value van RGB-kleur
- Integer G: green value van RGB-kleur
- Integer B: blue value van RGB-kleur
PDFProgram.SetFieldBackgroundColor('TypeDocument',0,0,255);
SetFieldBold
Deze functie zal de tekst van het veld in vet plaatsen.
Deze functie heeft 1 parameter:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
PDFProgram.SetFieldBold('TypeDocument');
SetFieldItalic
Deze functie zal de tekst van het veld in italic plaatsen.
Deze functie heeft 1 parameter:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
PDFProgram.SetFieldItalic('TypeDocument');
SetFieldBoldItalic
Deze functie zal de tekst van het veld in bodl en italic plaatsen.
Deze functie heeft 1 parameter:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
PDFProgram.SetFieldBoldItalic('TypeDocument');
SetFieldFont
Met deze functie kan je zowel font als kleur als stijl van het veld gaan bepalen.
De functie heeft 4 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- String FontFile: bestandspad van het font dat je wil gebruiken
bvb “c:\windows\fonts\segoeui.ttf” - Integer fontsize: tekstgrootte
- Integer fontstyle:
o 0 = normaal
o 1 = bold
o 2 = italic
o 3 = bold italic
PDFProgram.SetFieldFont('TypeDocument','c:\windows\fonts\segoeui.ttf',12,1);
GetNoOfRowsForImageHeight
Deze functie heeft 2 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- Integer Height: de hoogte van de afbeelding
Deze functie heeft een integer retourwaarde met daarin het aantal lijnen dat je moet overslaan voor invoegen van de afbeelding.
SetFieldImage
Met deze functie is het mogelijk om op de plaats van een veld een afbeelding in te voegen
Deze functie heeft 3 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- String ImageFile : bestandspad van de afbeelding die je wenst in te voegen
- Integer Height: de hoogte van de afbeelding die je wenst in het bestand. Scaling gebeurt proportioneel volgens de hoogte.
Deze functie heeft een integer retourwaarde met daarin het aantal lijnen dat je moet overslaan door invoegen van de afbeelding.
CounterIncrement := PDFProgram.SetFieldImage('Afbeelding.' + FORMAT(intCounter), ToFilePath[ImageCounter], 100);
intCounter := intCounter + CounterIncrement;
SetFieldImageFromBase64
Met deze functie is het mogelijk om op de plaats van een veld een afbeelding in te voegen.
Deze functie heeft 3 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- String ImageBase64 : afbeelding in base64 string
- Integer Height: de hoogte van de afbeelding die je wenst in het bestand. Scaling gebeurt proportioneel volgens de hoogte.
Deze functie heeft een integer retourwaarde met daarin het aantal lijnen dat je moet overslaan door invoegen van de afbeelding.
SetFont
Met deze functie is het mogelijk om in1 beweging het lettertype van alle invulvelden aan te passen.
Deze functie dient aangeroepen te worden alvorens de functie “UpdateTemplate” wordt uitgevoerd.
Deze functie heeft 3 parameters:
- String FontFile: bestandspad van het font dat je wil gebruiken bvb “c:\windows\fonts\segoeui.ttf”
- Integer fontsize: tekstgrootte
- Integer fontstyle:
o 0 = normaal
o 1 = bold
o 2 = italic
o 3 = bold italic
PDFProgram.SetCompanyPaper(txtPdfFolder + bgDocument."CFL File");
PDFProgram.SetTemplate(txtPdfFolder + CFLDocument."CFL File");
PDFProgram.SetFont('C:\Windows\Fonts\segoeui.ttf', 12, 0);
PDFProgram.UpdateTemplate(txtPdfFolder + CFLDocument."CFL File", CFLDocument."CFL Lines per Page");
PDFProgram.SetOutputFile(txtPDF); PDFProgram.StartOutputFile(CFLBoCountDynamicsMgt.GetExtensionName(), CompanyName);
PDFProgram.StartFillPage();
DeleteField
Met deze functie is het mogelijk om een invulveld te verwijderen.
Deze functie heeft 1 parameter:
- String FieldName: veldnaam van het veld dat je wenst te verwijderen.
Voorbeeld
Voor een correcte afhandeling dienen de verschillende functies in de juiste volgorde te worden aangeroepen.
Bij starten van een pagina:
PDFProgram := PDFProgram.Program();
PDFProgram.SetTemplate(txtPdfFolder + CFLDocument."CFL File"); //instellen van de template
PDFProgram.SetCompanyPaper(txtPdfFolder + bgDocument."CFL File"); //instellen van het briefpapier
PDFProgram.UpdateTemplate(txtPdfFolder + CFLDocument."CFL File", CFLDocument."CFL Lines per Page"); //template aanpassen voor meerdere regels
PDFProgram.SetOutputFile(OutputFile); //instellen van output file
PDFProgram.StartOutputFile(CFLBoCountDynamicsMgt.GetExtensionName(), CompanyName); //aanmaak van de outputfile
PDFProgram.StartFillPage(); //start opvullen van de velden
Op einde van een pagina:
PDFProgram.EndFillPage(true, true); //afsluiten van de pagina, met eventueel toepassen van het briefpapier
PDFProgram.AddPageToOutputFile(); //de gemaakte pagina toevoegen aan het output bestand
Op einde van het document:
PDFProgram.CloseOutputFile(); //output bestand sluiten.
