Fabrizio Leoncini Ответов: 1

Печать PDF файл напрямую, не открывая печати dilogbox и установить формата А4


Доброе утро
Пожалуйста, не могли бы вы рассказать мне, как распечатать PDF-файл непосредственно, не открывая диалоговое окно печати и не устанавливая размер бумаги формата А4? Что касается первой части моего вопроса, то на самом деле я нашел много примеров, я сделал класс, который печатает файлы, но часто печатает их не в формате А4. Поэтому я хотел бы иметь возможность установить формат А4 перед печатью, а также проверить, есть ли в PDF-файле более одной страницы, и, возможно, распечатать вторую страницу. Я попытался посмотреть, можно ли это сделать с помощью ITextSharp, но не понял, можно ли это сделать с существующим файлом.
Большое спасибо за любую помощь, которую вы хотите мне оказать.
Фабрицио

Что я уже пробовал:

Imports Microsoft.VisualBasic
Imports System.Drawing.Printing
Imports System.IO


Public Class StampaPDF

    'CLASSE CHE STAMPA I PDF SENZA APRIRE I FILE

    Public Sub New(ByVal args As String)

        Dim PathDisegni As String = args

        Dim mioPdf As New Pdf
        Dim files() As String = Directory.GetFiles(PathDisegni)

        'Variabile predicate con lambda func con parametri che passa una stringa e ritorna un boolean
        Dim predicate As Func(Of String, Boolean) = Function(file) file.Contains(".pdf")

        For Each file As String In files.Where(predicate)
            mioPdf.PrintPDFs2(file)
        Next

    End Sub

End Class

Public Class Pdf

    'Dichiara i PrinterSetting
    Public Shared defaultPrinterSetting As PrinterSettings = Nothing

    Public Function PrintPDFs(ByVal pdfFileName As String) As Boolean

        Try
            Dim psi As New System.Diagnostics.ProcessStartInfo()
            psi.UseShellExecute = True
            psi.Verb = "print"
            psi.WindowStyle = ProcessWindowStyle.Hidden
            psi.FileName = pdfFileName
            Dim myProcess As System.Diagnostics.Process
            myProcess = System.Diagnostics.Process.Start(psi)
            myProcess.WaitForInputIdle()
            Dim localProces As Diagnostics.Process = Diagnostics.Process.GetProcessById(myProcess.Id)
            localProces.CloseMainWindow()
            localProces.Close()
            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

    Public Shared Async Function PrintPDFs2(ByVal pdfFileName As String) As Task(Of Boolean)
        Try

            Dim DocPrinter As New DocumentPrinter
            'Ottiene la stampante di default del sistema
            defaultPrinterSetting = Await DocPrinter.GetDefaultPrinterSetting

            'Togliere il commento se si vuole cambiare la stampante di default prima di stampare
            'DocumentPrinter.ChangePrinterSettings(defaultPrinterSetting)

            'Stampa il file 
            If (Await DocPrinter.PrintFile(pdfFileName, defaultPrinterSetting)) Then
                MsgBox("Il Disegno è stato stampato !!")
            Else
                MsgBox("Il Disegno NON è stato stampato !!")
            End If

        Catch ex As Exception
            MsgBox(ex.Message.ToString)
        End Try

    End Function

End Class

Public NotInheritable Class DocumentPrinter

    Shared Sub New()

    End Sub

    Public Shared Async Function PrintFile(ByVal fileName As String, printerSetting As PrinterSettings) As Task(Of Boolean)

        Dim printProcess As Process = Nothing
        Dim printed As Boolean = False

        Try
            If printerSetting IsNot Nothing Then
                Dim startInfo As New ProcessStartInfo()
                startInfo.Verb = "Print"
                startInfo.Arguments = Pdf.defaultPrinterSetting.PrinterName ' <----Stampante da usare---- 
                startInfo.FileName = fileName
                startInfo.UseShellExecute = True
                startInfo.CreateNoWindow = True
                startInfo.WindowStyle = ProcessWindowStyle.Hidden

                Using print As System.Diagnostics.Process = Process.Start(startInfo)
                    'Chiude l'applicazione dopo x millisecondi con  WaitForExit(X)
                    '  print.WaitForExit(10000)
                    If print.HasExited = False Then
                        If print.CloseMainWindow() Then
                            printed = True
                        Else
                            printed = True
                        End If
                    Else
                        printed = True
                    End If
                    print.Close()
                End Using
            Else
                Throw New Exception("La Stampante NON è stata trovata nel sistema...")
            End If

        Catch ex As Exception
            Throw
        End Try
        Return printed
    End Function

    ''' <summary>
    ''' Ottieni le impostazioni predefinite della stampante nel sistema
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Async Function GetDefaultPrinterSetting() As Task(Of PrinterSettings)

        Dim defaultPrinterSetting As PrinterSettings = Nothing

        For Each printer As String In PrinterSettings.InstalledPrinters

            defaultPrinterSetting = New System.Drawing.Printing.PrinterSettings
            defaultPrinterSetting.PrinterName = printer

            If defaultPrinterSetting.IsDefaultPrinter Then
                Return defaultPrinterSetting
            End If

        Next

        Return defaultPrinterSetting

    End Function

End Class

EricERankin

Вы можете обратиться к этому Печать PDF-файлов на языке C# и VB.NET.
Обратите внимание, что вы можете найти примеры для консольных приложений, Windows Forms и WPF, все они используют одно и то же C# и VB.NET библиотека для PDF-файлов.

1 Ответов

Рейтинг:
1

RamiroX

defaultPrinterSetting.PrinterName = printer

defaultPrinterSetting.DefaultPageSettings.PaperSize.RawKind = System.Drawing.Printing.PaperKind.A4


Fabrizio Leoncini

Большое спасибо
Фабрицио