将PDFStampers中的两个pdf内存流合并为一个内存流,每页2页

时间:2012-12-13 02:18:27

标签: java pdf merge itext memorystream

这是我第一次使用iText5 for .NET,到目前为止一直很成功,除了一项任务。

我创建了两个VB.Net类,每个类都成功返回一个包含单页PDF文档的有效MemoryStream,可以单独返回到浏览器并显示,以及通过电子邮件附加和发送。

我想知道如何将两个流合并为一个包含两页文档的流,以便我可以将文档作为单个附件发送,将流返回到浏览器以显示包含两个页面的一个文档。

此代码将在我的代码隐藏页面中用于在创建后返回并通过电子邮件发送内容。正如您在附加的代码中看到的,我想提供一个包含每个当前文档的单独页面的单个流。在下面的代码中,标识符EitherSingleStream显示了我单独插入每个流的位置,并且代码适用于该单个页面。

有些代码可能是多余的,它是我的第一个用于.NET外出的iText5,任何帮助都将不胜感激。我到目前为止的代码如下。

Private Sub btnSubmit_Click(sender As Object, e As System.EventArgs) Handles btnSubmit.Click
    Dim Emplid As String = txtEMPLID.Text,
        BankInfo As String = txtBankInfo.Text,
        AsOfDate As String = Request.Form("AsOfDate")

    lEmp = New VOELibrary.Employee(Emplid)

    lEmp.EarningsAsOfDate = AsOfDate
    lEmp.EarningsYears = 3
    lEmp.LoadEarningsSummary()
    lEmp.LoadEmploymentHistory()

    ' request logging meta data object
    Dim FormRequest As New VOELibrary.FormRequest

    ' Function that uses first template and Styamper to return first document stream
    Dim FM1005 As New VOELibrary.FannieMae1005(lEmp, BankInfo, UserInfo)
    Dim streamForm1005PDF As MemoryStream = FM1005.PDFStream

    ' Function that uses second template and stamper to return second docuemnt stream
    Dim VOESummary As New VOELibrary.VOESummary(lEmp, UserInfo)
    Dim streamVOESummaryPDF As MemoryStream = VOESummary.PDFStream

    *EitherSingleStream*.Position = 0

    MailPDF(*EitherSingleStream*, FormRequest)

    *EitherSingleStream*.Position = 0

    Dim response As HttpResponse = HttpContext.Current.Response
    response.Clear()
    response.AddHeader("Content-Disposition", "attachment; filename= FM1005.pdf")
    response.ContentType = "application/pdf"
    response.BinaryWrite(*EitherSingleStream*.ToArray())
    response.Flush()
    response.End()

    With FormRequest
        .Req_UID = UserInfo(0).ToString
        .Req_UserName = UserInfo(1).ToString
        .EMPID = lEmp.EmplID
        .FormDate = Date.Now.ToShortDateString
        .Requestor = BankInfo
        .AsOfDate = AsOfDate
        .Log()
    End With
End Sub

1 个答案:

答案 0 :(得分:1)

您可以修改函数以返回PdfPage而不是整个文档,然后将这些页面组合在另一个函数中,并在合并后输出MemoryStream。

那或者您将创建一个函数来获取一个Document数组,然后对于Document中的每个PdfPage,您将向新文档添加一个新页面并返回该文档。

请参阅How to merge different documents into single one?