Hello Team,
Merge multiple pdf files is single pdf file is demanding requirement in Business Central SaaS Version
We have develop very simple API Utility that can take N number on input Base64 data and combine in single PDF and return sigle Base 64 file for merge PDF.
Key Feature:
- Merge N Numbers of different file in Single PDF
- Merge Standard Attached PDF Documents on Master with Primary Document File
- Send Merge PDF Files on Email
- Save Merge PDF File in Document Attachment
Code Snapshot:
procedure MergeInvoices(var SIH_vRec: Record "Sales Invoice Header")
var
ReportSelect_lRec: Record "Report Selections";
CurrentSIH_lRec: Record "Sales Invoice Header";
Base64Convert: Codeunit "Base64 Convert";
RecRef: RecordRef;
Base64String: Text;
Win_gDlg: Dialog;
Curr_gInt: Integer;
begin
Win_gDlg.Open('Total #1#############\Current #2##############');
Win_gDlg.Update(1, SIH_vRec.Count);
ReportSelect_lRec.Reset();
ReportSelect_lRec.Setrange(Usage, ReportSelect_lRec.Usage::"S.Invoice");
ReportSelect_lRec.FindFirst();
ReportSelect_lRec.Testfield("Report ID");
IF SIH_vRec.FindSet() THen
repeat
Curr_gInt += 1;
Win_gDlg.Update(2, Curr_gInt);
CurrentSIH_lRec.get(SIH_vRec."No.");
CurrentSIH_lRec.SetFilter("No.", SIH_vRec."No.");
RecRef.GetTable(CurrentSIH_lRec);
RecRef.SetView(CurrentSIH_lRec.GetView());
Clear(Rpt_TempBlob);
Clear(Rpt_OutStream);
Clear(Rpt_InStream);
Rpt_TempBlob.CreateOutStream(Rpt_OutStream);
Report.SaveAs(ReportSelect_lRec."Report ID", RecRef.GetFilters(),
ReportFormat::Pdf, Rpt_OutStream, RecRef);
Rpt_TempBlob.CreateInStream(Rpt_InStream);
Base64String := Base64Convert.ToBase64(Rpt_InStream);
//FileBase64 Object
Clear(JObject);
JObject.Add('FileBase64', Base64String);
ObjectJArray.Add(JObject);
until SIH_vRec.NEXT() = 0;
Win_gDlg.Close();
CallPDFMergeAPI();
end;
local procedure CallPDFMergeAPI()
var
Base64Convert: Codeunit "Base64 Convert";
DoubleQuote_Lbl: Label '""""';
lText: Text;
ShipmentResponse: Text;
MergeFileName_lTxt: Text;
gHttpClient: HttpClient;
OrderDetailContent: HttpContent;
lheaders: HttpHeaders;
greqMsg: HttpRequestMessage;
gResponseMsg: HttpResponseMessage;
begin
OrderObject.Add('Files', ObjectJArray);
OrderObject.WriteTo(lText);
// Message(lText);
OrderDetailContent.WriteFrom(lText);
Clear(greqMsg);
Clear(gHttpClient);
greqMsg.SetRequestUri(API Link here....);
lheaders.Clear();
OrderDetailContent.GetHeaders(lheaders);
lheaders.Remove('Content-Type');
lheaders.Add('Content-Type', 'application/json');
OrderDetailContent.GetHeaders(lheaders);
greqMsg.Content(OrderDetailContent);
greqMsg.Method := 'post';
gHttpClient.Send(greqMsg, gResponseMsg);
ShipmentResponse := '';
gResponseMsg.Content().ReadAs(ShipmentResponse);
ShipmentResponse := DelChr(ShipmentResponse, '<>', DoubleQuote_Lbl);
// Message(ShipmentResponse);
Clear(Rpt_TempBlob);
Rpt_TempBlob.CreateOutStream(Rpt_OutStream);
Base64Convert.FromBase64(ShipmentResponse, Rpt_OutStream);
Rpt_TempBlob.CreateInStream(Rpt_InStream);
MergeFileName_lTxt := 'MergeFile_' + FORMAT(CURRENTDATETIME, 0,
'<Day,2>_<Month,2>_<Year4>_<Hours24>_<Minutes,2>_<Seconds,2>') + '_' +
Format(Random(100)) + '.pdf';
DownloadFromStream(Rpt_InStream, '', '', '', MergeFileName_lTxt);
end;
var
Rpt_TempBlob: Codeunit "Temp Blob";
OrderObject: JsonObject;
ObjectJArray: JsonArray;
JObject: JsonObject;
Rpt_InStream: InStream;
Rpt_OutStream: OutStream;
Done...
Very simple and most useful solution.
If you need this utility than contact to Intech Systems
Thank you for reading...
Keep Sharing...Keep Growing...
Combine PDF Documents in Document Sending Profile. As far as I know, this feature was released in the 17.1 version. Appreciating the persistence you put into your blog and detailed information you provide. Read: business central price
ReplyDelete