• Как отпечатать PDF документ с помощью iTextSharp в режиме дуплекса?

    moobzeg
    @moobzeg Автор вопроса
    Поступил немного иначе, сделал с "костылем". С разными задачами почему-то иногда принтер путал очередность, даже есть отправлять с задержкой на него. Просто сделал слияние всего массива (там и имена файлов еще есть) в единый файл. После тех, где надо единственную страницу - добавлял задней частью пустой лист.

    Private Sub btPrintForm_Click(sender As Object, e As EventArgs) Handles btPrintForm.Click
    
            ' Печать всей анкеты
            'Call PrintAllPages(mPDFArray(mInsertCounter).FileName)
            Call LogThis("Печать анкеты " & mPDFArray(mInsertCounter).CaseNumber & " полностью, " & GetPhaseCustom(mPDFArray(mInsertCounter).PageCount, {"страниц", "страница", "страницы"}))
            
            ' Готовимся
            Dim _file As String = Path.Combine(Path.GetTempPath, Guid.NewGuid.ToString & ".pdf")
            Dim _stream As FileStream = New FileStream(_file, FileMode.OpenOrCreate)
            Dim _doc As iTextSharp.text.Document = New iTextSharp.text.Document(iTextSharp.text.PageSize.A4)
            Dim _copy As PdfCopy = New PdfCopy(_doc, _stream)
            Dim _reader As PdfReader = Nothing
            Dim _page As PdfImportedPage = Nothing
    
            ' Для печати анкет
            Dim psi As New ProcessStartInfo
    
            ' Начинаем соединение в один файл
            Call _doc.Open()
    
            ' Если ошибка чтения - пропускаем файл
            Try
                _reader = New PdfReader(mPDFArray(mInsertCounter).FileName)
            Catch ex As Exception When TypeOf ex Is iTextSharp.text.exceptions.InvalidPdfException OrElse
                                        TypeOf ex Is iTextSharp.text.exceptions.IllegalPdfSyntaxException OrElse
                                        TypeOf ex Is iTextSharp.text.exceptions.BadPasswordException OrElse
                                        TypeOf ex Is iTextSharp.text.exceptions.UnsupportedPdfException OrElse
                                        TypeOf ex Is iTextSharp.text.exceptions.InvalidImageException
                ' Ловим ошибку и пропускаем этот файл, иначе встает колом программа
                Exit Sub
            End Try
    
            ' Добавляем обе страницы в наш массив
            For i As Integer = &H1 To &H2
                Call _copy.AddPage(_copy.GetImportedPage(_reader, i))
            Next i
    
            ' Если больше 2 страниц, то добавляем по еще одной для дуплекса
            If mPDFArray(mInsertCounter).PageCount > &H2 Then
                For i As Integer = &H3 To mPDFArray(mInsertCounter).PageCount
                    Call _copy.AddPage(_copy.GetImportedPage(_reader, i))
                    Call _copy.AddPage(iTextSharp.text.PageSize.A4, &H0)
                Next i
            End If
    
            ' Закрываемся
            Call _copy.FreeReader(_reader)
            Call _reader.Close()
    
            ' Закрываемся
            Call _doc.Close()
            Call _stream.Close()
    
            ' На всякий случай, чтоб ошибки не вылетало
            If Not File.Exists(_file) Then Exit Sub
    
            ' Посылаем на принтер по умолчанию
            psi = New ProcessStartInfo
            psi.UseShellExecute = True
            psi.Verb = "print"
            psi.WindowStyle = ProcessWindowStyle.Hidden
            psi.FileName = _file
            Call Process.Start(psi)
    
        End Sub
  • Софт для мониторинга трафика SSD

    moobzeg
    @moobzeg
    а данные ему тоже поменять?)