Ts61 Geschrieben 20. Juli 2022 Geschrieben 20. Juli 2022 (bearbeitet) Hallo zusammen, ich habe neu mit dem c# Programmieren angefangen. Ich hab mich an einem Projekt versucht, bei dem ich bestimmte Dateien und Bilder aus der Datenbank hole und in einem bestimmten Ordner auf dem Desktop speichere. Bisher kriege ich es hin, die Bilder die gespeichert wurden zu einem PDF zu konvertieren. Ich möchte jetzt eine neue Funktion schreiben, bei der ich die Dateien die kein Bild ist als leeres PDF mit einer Notiz zu speichern. Das funktioniert nicht so richtig, kann mir da jemand weiterhelfen? public void AttachFileToPdfSite(string srcFileName, string dstFilename, string originFileName) { Rectangle pageSize = null; using (var ms = new MemoryStream()) { var document = new Document(pageSize, 0f, 0f, 0f, 0f); PdfWriter.GetInstance(document, ms).SetFullCompression(); document.Open(); document.Add(new Paragraph("Hello World")); document.Close(); File.WriteAllBytes(dstFilename, ms.ToArray()); } } Zitat namespace summit.Tools.ReportInPdf.Cmd2 { internal class Program { public static List<Msg> mWorkingListOfMessages; public static string mWorkingLogTextFileName; public static string mWorkingLogJsonFileName; public static string mWorkingGuid; public static void Main() { mWorkingListOfMessages = new List<Msg>(); mWorkingGuid = Guid.NewGuid().ToString(); PdfConverter localPdfWorker = null; AddMsg("Start"); mWorkingLogTextFileName = GetLogFilePath(".log"); mWorkingLogJsonFileName = GetLogFilePath(".json"); try { AddMsg("PdfConverter wird initialisiert"); localPdfWorker = new PdfConverter(41); } catch (Exception ex) { AddMsg(ex); } if (localPdfWorker != null) { AddMsg("PdfConverter wurde erfolgreich initialisiert!"); localPdfWorker.MessageCreated += RemoteMessageCreated; try { AddMsg("PdfConverter liest Daten"); localPdfWorker.ReadData(); } catch (Exception ex) { AddMsg(ex); } if (localPdfWorker.ListOfFiles != null) { foreach (var oFile in localPdfWorker.ListOfFiles) AddMsg($"{oFile.ID.ToString("000000")} {oFile.NewFileName}"); localPdfWorker.WriteSingleFiles(); byte[] localMergedBytes = null; var localPdfBytes = new List<byte[]>(); byte[] localPdfData = null; foreach (var oFile in (from oPdfFile in localPdfWorker.ListOfFiles where System.IO.File.Exists(oPdfFile.SysFileInfo.FullName) select oPdfFile).ToList()) { try { localPdfData = System.IO.File.ReadAllBytes(oFile.SysFileInfo.FullName); } catch (Exception ex) { AddMsg($"{ex.Message}{Environment.NewLine}"); localPdfData = null; } if (localPdfData != null) { localPdfBytes.Add(localPdfData); } if (localPdfBytes != null) { try { localMergedBytes = localPdfWorker.MergeFiles(localPdfBytes); } catch (Exception ex) { AddMsg($"{ex.Message}{Environment.NewLine}"); localMergedBytes = null; } } } if (localMergedBytes != null) { try { System.IO.File.WriteAllBytes(System.IO.Path.Combine(localPdfWorker.Config.ExportPath, "gesamt.pdf"), localMergedBytes); } catch (Exception ex) { AddMsg($"{ex.Message}{Environment.NewLine}"); } } if (System.IO.File.Exists(System.IO.Path.Combine(localPdfWorker.Config.ExportPath, "gesamt.pdf"))) { foreach (var oFile in (from oPdfFile in localPdfWorker.ListOfFiles where System.IO.File.Exists(oPdfFile.SysFileInfo.FullName) select oPdfFile).ToList()) { if (System.IO.File.Exists(System.IO.Path.Combine(oFile.SysFileInfo.FullName ))) { try { System.IO.File.Delete(oFile.SysFileInfo.FullName ); AddMsg($"The File: {oFile.SysFileInfo.FullName } is deleted!"); } catch (Exception e) { AddMsg(e); } } } } if (System.IO.File.Exists(System.IO.Path.Combine(localPdfWorker.Config.ExportPath, "gesamt.pdf"))) { try { localPdfWorker.CmdtoReport(41); } catch (Exception e) { Console.WriteLine(e); throw; } } } } else { AddMsg("PdfConverter konnte nicht initialisiert werden!"); } if (mWorkingListOfMessages != null && mWorkingListOfMessages.Count > 0) { try { System.IO.File.WriteAllText(mWorkingLogJsonFileName, Newtonsoft.Json.JsonConvert.SerializeObject(mWorkingListOfMessages)); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } } Ich hoffe die Codestücke reichen zum helfen. Vielen Dank! Zitat foreach (var oFile in (from oPdfFile in localPdfWorker.ListOfFiles where System.IO.File.Exists(oPdfFile.SysFileInfo.FullName) select oPdfFile).ToList()) { Hier läuft der auf ein Fehler:"der objektverweis wurde nicht auf eine objektinstanz festgelegt". Bearbeitet 20. Juli 2022 von Ts61 Zitieren
Whiz-zarD Geschrieben 20. Juli 2022 Geschrieben 20. Juli 2022 Das bedeutet, dass irgendwas null ist. Dann musst du mal schauen, was da null ist. Da der Code nicht gut strukturiert ist (und auch gegen law of demeter verletzt), kann man es jetzt schlecht sagen, was null sein könnte. Es kann sein, dass localPdfWorker.ListOfFiles oder oPdfFile.SysFileInfo null ist. Ts61 reagierte darauf 1 Zitieren
Gast D-eath Geschrieben 21. Juli 2022 Geschrieben 21. Juli 2022 vor 14 Stunden schrieb Whiz-zarD: Es kann sein, dass localPdfWorker.ListOfFiles null ist. Ne, denke ich nicht. Es fehlt Code, der zeigt, wie die Objekte, die in ListOfFiles gehalten werden, initialisiert werden. Zitieren
Gast Geschrieben 23. Juli 2022 Geschrieben 23. Juli 2022 Zitat oPdfFile.SysFileInfo Es kann nur das sein, denn localPdfWorker.ListOfFiles hat ja einen Nullcheck oben und wenn es "null" wäre, dann würde es eine Argumentnull-Ausnahme anstatt Objektverweis-Ausnahme produzieren. Bedeutet in der localPdfWorker. ListOfFiles gibt es Elemente, deren Eigenschaft SysFileInfo null ist, also keine FileInfo-Objekte enthalten. Zitieren
Ts61 Geschrieben 27. Juli 2022 Autor Geschrieben 27. Juli 2022 (bearbeitet) public void AttachFileToPdfSite(string srcFileName, string dstFilename, string originFileName) { var pageSize = new Rectangle(PageSize.A4); using (var ms = new MemoryStream()) { var document = new Document(pageSize, 0f, 0f, 0f, 0f); PdfWriter.GetInstance(document, ms).SetFullCompression(); string originFilename = Path.GetFileName(originFileName); document.Open(); document.Add(new Paragraph("This File could not be open ")); document.AddHeader("This is the Header of the File", "ASD"); PdfWriter writer; writer = PdfWriter.GetInstance(document,new FileStream(dstFilename,FileMode.Open)); PdfFileSpecification pfs = PdfFileSpecification.FileEmbedded(writer, Path.Combine(dstFilename,originFileName), originFileName, null); writer.AddFileAttachment(pfs); document.Close(); File.WriteAllBytes(Path.Combine(dstFilename,originFilename + ".pdf"), ms.ToArray()); } } Ich versuche eine Datei in ein Pdf einzubetten, leider kriege ich den Fehler "der zugriff auf den Pfad " " wurde verweigert. Kann mir da einer helfen? Vielen Dank im Voraus. Bearbeitet 27. Juli 2022 von Ts61 Zitieren
Whiz-zarD Geschrieben 27. Juli 2022 Geschrieben 27. Juli 2022 (bearbeitet) vor 11 Stunden schrieb Ts61: Ich versuche eine Datei in ein Pdf einzubetten, leider kriege ich den Fehler "der zugriff auf den Pfad " " wurde verweigert. Gibt es den Pfad überhaupt? (Ich nehme zumindest an, dass er nicht leer ist und du ihn nicht hier reinkopiert hast.) Bearbeitet 27. Juli 2022 von Whiz-zarD Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.