Replaced direct LicenseManager dependencies with LicenseManagerFactory in PDFBurner and PDFMerger classes. This change improves license management flexibility and encapsulation, allowing for better handling of license-related logic.
62 lines
2.2 KiB
C#
62 lines
2.2 KiB
C#
using EnvelopeGenerator.ServiceHost.Exceptions;
|
|
using EnvelopeGenerator.ServiceHost.Jobs;
|
|
using GdPicture14;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace EnvelopeGenerator.ServiceHost.Jobs.FinalizeDocument;
|
|
|
|
public class PDFMerger
|
|
{
|
|
private readonly AnnotationManager _manager;
|
|
private readonly LicenseManagerFactory _licenseManagerFactory;
|
|
|
|
private const bool AllowRasterization = true;
|
|
private const bool AllowVectorization = true;
|
|
|
|
private readonly PdfConversionConformance _pdfaConformanceLevel = PdfConversionConformance.PDF_A_1b;
|
|
|
|
public PDFMerger(LicenseManagerFactory licenseManagerFactory, AnnotationManager annotationManager)
|
|
{
|
|
_licenseManagerFactory = licenseManagerFactory;
|
|
_manager = annotationManager;
|
|
}
|
|
|
|
public byte[] MergeDocuments(byte[] document, byte[] report)
|
|
{
|
|
using var documentStream = new MemoryStream(document);
|
|
using var reportStream = new MemoryStream(report);
|
|
using var finalStream = new MemoryStream();
|
|
using var documentPdf = new GdPicturePDF();
|
|
using var reportPdf = new GdPicturePDF();
|
|
|
|
documentPdf.LoadFromStream(documentStream, true);
|
|
var status = documentPdf.GetStat();
|
|
if (status != GdPictureStatus.OK)
|
|
{
|
|
throw new MergeDocumentException($"Document could not be loaded: {status}");
|
|
}
|
|
|
|
reportPdf.LoadFromStream(reportStream, true);
|
|
status = reportPdf.GetStat();
|
|
if (status != GdPictureStatus.OK)
|
|
{
|
|
throw new MergeDocumentException($"Report could not be loaded: {status}");
|
|
}
|
|
|
|
var mergedPdf = documentPdf.Merge2Documents(documentPdf, reportPdf);
|
|
status = mergedPdf.GetStat();
|
|
if (status != GdPictureStatus.OK)
|
|
{
|
|
throw new MergeDocumentException($"Documents could not be merged: {status}");
|
|
}
|
|
|
|
mergedPdf.ConvertToPDFA(finalStream, _pdfaConformanceLevel, AllowVectorization, AllowRasterization);
|
|
status = documentPdf.GetStat();
|
|
if (status != GdPictureStatus.OK)
|
|
{
|
|
throw new MergeDocumentException($"Document could not be converted to PDF/A: {status}");
|
|
}
|
|
|
|
return finalStream.ToArray();
|
|
}
|
|
} |