问题描述:
我现在选中多条记录,然后导出PDF,正确的结果应该是导出多条PDF。但是实际只导出了一个PDF。劳烦各位大佬帮忙看看,有没有处理方案。我折腾了两三天了,硬是没能解决,在线等,万分感激,谢谢。补充:总共就剩下20分了,分数有点少,实在抱歉。源码:#region 下载PDF
/// <summary>
/// 下载PDF
/// </summary>
/// <param name="applicationFormIDs">简历ID</param>
/// <param name="resumeSubmitID">投递ID</param>
/// <param name="resumeType">招聘类型:SocialRecruit:社招;SchoolRecruit:校招;Abbott:委培;OrderRecruit:订单班</param>
/// <returns></returns>
public void GetExportPdfPath(string applicationFormIDs)
{
List<string> applicationFormIDList = applicationFormIDs.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); var paras = _dao.QueryDictionaries("Resume.ApplicationForm.GetExportPDFPara",
new { ApplicationFormIDs = applicationFormIDList }); for (int i = 0; i < paras.Count; i++)
{
string pdfTitle = string.Empty;
string exportName = string.Empty;//导出文件名字:投递岗位+姓名+身份证号后四位 Guid applicationFormID = new Guid(paras[i]["ApplicationFormID"].ToString());
Guid resumeSubmitID = new Guid(paras[i]["resumeSubmitID"].ToString());
string resumeType = paras[i]["ResumeType"].ToString(); string positionName = paras[i]["PositionName"].ToString();//岗位
string candidateName = paras[i]["CandidateName"].ToString();//姓名
string idCardNo = paras[i]["IDcardNo"].ToString();//身份证
string idCardNoFourDigit = idCardNo.Substring(idCardNo.Length - 4, 4);//身份证后四位 exportName = positionName + candidateName + idCardNoFourDigit;//导出文件名字:投递岗位+姓名+身份证号后四位 using (MemoryStream ms = new MemoryStream())
{
using (Document document = new Document())
{
PdfWriter.GetInstance(document, ms);
document.Open();
StreamUtil.AddToResourceSearch(Assembly.Load("iTextAsian"));
StreamUtil.AddToResourceSearch(Assembly.Load("iTextAsianCmaps"));
string fontName = base.Page.Request.Url.Scheme + "://" + base.Page.Request.Url.Host + ":" + base.Page.Request.Url.Port + "/App_Themes/blue_dt/Fonts/simfang.ttf"; var title = string.Empty;
switch (resumeType)
{
case "SocialRecruit"://社招
pdfTitle = "福州地铁集团有限公司福州地铁" + "\n" + "社会招聘报名登记表";//PDF标题
title = ExportSocialRecruitPdf(applicationFormID, resumeSubmitID, resumeType, document, fontName, pdfTitle, exportName);
break;
case "SchoolRecruit"://校招
pdfTitle = "福州地铁集团有限公司福州地铁" + "\n" + "校园招聘报名登记表";//PDF标题
title = ExportSchoolRecruitPdf(applicationFormID, resumeSubmitID, resumeType, document, fontName, pdfTitle, exportName);
break;
case "Abbott"://委培
pdfTitle = "福州地铁集团有限公司福州地铁" + "\n" + "委培招聘报名登记表";//PDF标题
title = ExportSchoolRecruitPdf(applicationFormID, resumeSubmitID, resumeType, document, fontName, pdfTitle, exportName);
break;
case "OrderRecruit"://订单班
pdfTitle = "福州地铁集团有限公司福州地铁" + "\n" + "订单班招聘报名登记表";//PDF标题
title = ExportOrderRecruitPdf(applicationFormID, resumeSubmitID, resumeType, document, fontName, pdfTitle, exportName);
break;
} string fileName = string.Format("{0}.pdf", title);
fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
document.Close();
base.Page.Response.ContentType = "application/pdf";
base.Page.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));
base.Page.Response.Clear();
base.Page.Response.BinaryWrite(ms.GetBuffer());
base.Page.Response.End();
}
}
}
}
#endregion
我现在选中多条记录,然后导出PDF,正确的结果应该是导出多条PDF。但是实际只导出了一个PDF。劳烦各位大佬帮忙看看,有没有处理方案。我折腾了两三天了,硬是没能解决,在线等,万分感激,谢谢。补充:总共就剩下20分了,分数有点少,实在抱歉。源码:#region 下载PDF
/// <summary>
/// 下载PDF
/// </summary>
/// <param name="applicationFormIDs">简历ID</param>
/// <param name="resumeSubmitID">投递ID</param>
/// <param name="resumeType">招聘类型:SocialRecruit:社招;SchoolRecruit:校招;Abbott:委培;OrderRecruit:订单班</param>
/// <returns></returns>
public void GetExportPdfPath(string applicationFormIDs)
{
List<string> applicationFormIDList = applicationFormIDs.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); var paras = _dao.QueryDictionaries("Resume.ApplicationForm.GetExportPDFPara",
new { ApplicationFormIDs = applicationFormIDList }); for (int i = 0; i < paras.Count; i++)
{
string pdfTitle = string.Empty;
string exportName = string.Empty;//导出文件名字:投递岗位+姓名+身份证号后四位 Guid applicationFormID = new Guid(paras[i]["ApplicationFormID"].ToString());
Guid resumeSubmitID = new Guid(paras[i]["resumeSubmitID"].ToString());
string resumeType = paras[i]["ResumeType"].ToString(); string positionName = paras[i]["PositionName"].ToString();//岗位
string candidateName = paras[i]["CandidateName"].ToString();//姓名
string idCardNo = paras[i]["IDcardNo"].ToString();//身份证
string idCardNoFourDigit = idCardNo.Substring(idCardNo.Length - 4, 4);//身份证后四位 exportName = positionName + candidateName + idCardNoFourDigit;//导出文件名字:投递岗位+姓名+身份证号后四位 using (MemoryStream ms = new MemoryStream())
{
using (Document document = new Document())
{
PdfWriter.GetInstance(document, ms);
document.Open();
StreamUtil.AddToResourceSearch(Assembly.Load("iTextAsian"));
StreamUtil.AddToResourceSearch(Assembly.Load("iTextAsianCmaps"));
string fontName = base.Page.Request.Url.Scheme + "://" + base.Page.Request.Url.Host + ":" + base.Page.Request.Url.Port + "/App_Themes/blue_dt/Fonts/simfang.ttf"; var title = string.Empty;
switch (resumeType)
{
case "SocialRecruit"://社招
pdfTitle = "福州地铁集团有限公司福州地铁" + "\n" + "社会招聘报名登记表";//PDF标题
title = ExportSocialRecruitPdf(applicationFormID, resumeSubmitID, resumeType, document, fontName, pdfTitle, exportName);
break;
case "SchoolRecruit"://校招
pdfTitle = "福州地铁集团有限公司福州地铁" + "\n" + "校园招聘报名登记表";//PDF标题
title = ExportSchoolRecruitPdf(applicationFormID, resumeSubmitID, resumeType, document, fontName, pdfTitle, exportName);
break;
case "Abbott"://委培
pdfTitle = "福州地铁集团有限公司福州地铁" + "\n" + "委培招聘报名登记表";//PDF标题
title = ExportSchoolRecruitPdf(applicationFormID, resumeSubmitID, resumeType, document, fontName, pdfTitle, exportName);
break;
case "OrderRecruit"://订单班
pdfTitle = "福州地铁集团有限公司福州地铁" + "\n" + "订单班招聘报名登记表";//PDF标题
title = ExportOrderRecruitPdf(applicationFormID, resumeSubmitID, resumeType, document, fontName, pdfTitle, exportName);
break;
} string fileName = string.Format("{0}.pdf", title);
fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
document.Close();
base.Page.Response.ContentType = "application/pdf";
base.Page.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));
base.Page.Response.Clear();
base.Page.Response.BinaryWrite(ms.GetBuffer());
base.Page.Response.End();
}
}
}
}
#endregion
using ICSharpCode.SharpZipLib.Checksums; 下载一个ICSharpCode.SharpZipLib.dll public class ZipHelp
{
/// <summary>
/// 压缩文件夹
/// </summary>
/// <param name="dirPath">要打包的文件夹</param>
/// <param name="GzipFileName">目标文件名</param>
/// <param name="CompressionLevel">压缩品质级别(0~9)</param>
public static void ZIPDirectory(string dirPath, string GzipFileName, int CompressionLevel)
{
using (ZipOutputStream s = new ZipOutputStream(File.Create(GzipFileName)))
{
s.SetLevel(6);
Compress(dirPath, s);
s.Finish();
s.Close();
}
}
/// <summary>
/// 压缩
/// </summary>
/// <param name="source">源目录</param>
/// <param name="s">ZipOutputStream对象</param>
public static void Compress(string source, ZipOutputStream s)
{
string[] filenames = Directory.GetFileSystemEntries(source);
string inputfilepath = string.Empty;
foreach (string file in filenames)
{
if (Directory.Exists(file))
{
Compress(file, s); //递归压缩子文件夹
}
else
{
using (FileStream fs = File.OpenRead(file))
{
byte[] buffer = new byte[4 * 1024];
//ZipEntry entry = new ZipEntry(file.Replace(Path.GetPathRoot(file), "")); //此处去掉盘符,如D:\123\1.txt 去掉D:
inputfilepath = file.Substring(file.LastIndexOf("\\", file.LastIndexOf("\\")-1));
ZipEntry entry = new ZipEntry(inputfilepath);
entry.DateTime = DateTime.Now;
s.PutNextEntry(entry); int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, 0, buffer.Length);
s.Write(buffer, 0, sourceBytes);
} while (sourceBytes > 0);
}
}
}
}
/// <summary>
/// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略)
/// </summary>
/// <param name="dirPath">被压缩的文件夹夹路径</param>
/// <param name="zipFilePath">生成压缩文件的路径,为空则默认与被压缩文件夹同一级目录,名称为:文件夹名+.zip</param>
/// <param name="err">出错信息</param>
/// <returns>是否压缩成功</returns>
public static bool ZipFile(string dirPath, string zipFilePath, out string err)
{
err = "";
if (dirPath == string.Empty)
{
err = "要压缩的文件夹不能为空!";
return false;
}
if (!Directory.Exists(dirPath))
{
err = "要压缩的文件夹不存在!";
return false;
}
//压缩文件名为空时使用文件夹名+.zip
if (zipFilePath == string.Empty)
{
if (dirPath.EndsWith("//"))
{
dirPath = dirPath.Substring(0, dirPath.Length - 1);
}
zipFilePath = dirPath + ".zip";
} try
{
string[] filenames = Directory.GetFiles(dirPath);
using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))
{
s.SetLevel(9);
byte[] buffer = new byte[4096];
foreach (string file in filenames)
{
ZipEntry entry = new ZipEntry(Path.GetFileName(file));
entry.DateTime = DateTime.Now;
s.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(file))
{
int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, 0, buffer.Length);
s.Write(buffer, 0, sourceBytes);
} while (sourceBytes > 0);
}
}
s.Finish();
s.Close();
}
}
catch (Exception ex)
{
err = ex.Message;
return false;
}
return true;
}
/// <summary>
/// ZIP:解压一个zip文件
///
/// </summary>
/// <param name="ZipFile">需要解压的Zip文件(绝对路径)</param>
/// <param name="TargetDirectory">解压到的目录</param>
/// <param name="Password">解压密码</param>
/// <param name="OverWrite">是否覆盖已存在的文件</param>
public static void UnZip(string ZipFile, string TargetDirectory, string Password, bool OverWrite = true)
{
//如果解压到的目录不存在,则创建目录
if (!System.IO.Directory.Exists(TargetDirectory))
{
Directory.CreateDirectory(TargetDirectory);
}
//目录结尾
if (!TargetDirectory.EndsWith("\\")) { TargetDirectory = TargetDirectory + "\\"; }
using (ZipInputStream zipfiles = new ZipInputStream(File.OpenRead(ZipFile)))
{
zipfiles.Password = Password;
ZipEntry theEntry;
while ((theEntry = zipfiles.GetNextEntry()) != null)
{
string directoryName = "";
string pathToZip = "";
pathToZip = theEntry.Name;
if (pathToZip != "")
directoryName = Path.GetDirectoryName(pathToZip) + "\\";
string fileName = Path.GetFileName(pathToZip);
Directory.CreateDirectory(TargetDirectory + directoryName);
if (fileName != "")
{
if ((File.Exists(TargetDirectory + directoryName + fileName) && OverWrite) || (!File.Exists(TargetDirectory + directoryName + fileName)))
{
using (FileStream streamWriter = File.Create(TargetDirectory + directoryName + fileName))
{
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = zipfiles.Read(data, 0, data.Length);
if (size > 0)
streamWriter.Write(data, 0, size);
else
break;
}
streamWriter.Close();
}
}
}
} zipfiles.Close();
}
}
}
{
using (Document document = new Document())
{
PdfWriter.GetInstance(document, ms);
document.Open();
StreamUtil.AddToResourceSearch(Assembly.Load("iTextAsian"));
StreamUtil.AddToResourceSearch(Assembly.Load("iTextAsianCmaps"));
string fontName = base.Page.Request.Url.Scheme + "://" + base.Page.Request.Url.Host + ":" + base.Page.Request.Url.Port + "/App_Themes/blue_dt/Fonts/simfang.ttf"; string fileName = string.Format("{0}.pdf", title);
fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
document.Close(); //base.Page.Response.ContentType = "application/pdf";
//base.Page.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));
//base.Page.Response.Clear();
base.Page.Response.BinaryWrite(ms.GetBuffer());//返回从其创建此流的无符号字节数组。
//base.Page.Response.End();
}
}
{
int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, 0, buffer.Length);
s.Write(buffer, 0, sourceBytes);
} while (sourceBytes > 0);
}这里原先是从文件流里读,往s里写,你换成从你的流里读,看看行不行。