PDFSharp - Zeilenumbruch

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von dlosse.

    PDFSharp - Zeilenumbruch

    Schön guten Tag,

    viel eingearbeitet habe ich mich in Visual Basic jetzt noch nicht wirklich. Bin ehr vertrauter mit Pascal, aber auch dort würde ich an meine Grenze stößen mit dem selben Problem.

    Meine Umschulungseinrichtung mag meine ehrgeizigkeit und sagt dauernd das ich sehr gut Programmieren kann, diese verweisen mich auf meine alten Delphi 6 Programme. Der Küchenleiter macht wöchentlich ein Essensplan als Excel Datei, was von der Sekräterin ständig mühsälig in ein anderes Format gebracht wird und fragte die IT-Kaufmann Abteilung ob wir kein Script hätten der das alles übersichtlich bringt, entwickeln können, zur Arbeitserleichterung. Ausbilder haben sich bereits daran per Excel-Formeln vergeblich versucht. Durch meine Begabtheit dachte man nun an mich und ich solle ein Programm vielleicht entwickeln. PDFSharp habe ich im Internet gefunden, das tolle ist, es erstellt direkt eine PDF Datei. Mit Delphi habe ich geringfügig mit CANVAS gearbeitet, aber auch nur geringfügig, somit wäre ich auch dort auf gleiches Problem gekommen.

    Ich habe mir PDFSharp heruntergeladen.. Ich weiß nicht wie ich es richtig einbinde. Ich habe es wohl als 2. Projekt eingebunden. Ich muss nun immer den vollen Code angeben. Im Internet steht anderer Code. Bei mir sieht es in einem kurzem Testversuch beim Versuch mit der PDFSharp mich vertraut zu machen so aus..

    VB.NET-Quellcode

    1. Dim document As PdfSharp.Pdf.PdfDocument = New PdfSharp.Pdf.PdfDocument
    2. document.Info.Title = "Speisepaln von xx.xx.xxxx bis yy.yy.yyyy"
    3. Dim XBrushes As PdfSharp.Drawing.XBrushes
    4. Dim page As PdfSharp.Pdf.PdfPage = document.AddPage
    5. Dim gfx As PdfSharp.Drawing.XGraphics = PdfSharp.Drawing.XGraphics.FromPdfPage(page)
    6. Dim textfont As PdfSharp.Drawing.XFont = New PdfSharp.Drawing.XFont("Verdana", 14)
    7. Dim text_head As PdfSharp.Drawing.XFont = New PdfSharp.Drawing.XFont("Verdana", 16, PdfSharp.Drawing.XFontStyle.Bold)
    8. gfx.DrawString("Speiseplan", text_head, Brushes.Black, 75, 68)
    9. gfx.DrawLines(Pens.Black, 75, 80, 200, 80)
    10. gfx.DrawString(TextBox1.Text, textfont, Brushes.Black, 75, 100)
    11. Dim filename As String = "HelloWorld.pdf"
    12. document.Save(filename)
    13. Process.Start(filename)


    Die Seite müsste ich noch auf quer stellen, die Option bin ich noch am suchen, hatte zur Zeit wegen anderen Unterrichtsfächern und Facharbeit(Dokumentation) und Prässentation (Vorübung für die IHK Prüfung, auch noch nicht ganz fertig) keine Zeit für das suchen der Option (Direction oder Scale) und ein wenig Freizeit möchte ich auch haben. Es gibt aber für Frühstück und Abendbrot auf einem Blatt 2 Spalten. Die Spallte sollte aber nicht über einen bestimmten x-Punkt hinaus gehen und dann umbrechen. Auch wäre eine Höhen-Berechnung des Textes schön, damit die Elemente auf korrekter höhe sind, sprich Motto valign="middle" align="center". In Excel wäre das wieder einfach Lösbar.

    Meine Frage.. Welche Funktion sollte ich mir anschauen wegen Zeilenumbruch? Wie binde ich die PDFSharp richtig ein ohne PDFsharp.pdf davor zu machen..


    Aus den Tipps und Tricks verschoben
    -Artentus

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „dlosse“ ()

    Willkommen im Forum :)
    Bitte formatiere deinen Quellcode richtig. Siehe Bild:



    dlosse schrieb:

    Wie binde ich die PDFSharp richtig ein ohne PDFsharp.pdf davor zu machen..


    Mach am Anfang von deinen Code (ggf. nach den Options) folgendes:

    VB.NET-Quellcode

    1. Imports PdfSharp
    2. Imports PdfSharp.Pdf


    dlosse schrieb:

    Welche Funktion sollte ich mir anschauen wegen Zeilenumbruch

    Kommt drauf an. Wo willst du denn den Zeilenumbruch haben?

    MfG, KaskadekingDE
    KaskadekingDE on GitHub :)
    Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

    Who cares? ¯\_(ツ)_/¯
    Danke für die Antwort,

    ich habe den Code im Quellbeitrag bearbeitet, die erste Zeile kann ich nicht auf eine Fluchtlinie bringen, weil ich vermute der Einzug wird nicht als Zeichen dargestellt, habe alle Zeilen auf eine neue Zeile stehen und NICHT direkt hinter dem BBCODE angefangen.

    Edit: Nach Installation von Update 1 des Visual Studio 2013 konnte ich erfolgreich imports benutzen. ich habe folgende Dinge Impotiert

    VB.NET-Quellcode

    1. Imports PdfSharp
    2. Imports PdfSharp.Pdf
    3. Imports PdfSharp.Drawing


    Ich habe den Code nun verändert und erweitert.

    Wegen Querformat der Seite habe ich das benutzt

    VB.NET-Quellcode

    1. page.Orientation = PageOrientation.Landscape


    Jetzt ist der Rahmen und der Inhalt zu sehen, wie es optisch aussehen soll, jetzt fehlt allerdings immer noch der Text, der rein passen muss.. Wie kann man das aber realisieren.

    Montag z.B. panierte Seelachsroulade mit Broccoli und Käse gefüllt, Currysauce und Reis

    Zwecks Zeilenumbruch.

    Ich habe beim Mittagbrot 3 Menüs. "Vollkost", "Leichte Kost", "Vegetarisch". ganze wird Vertial auf 7 Tage verteilt.
    Das Essen ist aber nicht immer so kurz wie "Kartoffelsuppe" sondern es kann auch Bratkartoffeln oder Kartoffeln mit Hausfrauensauce und Sülze sein. Da müsste z.B. getrennt werden. DrawString würde ich wieder benutzen, sofern mir keiner was besseres zeigt/vorschlägt. Nur bei Eingabe weiß man nicht, ob es zu lang ist. So das, die Anwendung es automatisch machen sollte. Ich habe beim schnüffeln gesehen, das man Spalten festlegen kann, ob ich damit mich auch noch beschäftigen muss, muss ich auch noch schauen.

    Hier der ganze Source mit Beispiel. Ich hänge mal die PDF-Ausgabe mit an, für die, die diese möchten.

    VB.NET-Quellcode

    1. Dim document As PdfDocument = New PdfDocument
    2. document.Info.Title = "Speisepaln von xx.xx.xxxx bis yy.yy.yyyy"
    3. Dim XBrushes As XBrushes
    4. Dim page As PdfPage = document.AddPage
    5. page.Orientation = PageOrientation.Landscape 'Richtet die Seite auf Querformat aus
    6. Dim gfx As XGraphics = XGraphics.FromPdfPage(page)
    7. Dim textfont As XFont = New XFont("Arial", 14)
    8. Dim speisefont As XFont = New XFont("Arial", 12)
    9. Dim text_head As XFont = New XFont("Arial", 16, XFontStyle.Bold)
    10. gfx.DrawString("Mittagessen vom xx.xx.xx - yy.yy.yy", text_head, Brushes.Black, 275, 30) 'Überschrift, am besten auf Y-Achse 80 Zentriert, Unterstreichen wäre auch nicht schlecht.
    11. 'gfx.DrawLines(Pens.Black, 75, 80, 200, 80)
    12. gfx.DrawRectangle(Pens.Black, 150, 80, 651, 476) 'Außenrahmen
    13. gfx.DrawLine(Pens.Black, 150, 148, 801, 148) 'Linie zwischen Mo und Di
    14. gfx.DrawLine(Pens.Black, 150, 216, 801, 216) 'Linie zwischen Di und Mi
    15. gfx.DrawLine(Pens.Black, 150, 284, 801, 284) 'Linie zwischen Mi und Do
    16. gfx.DrawLine(Pens.Black, 150, 352, 801, 352) 'Linie zwischen Do und Fr
    17. gfx.DrawLine(Pens.Black, 150, 420, 801, 420) 'Linie zwischen Fr und Sa
    18. gfx.DrawLine(Pens.Black, 150, 488, 801, 488) 'Linie zwischen Sa und So
    19. gfx.DrawLine(Pens.Black, 367, 65, 367, 556) 'Linie zwischen Vollkosten und Leichte Vollkost
    20. gfx.DrawLine(Pens.Black, 584, 65, 584, 556) 'Linie zwischen Leichte Vollkost und vegetarische Kost
    21. gfx.DrawString("Vollkost", textfont, Brushes.Black, 151, 75) 'Vollkost Rahmenüberschrift
    22. gfx.DrawString("Leichte Vollkost", textfont, Brushes.Black, 368, 75) 'Leichte Vollkost Rahmenüberschrift
    23. gfx.DrawString("vegetarische Kost", textfont, Brushes.Black, 585, 75) 'vegetarische Kost Rahmenüberschrift
    24. gfx.DrawString("Mo", textfont, Brushes.Black, 75, 95) 'Montag
    25. gfx.DrawString("xx.xx.xx", textfont, Brushes.Black, 75, 95 + 15) 'Montag Datum, +15 wegen der Schriftgröße + 1 Punkt Leerraum
    26. gfx.DrawString("Di", textfont, Brushes.Black, 75, 163) 'Dienstag
    27. gfx.DrawString("xx.xx.xx", textfont, Brushes.Black, 75, 163 + 15) 'Dienstag Datum
    28. gfx.DrawString("Mi", textfont, Brushes.Black, 75, 231) 'Mittwoch
    29. gfx.DrawString("xx.xx.xx", textfont, Brushes.Black, 75, 231 + 15) 'Mittwoch Datum
    30. gfx.DrawString("Do", textfont, Brushes.Black, 75, 299) 'Donnerstag
    31. gfx.DrawString("xx.xx.xx", textfont, Brushes.Black, 75, 299 + 15) 'Donnerstag Datum
    32. gfx.DrawString("Fr", textfont, Brushes.Black, 75, 367) 'Freitag
    33. gfx.DrawString("xx.xx.xx", textfont, Brushes.Black, 75, 367 + 15) 'Freitag Datum
    34. gfx.DrawString("Sa", textfont, Brushes.Black, 75, 435) 'Samstag
    35. gfx.DrawString("xx.xx.xx", textfont, Brushes.Black, 75, 435 + 15) 'Samstag Datum
    36. gfx.DrawString("So", textfont, Brushes.Black, 75, 503) 'Sonntag
    37. gfx.DrawString("xx.xx.xx", textfont, Brushes.Black, 75, 503 + 15) 'Sonntag Datum
    38. 'Beispiel
    39. gfx.DrawString("panierte Seelachsroulade mit Broccoli und Käse gefüllt, Currysauce und Reis", speisefont, Brushes.Black, 152, 95) 'Essen Montag Vollkost
    40. Dim filename As String = "Speiseplan.pdf"
    41. document.Save(filename)
    42. Process.Start(filename)


    Gruß
    David Losse
    Dateien
    • Speiseplan.pdf

      (6,81 kB, 398 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „dlosse“ ()

    Auch wenn mir hier scheinbar niemand helfen möchte/kann, beantworte ich meine gefundene Lösung für die Personen die es auch suchen.. Ob es die beste Lösung ist kann ich nicht sagen, aber es ist die Lösung die scheinbar das erreicht was ich möchte.

    VB.NET-Quellcode

    1. Dim tf = New XTextFormatter(gfx)
    2. Dim mo_sp1 = New XRect(152, 82, 215, 64) 'Textfeld Montag Vollkost
    3. tf.DrawString(TextBox1.Text, speisefont, Brushes.Black, mo_sp1, XStringFormats.TopLeft)


    Die Eigenschaft "XStringFormats.TopLeft" lässt sich nicht auf "XStringFormats.Center" stelllen es wirft die Exception, dass die Funktion noch nicht implementiert wurde, aber VS2013 schlägt es vor.

    Für die genauso noch unerfahren sind:
    New XRect(X, Y, WIDTH, HEIGHT) wenn man wie ich darauf denkt das es X2 und Y2 ist täuscht man sich..

    Grüße
    David Losse