亲爱的我已经在vb.net和asp.net应用程序中创建了一个函数,其中
从前端开始,用户选择页面中列出的多个文件名(通过复选框)(list.aspx)并单击导出按钮以查看单个pdf文件中的所有文档2-系统从数据库中获取这些文件,
3-系统将它们转换为pdf文件格式和
4-系统将这些pdf文件合并为一个pdf文件。
当list.aspx页面中有人点击导出cv时,它会执行此代码
window.location.href = 'export-cvs.aspx?v=' + vid + '&a=' + appids.toString();
在export-cvs.aspx页面中执行以下代码
<object id="cvFrame" width="100%" height="500px" type="application/pdf" data="preview-bulk-cv.ashx?v=<%= Vacancy.ID%>&a=<%= Request("a") %>"></object>
主要代码位于preview-bulk-cv.ashx页面中,如下所示。
Imports System
Imports System.Web
Imports System.IO
Imports System.Collections.Generic
Imports Ionic.Zip
Imports System.Linq
Imports NLog
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports System.Text.RegularExpressions
Public Class PDFMerge : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim _logger As Logger = LogManager.GetCurrentClassLogger()
Dim vacancy = New Vacancy(context.Request("v"))
Dim sourceFiles = New List(Of String)()
For Each docPath As String In From row As DataRow In DB.GetData("select guid, originalfilename from document where id in (select candidatecvid from vacancyapplication where id in (" & context.Request("a").ToString() & "))").Rows Let guid = row.Item("guid").ToString() Select HttpContext.Current.Server.MapPath("~/documents") & "\" & Left(guid, 1) & "\" & Right(guid, 1) & "\" & guid & "." & System.IO.Path.GetExtension(row.Item("originalfilename")).ToLower().Substring(1)
Dim epath As String = HttpContext.Current.Server.MapPath("~/Downloads") & "\" & Now.ToString("yyyy-MMM-dd") & "\" & vacancy.Title.Replace(" ", "_") & "\" & Now.ToString("yyyy-MMM-dd-HHmmss") & ".pdf"
Converter.ConvertDocument(docPath, epath)
If File.Exists(epath) Then
sourceFiles.Add(epath)
End If
Next
Dim OutputFileName As String = HttpContext.Current.Server.MapPath("~/Downloads") & "\" & Now.ToString("yyyy-MMM-dd") & "\" & vacancy.Title.Replace(" ", "_") & "\" & vacancy.Title.Replace(" ", "_") & ".pdf"
PDFMerge.MergeFiles(OutputFileName, sourceFiles.ToArray)
Dim mPDFFile As FileStream = File.OpenRead(OutputFileName)
Dim mPDFFileBuffer(mPDFFile.Length - 1) As Byte
mPDFFile.Read(mPDFFileBuffer, 0, mPDFFileBuffer.Length)
mPDFFile.Close()
System.Diagnostics.Process.Start(OutputFileName)
context.Response.Clear()
context.Response.ContentType = "application/pdf"
context.Response.AddHeader("Content-Disposition", "attachment;filename=" & OutputFileName)
context.Response.AddHeader("Content-Length", mPDFFileBuffer.Length)
context.Response.OutputStream.Write(mPDFFileBuffer, 0, mPDFFileBuffer.Length)
mPDFFileBuffer = Nothing
context.Response.Flush()
context.Response.End()
End Sub
End Class
在foreach循环中,数据库查询正在提取文档名称,在循环内部文档被转换为pdf文档并添加到数组字符串中。
当我在流程请求函数中添加断点并通过一个语句读取一个语句来调试代码时,此循环非常有效。
但是当我撤回断点并正常执行代码时,大部分时间循环只迭代一次。 (很少有人工作)。当我打开最后的pdf文件时,我发现它已经合并了相同的文件x次。(x是用户选择的文件数)
即如果用户选择了3个文件名,则每个循环读取第一个文件并转换为pdf。它不会读取下两个文件,因此不会将它们转换为pdf文件。但在合并的pdf文件中,第一个文件出现3次。
所以系统可以看到有3个文件。但它仅采用第一份文件并将其合并到最终文件中3次。
再次循环在调试代码时起作用,但在执行代码时不起作用。
我该如何解决?请帮忙..