/***********************
* 说明:PDF签名合成
* 创建人:龚宇超
* 创建日期:2018-06-07
* 修改人:
* 修改日期:
* 修改备注:
* 版本:1.0.0.0
***********************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Lskj.Business.Impl;
using Lskj.Util;
using System.IO;
using iTextSharp.text.pdf;
using System.Runtime.Serialization.Formatters.Binary;
using System.Drawing;
using System.Diagnostics;
using System.Threading;
namespace Lskj.Control.Model
{
public class PdfViewerHelper
{
///
/// 说明:
/// 创建人:龚宇超
/// 创建日期:2018-06-11
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// PDF主键.
/// PDF文件名.
/// PDF路径
public static void CreateNewPdf(int pdfFileId,string pdfFileName, string pdfFilePath)
{
DataTable dt = AttachImpl.GetSignSources(pdfFileId);
if (dt.Rows.Count > 0)
{
//复制一个作为读取模板,源文件作为操作流
string newFilePath =PubUtil.MenuExcelPath + Guid.NewGuid() + ".pdf";
File.Copy(pdfFilePath, newFilePath);
using (Stream outputPdfStream = new FileStream(pdfFilePath, FileMode.Open, FileAccess.Write, FileShare.None))
{
using (PdfReader reader = new PdfReader(newFilePath))
{
PdfStamper stamper = new PdfStamper(reader, outputPdfStream);
foreach (DataRow rowItem in dt.Rows)
{
//iTextSharp.text.Image 获取图片的方法直接传流会出错,先转图片
MemoryStream ms = new MemoryStream((byte[])rowItem["Pic"], 0, ((byte[])rowItem["Pic"]).Length);
BinaryFormatter bf = new BinaryFormatter();
object obj = bf.Deserialize(ms);
ms.Close();
Image pic = obj as Image;
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(pic, pic.RawFormat);
PointF point = new PointF(float.Parse(rowItem["ImageX"] + ""), float.Parse(rowItem["ImageY"] + ""));
PdfContentByte pdfContentByte = stamper.GetOverContent(Convert.ToInt32(rowItem["Page"]) + 1);
float percent = image.Height / image.Width * 100;
image.ScalePercent(Convert.ToInt32(Math.Round(percent)));
image.SetAbsolutePosition(point.X, point.Y);
pdfContentByte.AddImage(image);
}
stamper.Close();
}
}
File.Delete(newFilePath);
}
}
///
/// 说明:验证下载完成(应对不能获取下载完成消息)
/// 创建人:龚宇超
/// 创建日期:2018-06-11
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
public static void VerifyDownLoadFinish(string filePath,string fileName)
{
int i = 0;
//进行20次查找
while (i < 20)
{
try
{
if (File.Exists(filePath) && !SearchProc("LSTest"))
{
//是PDF文件就进行签名合成
if (fileName.Contains(".pdf"))
{
CreateNewPdf(0,fileName, filePath);
}
return;
}
Thread.Sleep(500);
}
catch (Exception ex)
{
throw;
}
i++;
}
}
///
/// 说明:查找进程里面是否还在下载
/// 创建人:龚宇超
/// 创建日期:2018-06-11
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// Name of the string proc.
/// true if XXXX, false otherwise.
public static bool SearchProc(string strProcName)
{
try
{
//精确进程名 用GetProcessesByName
Process[] ps = Process.GetProcessesByName(strProcName);
return ps.Length > 0;
}
catch
{
return false;
}
}
}
}