Hello,
We are using Spire.PDF to modify pdf documents in our 32 bits .NET application and periodically, on some environment, we encounter System.OutOfMemoryException. We are using .NET framework 4.7.2 and Spire.pdf 9.2.6. We currently are not planning to migrate our application to 64 bits. The code throwing the exception is as below :
using var stream = currentAssembly.GetManifestResourceStream(sourcePdf);
using var doc = new PdfDocument();
doc.LoadFromStream(stream);
if (doc.Form is not PdfFormWidget formWidget) throw new Exception($"Cerfa {Resources.AATACCUSEDEPOT} illisible");
var fields = formWidget.FieldsWidget;
((PdfTextBoxFieldWidget)fields["REFERENCE"]).Text = avisArretTravailDepot.AvisArretTravail.Identification;
((PdfTextBoxFieldWidget)fields["CATEGORIE_TYPE"]).Text =
(avisArretTravailDepot.AvisArretTravail.Nature switch
{
"TC" => "Temps Complet",
"TCP" => "Temps Complet suivi d'une reprise à Temps Partiel",
_ => "Temps Partiel"
}) + " - " +
(avisArretTravailDepot.AvisArretTravail.Type == "I" ? "Initial" : "Prolongation");
((PdfTextBoxFieldWidget)fields["DATE_RECEPTION"]).Text = avisArretTravailDepot.AvisArretTravail.DateDepot.ToString("g", CultureInfo.CurrentCulture);
((PdfTextBoxFieldWidget)fields["NIR"]).Text = avisArretTravailDepot.Beneficiaire.Nir;
((PdfTextBoxFieldWidget)fields["NOM_PRENOM_ASSURE"]).Text = avisArretTravailDepot.Beneficiaire.NomBeneficiaire + " " + avisArretTravailDepot.Beneficiaire.PrenomBeneficiaire;
((PdfTextBoxFieldWidget)fields["DATE_ARRET"]).Text =
avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.DateDeb.ToString("d") + " " +
avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.DateFin.ToString("d",
CultureInfo.CurrentCulture);
((PdfTextBoxFieldWidget)fields["CLE_NIR"]).Text = aatiViewModel.Beneficaire.CleNumSecu;
if (avisArretTravailTeletrans.Beneficiaire.AdresseVisite != null)
{
((PdfTextBoxFieldWidget)fields["ADRESSE_ASSURE"]).Text = avisArretTravailTeletrans.Beneficiaire.AdresseVisite.NomVoie;
((PdfTextBoxFieldWidget)fields["CP_ASSURE"]).Text = avisArretTravailTeletrans.Beneficiaire.AdresseVisite.CodePostal;
((PdfTextBoxFieldWidget)fields["VILLE_ASSURE"]).Text = avisArretTravailTeletrans.Beneficiaire.AdresseVisite.Localite;
var complementBatCode = avisArretTravailTeletrans.Beneficiaire.AdresseVisite.Complement.Split('|');
var batiment = complementBatCode.Length > 0 ? complementBatCode[0] : string.Empty;
var code = complementBatCode.Length > 1 ? complementBatCode[1] : string.Empty;
((PdfTextBoxFieldWidget)fields["BATIMENT_ASSURE"]).Text = batiment;
((PdfTextBoxFieldWidget)fields["CODE_ACCES_ASSURE"]).Text = code;
var escalierEtageAppt = avisArretTravailTeletrans.Beneficiaire.AdresseVisite.PointRemise.Split('|');
var escalier = escalierEtageAppt.Length > 0 ? escalierEtageAppt[0] : string.Empty;
var etage = escalierEtageAppt.Length > 1 ? escalierEtageAppt[1] : string.Empty;
var appt = escalierEtageAppt.Length > 2 ? escalierEtageAppt[2] : string.Empty;
((PdfTextBoxFieldWidget)fields["ESCALIER_ASSURE"]).Text = escalier;
((PdfTextBoxFieldWidget)fields["ETAGE_ASSURE"]).Text = etage;
((PdfTextBoxFieldWidget)fields["APPART_ASSURE"]).Text = appt;
}
if (avisArretTravailTeletrans.Beneficiaire.Telephone != null)
((PdfTextBoxFieldWidget)fields["TEL_ASSURE"]).Text = avisArretTravailTeletrans.Beneficiaire.Telephone.Numero;
var field = fields["TYPE"];
if (field is not PdfCheckBoxWidgetFieldWidget checkbox) throw new Exception($"Field TYPE non présent ou invalide dans le fichier PDF source {Resources.AATACCUSEDEPOT}");
var widgetItems = checkbox.WidgetItems;
if (avisArretTravailDepot.AvisArretTravail.Type == "I")
{
widgetItems[0].Checked = true;
widgetItems[3].Checked = true;
}
else
{
widgetItems[1].Checked = true;
widgetItems[2].Checked = true;
}
var accident = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Circonstance[0];
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["ACCIDENT_CAUSE_TIERS"]).WidgetItems;
if (accident.Nature.Value == "O")
{
widgetItems[0].Checked = true;
widgetItems[2].Checked = true;
((PdfTextBoxFieldWidget)fields["DATE_ACCIDENT_CAUSE_TIERS"]).Text = accident.Date.ToString("d", CultureInfo.CurrentCulture);
}
else
{
widgetItems[1].Checked = true;
widgetItems[3].Checked = true;
}
var cure = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Circonstance[1];
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["CURE_THERMALE"]).WidgetItems;
if (cure.Nature.Value == "O")
{
widgetItems[0].Checked = true;
}
else
{
widgetItems[1].Checked = true;
}
var pensionneGuerre = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Circonstance[2];
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["PENSIONNE_GUERRE"]).WidgetItems;
if (pensionneGuerre.Nature.Value == "O")
{
widgetItems[0].Checked = true;
}
else
{
widgetItems[1].Checked = true;
}
if (avisArretTravailTeletrans.Prescripteur.Cadre != null)
{
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["TYPE_MEDECIN"]).WidgetItems;
switch (avisArretTravailTeletrans.Prescripteur.Cadre.Code)
{
case "MR":
widgetItems[0].Checked = true;
break;
case "MS":
widgetItems[1].Checked = true;
break;
case "MH":
widgetItems[2].Checked = true;
break;
case "8":
widgetItems[3].Checked = true;
((PdfTextBoxFieldWidget)fields["MOTIF_TYPE_MEDECIN_AUTRE"]).Text = avisArretTravailTeletrans.Prescripteur.Cadre.Libelle ?? string.Empty;
break;
}
}
if (avisArretTravailTeletrans.Employeur != null)
{
((PdfTextBoxFieldWidget)fields["NOM_EMPLOYEUR"]).Text = avisArretTravailTeletrans.Employeur.RaisonSociale ?? string.Empty;
((PdfTextBoxFieldWidget)fields["ADRESSE_EMPLOYEUR"]).Text = avisArretTravailTeletrans.Employeur.Adresse.Ligne ?? string.Empty;
((PdfTextBoxFieldWidget)fields["TEL_EMPLOYEUR"]).Text = avisArretTravailTeletrans.Employeur.Telephone.Numero ?? string.Empty;
((PdfTextBoxFieldWidget)fields["EMAIL_EMPLOYEUR"]).Text = avisArretTravailTeletrans.Employeur.Email.Numero ?? string.Empty;
}
((PdfTextBoxFieldWidget)fields["NOM_PRENOM_BENEFICIAIRE"]).Text = avisArretTravailTeletrans.Beneficiaire.NomFamille + " " + avisArretTravailTeletrans.Beneficiaire.Prenom;
((PdfTextBoxFieldWidget)fields["DATE_FIN_ARRET_LETTRES"]).Text = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.DateFin.ToString("D", CultureInfo.CurrentCulture);
((PdfTextBoxFieldWidget)fields["DATE_FIN_ARRET"]).Text = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.DateFin.ToString("d", CultureInfo.CurrentCulture);
var aldTc = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Maladie.FirstOrDefault(c => c.Classe.Q == "A");
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["RAPPORT_ALD"]).WidgetItems;
if (aldTc?.Classe.Value == "O")
{
widgetItems[0].Checked = true;
}
else
{
widgetItems[1].Checked = true;
}
var grossesse = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Maladie.FirstOrDefault(c => c.Classe.Q == "G");
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["RAPPORT_GROSSESSE"]).WidgetItems;
if (grossesse?.Classe.Value == "O")
{
widgetItems[1].Checked = true;
widgetItems[3].Checked = true;
}
else
{
widgetItems[0].Checked = true;
widgetItems[2].Checked = true;
}
var atmpTc = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Maladie.FirstOrDefault(c => c.Classe.Q == "ATMP");
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["RAPPORT_ATMP"]).WidgetItems;
if (atmpTc?.Classe.Value == "O")
{
widgetItems[1].Checked = true;
widgetItems[3].Checked = true;
((PdfTextBoxFieldWidget)fields["DATE_ATMP"]).Text = atmpTc.Date.ToString("d", CultureInfo.CurrentCulture);
}
else
{
widgetItems[0].Checked = true;
widgetItems[2].Checked = true;
}
var deces = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Maladie.FirstOrDefault(c => c.Classe.Q == "DE");
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["RAPPORT_DECES"]).WidgetItems;
if (deces?.Classe.Value == "O")
{
widgetItems[1].Checked = true;
((PdfTextBoxFieldWidget)fields["DATE_DECES"]).Text = deces.Date.ToString("d", CultureInfo.CurrentCulture);
}
else
{
widgetItems[0].Checked = true;
}
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["SORTIES_STANDARD"]).WidgetItems;
if (avisArretTravailTeletrans.Beneficiaire.SortieStandard != null)
{
widgetItems[0].Checked = true;
widgetItems[2].Checked = true;
((PdfTextBoxFieldWidget)fields["DATE_DEBUT_SORTIES_STANDARD"]).Text = avisArretTravailTeletrans.Beneficiaire.SortieStandard.Date.ToString("d", CultureInfo.CurrentCulture);
}
else
{
widgetItems[1].Checked = true;
widgetItems[3].Checked = true;
}
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["SORTIES_EXCEPTION"]).WidgetItems;
if (avisArretTravailTeletrans.Beneficiaire.SortieException != null)
{
widgetItems[1].Checked = true;
widgetItems[3].Checked = true;
((PdfTextBoxFieldWidget)fields["DATE_DEBUT_SORTIES_EXCEPTION"]).Text = avisArretTravailTeletrans.Beneficiaire.SortieException.Date.ToString("d", CultureInfo.CurrentCulture);
}
else
{
widgetItems[0].Checked = true;
widgetItems[2].Checked = true;
}
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["ACTIVITES_AUTORISEES"]).WidgetItems;
if (avisArretTravailTeletrans.Beneficiaire.SiActiviteAutorisee != null)
{
widgetItems[0].Checked = true;
widgetItems[2].Checked = true;
((PdfTextBoxFieldWidget)fields["DATE_ACTIVITES_AUTORISEES"]).Text = avisArretTravailTeletrans.Beneficiaire.SiActiviteAutorisee.Date.ToString("d", CultureInfo.CurrentCulture);
}
else
{
widgetItems[1].Checked = true;
widgetItems[3].Checked = true;
}
var aldTp = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Maladie.FirstOrDefault(c => c.Classe.Q == "P");
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["RAPPORT_ALD_PARTIEL"]).WidgetItems;
if (aldTp?.Classe.Value == "O")
{
widgetItems[1].Checked = true;
}
else
{
widgetItems[0].Checked = true;
}
var atmpTp = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Maladie.FirstOrDefault(c => c.Classe.Q == "ATMPT");
widgetItems = ((PdfCheckBoxWidgetFieldWidget)fields["RAPPORT_ATMP_PARTIEL"]).WidgetItems;
if (atmpTp?.Classe.Value == "O")
{
widgetItems[1].Checked = true;
widgetItems[3].Checked = true;
((PdfTextBoxFieldWidget)fields["DATE_ATMP_PARTIEL"]).Text = atmpTp.Date.ToString("d", CultureInfo.CurrentCulture);
}
else
{
widgetItems[0].Checked = true;
widgetItems[2].Checked = true;
}
if (!string.IsNullOrEmpty(avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Argument[0].Codification))
{
((PdfTextBoxFieldWidget)fields["CODE_MOTIF_MEDICAL"]).Text = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Argument[0].Codification;
}
((PdfTextBoxFieldWidget)fields["LIBELLE_MOTIF_MEDICAL"]).Text =
avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Argument[0].Libelle ?? avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Argument[0].Info ?? string.Empty;
((PdfTextBoxFieldWidget)fields["CODE_IDENTIFICATION_PRATICIEN"]).Text = avisArretTravailTeletrans.Prescripteur.Identite[0].Value;
((PdfTextBoxFieldWidget)fields["LIBELLE_IDENTIFICATION_PRATICIEN"]).Text = avisArretTravailTeletrans.Prescripteur.Nom + " " + avisArretTravailTeletrans.Prescripteur.Prenom;
if (avisArretTravailTeletrans.Prescripteur.Structure != null)
{
((PdfTextBoxFieldWidget)fields["CODE_IDENTIFICATION_STRUCTURE"]).Text = avisArretTravailTeletrans.Prescripteur.Structure.Identite[0].Value;
((PdfTextBoxFieldWidget)fields["LIBELLE_IDENTIFICATION_STRUCTURE"]).Text =
avisArretTravailTeletrans.Prescripteur.Structure.RaisonSociale + Environment.NewLine +
avisArretTravailTeletrans.Prescripteur.Structure.Adresse.Ligne;
}
((PdfTextBoxFieldWidget)fields["DATE_SIGNATURE"]).Text = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.DateDeb.Date.ToString("d", CultureInfo.CurrentCulture);
((PdfTextBoxFieldWidget)fields["DATE_TRANSMISSION"]).Text = avisArretTravailDepot.AvisArretTravail.DateDepot.ToString("d", CultureInfo.CurrentCulture);
if (avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.RepriseActivite != null)
{
((PdfTextBoxFieldWidget)fields["DATE_DEBUT_TEMPS_PARTIEL"]).Text = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.RepriseActivite.Date.ToString("d", CultureInfo.CurrentCulture);
((PdfTextBoxFieldWidget)fields["DATE_FIN_TEMPS_PARTIEL"]).Text = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.RepriseActivite.DateFin.ToString("d", CultureInfo.CurrentCulture);
}
else if (avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.Nature == "TP")
{
((PdfTextBoxFieldWidget)fields["DATE_DEBUT_TEMPS_PARTIEL"]).Text = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.DateDeb.Date.ToString("d", CultureInfo.CurrentCulture);
((PdfTextBoxFieldWidget)fields["DATE_FIN_TEMPS_PARTIEL"]).Text = avisArretTravailTeletrans.Beneficiaire.ArretDeTravail.DateFin.Date.ToString("d", CultureInfo.CurrentCulture);
((PdfTextBoxFieldWidget)fields["DATE_FIN_ARRET_LETTRES"]).Text = string.Empty;
((PdfTextBoxFieldWidget)fields["DATE_FIN_ARRET"]).Text = string.Empty;
}
doc.Form.ReadOnly = true;
doc.SaveToFile(fileName);
Could you provide us with input to resolve this issue ?
Thanks in advance.