Mit PDFSharp erstellter Code vor dem Drucken in der Seitenansicht (PrintPreview)?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mit PDFSharp erstellter Code vor dem Drucken in der Seitenansicht (PrintPreview)?

    Hallo Leute

    hab viel gesucht, konnte leider nichts zu dem Thema finden.

    Ich habe eine windows form mit mehreren Controls erstellt. Die Inhalte werden über pdfsharp in einem PDF Dokument gedruckt.
    Jetzt wollte ich eine Seitenansicht erstellen, die den gleichen Inhalt anzeigt, also auch alle gezeichneten Texte samt Koordinaten übernimmt. Leider weiß ich nicht wie.

    Als PDF sieht das ganze gut aus. Wenn ich jetzt eine Seitenansicht erstellen möchte, bringt der Code nicht viel. Ich muss ihn erst komplett überarbeiten, inklusive der Koordinaten für den Text, damit er im PrintDocument Eereignis angezigt wird. Aber das wäre sehr mühselig.

    Mein Code:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Dim document As PdfDocument = New PdfDocument
    3. Dim path As String = "c: \users\" + Environment.UserName + "\documents\Anfragen\Anfragen vom " & Date.Now.ToShortDateString
    4. document.Info.Title = "Erstellt von silver"
    5. document.Info.Author = "SilverBob"
    6. document.Info.CreationDate = Date.Now
    7. document.Info.Subject = "Anfrage vom " & Date.Now.ToShortDateString
    8. document.PageLayout = PdfPageLayout.SinglePage
    9. ' Leere Seite erstellen
    10. Dim page1 As PdfPage = document.AddPage
    11. ' Erstelle XGraphics Object zum Zeichnen
    12. Dim gfx As XGraphics = XGraphics.FromPdfPage(page1)
    13. ' Kopfzeilenlinie zeichnen'
    14. Dim pen As XPen = New XPen(Color.Black)
    15. gfx.DrawLine(pen, 50, 50, 500, 50)
    16. ' Schrift festlegen
    17. Dim fontbold As XFont = New XFont("Calibri", 10, XFontStyle.Bold)
    18. Dim fontregular As XFont = New XFont("Calibri", 10, XFontStyle.Regular)
    19. Select Case mPagenumber
    20. Case 0
    21. 'Seite 1'
    22. gfx.DrawImage(My.Resources.Kingspan_Panels, 520, 20, 35, 35)
    23. gfx.DrawString(FormProjektinfo.TextBox1.Text & " - " & Date.Now.ToShortDateString, New XFont("Verdana", 8, XFontStyle.Regular), XBrushes.Black, 50, 45)
    24. End select
    25. End sub


    Wenn ich den obigen Code im PrintDocument_Printpage Ereignis eingebe, erscheint gar nichts. Es wird einfach nicht erkannt, da es Xgraphics sind?
    Gibts ne Möglichkeit über pdfsharp, eine Seitenansicht zu generieren?
    GDI zeichnet alle Inhalte, und die Datei die ich damit erhalte ist im Vergleich zu PDFsharp deutlich größer (in KiloBytes).

    Ich hoffe das war einigermaßen verständlich. Danke vorab für eure Hilfe.

    mfg, silver
    Ganz einfacher Lösungsansatz, geht sicher auch besser: PDF zwischenspeichern und im BrowserControl als Vorschau anzeigen?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    silverbob76GE schrieb:

    Aber das wäre sehr mühselig.
    Jou, so isses.
    Gugst Du auch hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi und erst mal Danke für eure Antworten.

    @ mrMo: Die Lösung mit dem zwischenspeichern und dann im Browsercontrol anzeigen lassen wollte ich umgehen. Hatte gehofft, das es eine andere Lösung gibt.

    @ Rod: Den Beitrag habe ich gelesen. Habe das auch schon mal umgesetzt. Allerdings wird die PDF die ich danach erzeuge deutlich größer, als mit PDFsharp. Auch der Text der gezeichnet wird sowie die Bilder haben nicht die Schärfe.

    Heißt das nun, das alles was ich bisher über PDFsharp gezeichnet habe für die Seitenvorschau neu gezeichnet werden muss?

    Die Koordinaten im Code für die PDF und das PrintDocument sind die gleichen, das Ergebnis jedoch nicht. Daher müsste ich alles für PrintDocument neu zeichnen. Will allersings nicht raten müssen, wann ich richtigen Koordinaten hab.

    PDFSHARP

    VB.NET-Quellcode

    1. gfx.DrawString("Das ist ein Beispieltext", New XFont("Calibri", 10, XFontStyle.Regular), XBrushes.Black, 50, 50)
    2. gfx.DrawLine(Pen, 50, 70, 500, 70)


    PrintDocument

    VB.NET-Quellcode

    1. e.graphics.DrawString("Das ist ein Beispieltext", New FOnt("Calibri", 10, fontstyle.regular, brushes.black, 50, 50)
    2. e.graphics.DrawLine(Pens.Black, 50, 70, 500, 70)


    Was muss ich tun, um das identische Ergebnis zu bekommen?

    silverbob76GE schrieb:

    PDFsharp
    Damit hab ich noch nicht gearbeitet. Wo gibt es das?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das gibts bei pdfsharp.com/PDFsharp/

    Ist ne vb.net library, mit der man PDF Dateien erzeugen kann. Du fügst die Library als Verweis dem Projekt zu und kannst dann damit PDF Dateien drucken. Denke das das ähnlich ist wie itextsharp. Eigentlich ne sehr schöne Sache, leider konnte ich nicht herausfinden, wie eine Druckvorschau funktioniert. Daher dachte ich, ich übernehme alles ins PrintDocument-Ereignis, passe den Code an, das wars. Aber alle Koordinaten müssten auch angepasst werden, weil diese halt nicht übereinstimmen.

    Wenn ich hier die Koordinaten eingebe, ist die Ansicht in der PDF anders als in der Druckvorschau mit GDI im PrintDocument. Weiß halt nicht warum.

    PDFsharp bietet eine recht gute Funktionalität, die Datein sind nicht so groß und text als auch Bilder sind meiner Meinung auch schärfer. Ist vielleicht nur mein subjektiver Eindruck.

    silverbob76GE schrieb:

    Ist ne vb.net library
    Lade Dir mal PDFSharp-MigraDocFoundation-1_32.zip runter, da sind auch Beispiele dabei.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi Rod. Die Beispiele habe ich mir angesehen, werd aber nicht so recht schlau draus. Bin halt auch kein Profi, würde mich eher als Anfänger in VB bezeichnen.
    Hab leider keine Ahnung, wo ich da schauen muss, damit ich das richtige finde.
    Danke für die Info. Hab es über den Paket Manager hinzugefügt. Aber ein Preview Control für PDFsharp kann ich unter den Net.Komponenten zum hinzufügen für die ToolBox nicht finden.

    Außerdem bekomme ich jetzt Fehlermeldungen wie:

    xbrushes ist im namespace pdfsharp.drawing mehrdeutig
    xfont ist im namespace pdfsharp.drawing mehrdeutig

    Weiß nicht warum, aber irgendwas läuft heir gerade falsch.

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

    @silverbob76GE Ich hab Dir mal das Preview-Projekt als solches rausgeholt, damit kannst Du zunächst mal rumspielen.
    Dateien
    • Preview.zip

      (271,7 kB, 279 mal heruntergeladen, zuletzt: )
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Leute

    Danke. Werds mir vornehmen.

    @ HenryV: danke, aber wie man das macht weiss ich. Hab die PDFsharp-Gdi.dll auch hinzugefügt. Konnte die aber nur über das Nuget-Paket in der beta 1.52 installieren.
    kontte es unter den net-komponenten nicht finden. Berichte wiedrr, wenn ich das alles durch hab.

    Danke Rod, danke Henry. Das Forum ist eine grosse Hilfe.

    mfg, silver
    Das Preview-Sample ist in C# geschrieben, da steige ich überhaupt nicht durch, leider.

    Habs nun endlich geschafft, das PagePreview Steuerelement meiner Toolbox hinzugzufügen. Allerdings bekomme ich immer eine Fehlermeldung wenn ich diese meiner Form hinzufügen will, siehe Anhang.

    Weiß nicht was ich falsch mache und so langsam glaube ich, das das gar nicht erst klappt.
    Bilder
    • Fehlermeldung.jpg

      66,37 kB, 497×559, 231 mal angesehen

    silverbob76GE schrieb:

    da steige ich überhaupt nicht durch
    Offensichtlich hast Du noch keinen der sehr vielen Codeübersetzer gefunden.
    Bemühe mal die Suchfunktion: Übersetzer C# VB.NET. Im Forum 263 Treffer, bei Frau Google ca. 12700.
    Ich präferiere diesen hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke, habe ich wirklich nicht. Hatte aber uach noch nicht danach gesucht. Mein Problem fängt ja schon damit an, das ich das Control nicht auf meine Form bekomme. Das sollte doch gehen, wenn ich den Verweis meinem Projekt hinzugeügt habe, oder? Oder muss ich da noch was anpassen?

    Falls du eine andere Methode siehst, die besser funktioniert, wäre ich für einen Tipp dankbar.
    @silverbob76GE Füge das DLL-Projekt Deiner Projektmappe hinzu und füge das Projekt, nicht aber die DLL, Deinem Hauptprojekt als Verweis hinzu.
    Einmal kompilieren, da sollte das Control in Deiner Toolbar ganz oben erscheinen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Bin mir nicht sicher, ob ich dich richtig verstanden habe.

    1. Das Projekt (die Datei, die du als Anhang weiter oben bereitgestellt hast?) meiner Projektmappe hinzufügen. Vorher aber über den Konverter in vb.net konvertieren, richtig?
    2. Das Projekt meinem Hauptprojekt hinzufügen, ohne die pdfsharp.dll hinzuzufügen?

    mfg, silver

    silverbob76GE schrieb:

    richtig?
    Nö.
    Du kannst das Projekt in C# lassen, ohne es zu konvertieren.
    Ja, das Projekt als Verweis hinzufügen,
    nein, nicht die DLL.
    Vorteile: Du erstellst die DLL immer mit, es wird immer die richtige Version erstellt (Debug / Release, x64 / x86 / AnyCPU) und Du kannst die DLL debuggen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!