Поступил немного иначе, сделал с "костылем". С разными задачами почему-то иногда принтер путал очередность, даже есть отправлять с задержкой на него. Просто сделал слияние всего массива (там и имена файлов еще есть) в единый файл. После тех, где надо единственную страницу - добавлял задней частью пустой лист.
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