2 mehrseitige pdfs drucken

  • VB.NET
  • .NET (FX) 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von tina83.

    2 mehrseitige pdfs drucken

    Hallo zusammen,

    wie kann ich denn 2 mehrseitige pdfs drucken? Ne einzelne mehrseitige pdf erstellen funktioniert schon mal. Mein Problem liegt darin weil ich nicht weiß wie ich den Druck der zweiten PDF starten soll.

    Bisher mach ichs so: In PrintDocument1.BeginPrint kommt die Startseite und die Anzahl der Seiten. In PrintDocument1.QueryPageSettings ruf ich den Inhalt für die einzelnen Seiten auf. In PrintDocument1.PrintPage kommt der ganze Inhalt aufs Papier und es wird abgefragt, ob noch weitere Seiten gedruckt werden sollen. Wenn die Anzahl der Seiten erreicht ist, wird's gedruckt und fertig ist die PDF.

    Aber wie sag ich es, dass nochmal ne PDF gedruckt werden soll?

    Vielen Dank!
    Grüße

    tina83 schrieb:

    auch wenn ich den Index = 0 setze
    Poste bitte mal den ganzen Code bzw. das Prozekt (ggf. als Zip anhängen).
    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!
    Also, dann fang ich mal an:

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_BeginPrint(sender As System.Object, e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
    2. Select Case StatusDrucken
    3. Case 1 'gesamt PDF
    4. Index = 1
    5. Anzahl = Anzahl_Seiten_gesamt
    6. Case 2 'erste PDF
    7. Index = 1
    8. Anzahl = Anzahl_Seiten_erste_PDF
    9. Case 3 'zweite PDF
    10. Index = 1
    11. Anzahl = Anzahl_Seiten_zweite_PDF
    12. StartSeitenZahl = Anzahl_Seiten_erste_PDF + 3
    13. End Select
    14. End Sub


    VB.NET-Quellcode

    1. Private Sub PrintDocument1_QueryPageSettings(sender As Object, e As EventArgs) Handles PrintDocument1.QueryPageSettings
    2. Select Case StatusDrucken
    3. Case 1 'PDF gesamt
    4. Select Case Index
    5. Case 1
    6. frmMenue.DurchmesserRelativbewegungToolStripMenuItem.PerformClick()
    7. Seite = "- " + StartSeitenZahl.ToString + " -"
    8. Case 2
    9. frmMenue.AchsabständeWinkelToolStripMenuItem.PerformClick()
    10. Seite = "- " + (StartSeitenZahl + 1).ToString + " -"
    11. Case 3
    12. frmMenue.OfenachslageToolStripMenuItem.PerformClick()
    13. Seite = "- " + (StartSeitenZahl + 2).ToString + " -"
    14. Case 4
    15. frmMenue.BerechneteVerschiebewegeToolStripMenuItem.PerformClick()
    16. Seite = "- " + (StartSeitenZahl + 3).ToString + " -"
    17. Case 5
    18. frmMenue.AchsNeigungenToolStripMenuItem.PerformClick()
    19. Seite = "- " + (StartSeitenZahl + 4).ToString + " -"
    20. Case 6
    21. frmMenue.TemperaturenToolStripMenuItem.PerformClick()
    22. Seite = "- " + (StartSeitenZahl + 5).ToString + " -"
    23. Case 7 To 6 + Anzahl_Stationen 'Temperaturen
    24. frmMenue.btnTempUp.PerformClick()
    25. Seite = "- " + (StartSeitenZahl + Index - 1).ToString + " -"
    26. End Select
    27.  
    28. Case 2 'erste PDF
    29. Select Case Index
    30. Case 1
    31. frmMenue.DurchmesserRelativbewegungToolStripMenuItem.PerformClick()
    32. Seite = "- " + StartSeitenZahl.ToString + " -"
    33. Case 2
    34. frmMenue.AchsabständeWinkelToolStripMenuItem.PerformClick()
    35. Seite = "- " + (StartSeitenZahl + 1).ToString + " -"
    36. Case 3
    37. frmMenue.OfenachslageToolStripMenuItem.PerformClick()
    38. Seite = "- " + (StartSeitenZahl + 2).ToString + " -"
    39. Case 4
    40. frmMenue.BerechneteVerschiebewegeToolStripMenuItem.PerformClick()
    41. Seite = "- " + (StartSeitenZahl + 3).ToString + " -"
    42. End Select
    43. Case 3 'zweite PDF
    44. Select Case Index
    45. Case 1
    46. frmMenue.AchsNeigungenToolStripMenuItem.PerformClick()
    47. Seite = "- " + (StartSeitenZahl + 1).ToString + " -"
    48. Case 2
    49. frmMenue.TemperaturenToolStripMenuItem.PerformClick()
    50. Seite = "- " + (StartSeitenZahl + 2).ToString + " -"
    51. Case 3 To 2 + Anzahl_Stationen 'Temperaturen
    52. frmMenue.btnTempUp.PerformClick()
    53. Seite = "- " + (StartSeitenZahl + Index).ToString + " -"
    54. End Select
    55. End Select
    56. End Sub


    VB.NET-Quellcode

    1. Private Sub PrintDocument1_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. 'hier steht das ganze Zeichnen
    3. e.HasMorePages = Index < Anzahl
    4. Index += 1
    5. End Sub



    So wie es jetzt da steht, kann es nicht funktionieren. Es werden ja nicht StatusDrucken 2 UND 3 ausgeführt, sondern nur eins davon. Das ist klar. Ich wollt nur irgendwie die einzelnen PDFs getrennt haben.
    StatusDrucken = 1 ist eine PDF - das funktioniert
    StatusDrucken = 2 und 3 sind jeweils eine PDF - einzeln gedruckt funktioniert das auch. Nur eben nicht nacheinander. Mein bisherigen Code zum hin- und herprobieren hab ich rausgeschmissen, weils eh nicht funktioniert hat.

    tina83 schrieb:

    StatusDrucken = 1
    Was soll passieren, wenn

    VB.NET-Quellcode

    1. StatusDrucken = 1
    2. StatusDrucken = 2
    3. StatusDrucken = 3
    ist?
    Willst Du
    - PDF A
    - PDF B
    - PDF A und B in einem einzigen Dokument
    - PDF A und B in 2 Dokumenten drucken?
    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!
    Den StatusDrucken leg ich vorher fest. Je nachdem was der Benutzer will.
    Wenns StatusDrucken = 1 ist, soll eine einzige gesamt PDF gedruckt werden. Das funktioniert.
    Wenn StatusDrucken = 2 ist, sollen 2 PDFs gedruckt werden. In einer mit dem Inhalt von StatusDrucken = 2, in der anderen PDF kommt der Inhalt von StatusDrucken = 3. Also 2 Dokumente.
    Ich weiß dass die Aufteilung in Select Case etwas fehl am Platz ist, zumindest was StatusDrucken 2 und 3 betrifft. Mir ist eben bis jetzt nix gescheites dazu eingefallen.

    tina83 schrieb:

    sollen 2 PDFs gedruckt werden
    Da muss Document.Print() zwei Mal aufgerufen werden.
    Probier mal dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Using dlg As New PrintPreviewDialog
    3. dlg.Document = Me.PrintDocument1
    4. ' Indizes für Dokument1 setzen
    5. If dlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then
    6. Return
    7. End If
    8. ' Indizes für Dokument2 setzen
    9. Me.PrintDocument1.Print()
    10. End Using
    11. End Sub
    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!
    die Lösung ist so einfach, du hast mir den Tipp gegeben:

    RodFromGermany schrieb:

    Da muss Document.Print() zwei Mal aufgerufen werden.


    VB.NET-Quellcode

    1. If .PrinterSettings.IsValid Then
    2. .Print()
    3. System.Threading.Thread.Sleep(5000)
    4. .Print()
    5. Else
    6. MessageBox.Show("Printer not found", "Caution!", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    7. End If


    Ob die 5 Sekunden Pause dazwischen sinnvoll sind oder nicht, sei mal dahingestellt

    Danke