Печать 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-файлов.