Spire.PDF is a professional PDF library applied to creating, writing, editing, handling and reading PDF files without any external dependencies. Get free and professional technical support for Spire.PDF for .NET, Java, Android, C++, Python.

Thu May 25, 2023 9:27 am

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.

RaphaelBCgm
 
Posts: 2
Joined: Thu May 25, 2023 9:09 am

Fri May 26, 2023 2:58 am

Hello,

Thanks for your inquiry.
According to the information you provided, we suggest that you use the latest version of Spire.PDF(Spire.PDF Pack(Hot Fix) Version:9.5.4) for testing first. If the issue still exists after testing, please provide us with your input PDF file(If the file size is too large, you can provide us with an online download link) and complete executable code for further investigation. You could attach them here or send them to us via email ([email protected]). Thanks in advance.

Sincerely
Wenly
E-iceblue support team
User avatar

Wenly.Zhang
 
Posts: 149
Joined: Tue May 16, 2023 2:19 am

Tue May 30, 2023 2:28 pm

Hi,

thanks for your reply. Here is the input pdf file, it is only 3 pages long so it is unlikely the source of the problem.

Best regards
Raphael

RaphaelBCgm
 
Posts: 2
Joined: Thu May 25, 2023 9:09 am

Wed May 31, 2023 7:16 am

Hello,

Thank you for your feedback.
As your provided code cannot be executed directly, I made some simple modifications to it so that it can run. After testing, I couldn't reproduce the issue you mentioned. I have attached my test code and result file for your reference. If the problem still exists after your testing, please provide a simple test project (that can reproduce the issue) for us to further investigate. You could attach it here or send it to us via email ([email protected]). Thanks in advance.

Sincerely
Wenly
E-iceblue support team
User avatar

Wenly.Zhang
 
Posts: 149
Joined: Tue May 16, 2023 2:19 am

Return to Spire.PDF

cron