0

itextsharp を使用して pdf ファイルをマージしようとしています。
問題は、マージ前に個々のファイルに適用したトリミングまたは回転が何らかの形で無視されることです。元のファイルはすべてトリミングされ、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()
4

1 に答える 1

0

この質問は、StackOverflow で何度も回答されています。誰もそれを複製として閉じることに投票しなかったのは驚くべきことです.

いずれにせよ、以前に何度も答えたように、ドキュメントをマージするためにPdfWriter/を使用するのは悪い習慣です。iText について私が書いた本の第 6 章PdfImportedPageを読んでください。あなたがコピーしたコード サンプルを提供した人は、すべて間違っていたことがわかります。ではなく、ファイルをマージするために使用する必要があります。PdfCopyPdfWriter

例として、次の StackOverflow の回答をお読みください。

元の回転ページを itextSharp (dll) に保持する方法

(実行時に生成された) 複数の pdf ファイルをマージする方法は?

Itext pdf Merge:pdf(テキストが切り捨てられた)ページの外側にドキュメントがオーバーフローし、表示されない

等々...

この回答を受け入れるのに十分な速さがある場合は、すでに回答された質問を投稿する前にアーカイブを検索しなかったために反対票を投じられないほど幸運です.

于 2013-04-25T17:36:16.363 に答える