Got the requirement to Merge multiple pdf’s into a single pdf in D365FO.
To achieve this need to download the (pdfsharp)3rd party DLL from the below link
https://www.dllme.com/dll/files/pdfsharp#dl.
once DLL is downloaded you have to add at the project reference node.
Write the below code.
using PdfSharp;
internal final class PFDRun
{
public static void main(Args _args)
{
PdfSharp.Pdf.PdfDocument outPutPDFDocument = new PdfSharp.Pdf.PdfDocument();
PdfSharp.Pdf.PdfDocument inputPDFDocument = new PdfSharp.Pdf.PdfDocument();
PdfSharp.Pdf.PdfPages pdfPages;
container con = ['D:\\Test1.pdf','D:\\Test2.pdf', 'D:\\Test3.pdf'];
int i, j, pageCount;
FileName pdfFile;
InteropPermission permission;
str errorMessage;
try
{
permission = new InteropPermission(InteropKind::ClrInterop);
permission.assert();
for (i = 1; i <= 2; i++)
{
// I have written custom class to get the file stream from blob.
System.IO.MemoryStream pdfStream = MyClass::GetStream(i);
// pdfStream.Seek(0); // Ensure the stream is at the beginning
// intialize With stream
inputPDFDocument = PdfSharp.Pdf.IO.PdfReader::Open(pdfStream, PdfSharp.Pdf.IO.PdfDocumentOpenMode::Import);
// intialize With file name(File to be stored in local folder)
// pdfFile = conpeek(con, i);
//inputPDFDocument = PdfSharp.Pdf.IO.PdfReader::Open(pdfFile, PdfSharp.Pdf.IO.PdfDocumentOpenMode::Import);
outputPDFDocument.set_Version(inputPDFDocument.get_Version());
pageCount = inputPDFDocument.get_PageCount();
pdfPages = inputPDFDocument.get_Pages();
if (pageCount >0)
{
if (pageCount == 1)
{
outputPDFDocument.AddPage(pdfPages.get_Item(0));
}
else
{
for (j = 1 ; j <= pageCount; j++)
{
outputPDFDocument.AddPage(pdfPages.get_Item(j-1));
}
}
}
}
System.IO.MemoryStream outPutStream= new System.IO.MemoryStream();
outputPDFDocument.Close();
outputPDFDocument.Save('D:\\Output\\mergedFile.pdf'); // To save in local folder.
outputPDFDocument.Save(outPutStream, false);
file::SendFileToUser(outPutStream, 'mergedFile.pdf'); // To download
CodeAccessPermission::revertAssert();
}
catch(Exception::CLRError)
{
errorMessage = AifUtil::getClrErrorMessage();
CodeAccessPermission::revertAssert();
throw error(errorMessage);
}
}
}

No comments:
Post a Comment