itextsharp слияние изменяет размеры и разворачивает pdf

Я пытаюсь объединить файлы PDF с помощью itextsharp.
Проблема заключается в том, что любая обрезка или поворот, которые я применил к отдельным файлам до объединения, каким-то образом игнорируются. Все исходные файлы были обрезаны и повернуты как TIFF, а затем преобразованы в pdf, и теперь, наконец, я пытаюсь их объединить.
Я хочу, чтобы размер страницы соответствовал добавленному содержимому, и я хотел бы, чтобы любой поворот, который я применил, пришел через.'

Спасибо за любую помощь,
Корбин де Брюин.

Public Function MergePDFFiles(FileList As Dictionary(Of String, String), DeleteOldFile As Boolean) As Byte()
    ' Public Function MergePDFFiles(FileList As Dictionary(Of String, String), DeleteOldFile As Boolean) As MemoryStream()
    Dim document As New Document()
    Dim output As New MemoryStream()
    Try
        Dim writer As PdfWriter = PdfWriter.GetInstance(document, output)
        writer.PageEvent = New PdfPageEvents()
        document.Open()
        Dim content As PdfContentByte = writer.DirectContent
        ' foreach
        For Each FilePath As KeyValuePair(Of String, String) In FileList
            If File.Exists(FilePath.Value) Then
                Dim reader As New PdfReader(FilePath.Value)
                Dim numberOfPages As Integer = reader.NumberOfPages
                For currentPageIndex As Integer = 1 To numberOfPages
                    document.SetPageSize(reader.GetPageSizeWithRotation(currentPageIndex))
                    document.NewPage()

                    ' you can see iTextSharp.tutorial.01 - 0403sample
                    If currentPageIndex.Equals(1) Then
                        Dim par As New Paragraph(FilePath.Key)
                        Debug.Print("FilePath.Key = " & FilePath.Key)
                        Dim bookmark As New Chapter(par, 0) With {.NumberDepth = 0}
                        document.Add(bookmark)
                    End If

                    Dim importedPage As PdfImportedPage = writer.GetImportedPage(reader, currentPageIndex)

                    Dim pageOrientation As Integer = reader.GetPageRotation(currentPageIndex)
                    If (pageOrientation = 90) OrElse (pageOrientation = 270) Then
                        content.AddTemplate(importedPage, 0, 1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(currentPageIndex).Height)
                    Else
                        content.AddTemplate(importedPage, 1.0F, 0, 0, 1.0F, 0, 0)
                    End If

                Next
            End If
        Next
    Catch exception As Exception
        Debug.Print("Failure")
    Finally
        document.Close()
    End Try

    If DeleteOldFile Then
        'Delete(FileList)
    End If

    Return output.GetBuffer()

End Function


    End Try

    If DeleteOldFile Then
        'Delete(FileList)
    End If

    Return output.GetBuffer()

person Corbin de Bruin    schedule 25.04.2013    source источник


Ответы (1)


На этот вопрос снова и снова отвечали на StackOverflow. Удивительно, что никто не проголосовал за то, чтобы закрыть его как дубликат.

В любом случае: как я уже много раз отвечал, использование PdfWriter/PdfImportedPage для слияния документа является плохой практикой. Прочтите главу 6 книги, которую я написал об iText, и вы обнаружите, что кто бы ни предоставил вам образец кода, который вы скопировали, он был неправ. Вы должны использовать PdfCopy для объединения файлов, а не PdfWriter!

Например, прочитайте следующие ответы StackOverflow:

Как сохранить исходную страницу поворота в itextSharp (dll )

Как объединить несколько файлов PDF (сгенерированных во время выполнения)?

Itext pdf Объединение: документ выходит за пределы страницы PDF (текст усечен) и не отображается

и так далее...

Если вы достаточно быстро примете этот ответ, вам, вероятно, повезет, и вас не проголосуют за то, что вы не искали в архивах, прежде чем опубликовать уже отвеченный вопрос.

person Bruno Lowagie    schedule 25.04.2013
comment
Я искал в архивах и нашел похожие ответы. Я признаю и извиняюсь, я не хотел отклоняться далеко от примера, который получил. Я потратил всего около полдня, не зная, что такое itextsharp, до успешного программного слияния PDF-файлов. Я все еще новичок, так что это было важно для меня. Я рассмотрю ваше решение. - person Corbin de Bruin; 26.04.2013