public class PdfHelper
{
int qrWitdh = 110;//二维码宽
int qrHeight = 110;//二维码高
int margin = 15;//上边距,右边距
public PdfHelper()
{
}
/// <summary>
/// jpg文件转换成带着二维码的PDF文件并返回PDF文件
/// </summary>
/// <param name="jpgFile">jpg文件</param>
/// <param name="pdfFile">PDF文件</param>
/// <param name="qrCode">qrCode</param>
/// <returns></returns>
public bool ConvertJPGtoPDFWithQRCode(string jpgFile, string pdfFile, string qrCode)
{
int fontSize = 7;//字体大小
try
{
if (!File.Exists(jpgFile)) return false;
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(jpgFile);
image.SetAbsolutePosition(0, 0);
float x = image.Width;
float y = image.Height;
string temp = Path.GetDirectoryName(pdfFile);
if (!Directory.Exists(temp))
Directory.CreateDirectory(temp);
using (FileStream fs = new FileStream(pdfFile, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
{
Document doc = new Document(image);//生成pdf文件
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
writer.SetFullCompression();
writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_7);
writer.Open();
doc.Open();
doc.SetPageSize(new iTextSharp.text.Rectangle(0, 0, image.Width, image.Height, 0));
doc.NewPage();
PdfContentByte pcb = writer.DirectContent;
pcb.AddImage(image, false);
BarcodeQRCode qrcode = new BarcodeQRCode(qrCode, qrWitdh, qrHeight, null);
iTextSharp.text.Image qrcodeImage = qrcode.GetImage();
qrcodeImage.SetAbsolutePosition(x - qrWitdh - margin, y - qrHeight - margin);
qrcodeImage.ScalePercent(100);
pcb.AddImage(qrcodeImage);
pcb.SaveState();
pcb.BeginText();
string windir = Environment.GetEnvironmentVariable("windir");
string fontPath = Path.Combine(windir, @"fonts\simfang.ttf");
BaseFont bf = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
pcb.SetFontAndSize(bf, fontSize);//这里是fontSize的调用,设置在最上面
string comments = "手机扫码可查阅";
string comment2 = "电子报告和影像";
pcb.ShowTextAligned(iTextSharp.text.Element.ALIGN_LEFT, comments, x - qrWitdh - margin + 30, y - qrHeight - margin + 20, 0);
pcb.ShowTextAligned(iTextSharp.text.Element.ALIGN_LEFT, comment2, x - qrWitdh - margin + 30, y - qrHeight - margin - fontSize + 20, 0);//20 10是定值,fontSize调整这句会跟着相对调整
pcb.EndText();
pcb.RestoreState();
doc.Close();
writer.Close();
}
File.Delete(jpgFile);
}
catch (IOException ep)
{
if (ep.Message.Contains("not a recognized imageformat"))
{
LogHelper.WriteErrorLog(string.Format("文件{0}不是合格的图片文件,跳过处理!", jpgFile));
return false;
}
}
return true;
}
/// <summary>
/// 给pdf文件加二维码,再生成新的pdf
/// 返回新生成的带有二维码的pdf文件
/// </summary>
/// <param name="pdfFileSou">原pdf文件</param>
/// <param name="pdfFileDes">将来新生成的pdf文件</param>
/// <param name="qrCode">二维码中的字符串</param>
/// <returns></returns>
public string AddQRCodeToPdf(string pdfFileSou, string pdfFileDes, string qrCode)
{
PdfReader pdfReader = new PdfReader(pdfFileSou);
iTextSharp.text.Rectangle psize = pdfReader.GetPageSize(1);
string temp = Path.GetDirectoryName(pdfFileDes);
if (!Directory.Exists(temp))
Directory.CreateDirectory(temp);
FileStream fs = new FileStream(pdfFileDes, FileMode.Create);
PdfStamper pdfStamper = new PdfStamper(pdfReader, fs);
BarcodeQRCode qrcode = new BarcodeQRCode(qrCode, qrHeight, qrHeight, null);
iTextSharp.text.Image qrcodeImage = qrcode.GetImage();
qrcodeImage.SetAbsolutePosition(psize.Width - qrWitdh - margin, psize.Height - qrHeight - margin);
qrcodeImage.ScalePercent(100);
PdfContentByte pcb = pdfStamper.GetOverContent(1);//内容上层加水印
pcb.AddImage(qrcodeImage);
pdfStamper.Close();
pdfReader.Close();
return pdfFileDes;
}
/// <summary>
/// 把JPG转化成PDF文件,同时反回PDF文件路经
/// </summary>
/// <param name="jpgFile">被转换的JPG文件</param>
/// <param name="pdfFile">生成的PDF文件</param>
/// <returns></returns>
public string ConvertJPGtoPDF(string jpgFile, string pdfFile)
{
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(jpgFile);
image.SetAbsolutePosition(0, 0);
using (FileStream fs = new FileStream(pdfFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
Document doc = new Document(image);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
writer.SetFullCompression();
writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_7);
writer.Open();
doc.Open();
doc.SetPageSize(new iTextSharp.text.Rectangle(0, 0, image.Width, image.Height, 0));
doc.NewPage();
writer.DirectContent.AddImage(image, false);
doc.Close();
writer.Close();
}
return pdfFile;
}
}
{
int qrWitdh = 110;//二维码宽
int qrHeight = 110;//二维码高
int margin = 15;//上边距,右边距
public PdfHelper()
{
}
/// <summary>
/// jpg文件转换成带着二维码的PDF文件并返回PDF文件
/// </summary>
/// <param name="jpgFile">jpg文件</param>
/// <param name="pdfFile">PDF文件</param>
/// <param name="qrCode">qrCode</param>
/// <returns></returns>
public bool ConvertJPGtoPDFWithQRCode(string jpgFile, string pdfFile, string qrCode)
{
int fontSize = 7;//字体大小
try
{
if (!File.Exists(jpgFile)) return false;
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(jpgFile);
image.SetAbsolutePosition(0, 0);
float x = image.Width;
float y = image.Height;
string temp = Path.GetDirectoryName(pdfFile);
if (!Directory.Exists(temp))
Directory.CreateDirectory(temp);
using (FileStream fs = new FileStream(pdfFile, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
{
Document doc = new Document(image);//生成pdf文件
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
writer.SetFullCompression();
writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_7);
writer.Open();
doc.Open();
doc.SetPageSize(new iTextSharp.text.Rectangle(0, 0, image.Width, image.Height, 0));
doc.NewPage();
PdfContentByte pcb = writer.DirectContent;
pcb.AddImage(image, false);
BarcodeQRCode qrcode = new BarcodeQRCode(qrCode, qrWitdh, qrHeight, null);
iTextSharp.text.Image qrcodeImage = qrcode.GetImage();
qrcodeImage.SetAbsolutePosition(x - qrWitdh - margin, y - qrHeight - margin);
qrcodeImage.ScalePercent(100);
pcb.AddImage(qrcodeImage);
pcb.SaveState();
pcb.BeginText();
string windir = Environment.GetEnvironmentVariable("windir");
string fontPath = Path.Combine(windir, @"fonts\simfang.ttf");
BaseFont bf = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
pcb.SetFontAndSize(bf, fontSize);//这里是fontSize的调用,设置在最上面
string comments = "手机扫码可查阅";
string comment2 = "电子报告和影像";
pcb.ShowTextAligned(iTextSharp.text.Element.ALIGN_LEFT, comments, x - qrWitdh - margin + 30, y - qrHeight - margin + 20, 0);
pcb.ShowTextAligned(iTextSharp.text.Element.ALIGN_LEFT, comment2, x - qrWitdh - margin + 30, y - qrHeight - margin - fontSize + 20, 0);//20 10是定值,fontSize调整这句会跟着相对调整
pcb.EndText();
pcb.RestoreState();
doc.Close();
writer.Close();
}
File.Delete(jpgFile);
}
catch (IOException ep)
{
if (ep.Message.Contains("not a recognized imageformat"))
{
LogHelper.WriteErrorLog(string.Format("文件{0}不是合格的图片文件,跳过处理!", jpgFile));
return false;
}
}
return true;
}
/// <summary>
/// 给pdf文件加二维码,再生成新的pdf
/// 返回新生成的带有二维码的pdf文件
/// </summary>
/// <param name="pdfFileSou">原pdf文件</param>
/// <param name="pdfFileDes">将来新生成的pdf文件</param>
/// <param name="qrCode">二维码中的字符串</param>
/// <returns></returns>
public string AddQRCodeToPdf(string pdfFileSou, string pdfFileDes, string qrCode)
{
PdfReader pdfReader = new PdfReader(pdfFileSou);
iTextSharp.text.Rectangle psize = pdfReader.GetPageSize(1);
string temp = Path.GetDirectoryName(pdfFileDes);
if (!Directory.Exists(temp))
Directory.CreateDirectory(temp);
FileStream fs = new FileStream(pdfFileDes, FileMode.Create);
PdfStamper pdfStamper = new PdfStamper(pdfReader, fs);
BarcodeQRCode qrcode = new BarcodeQRCode(qrCode, qrHeight, qrHeight, null);
iTextSharp.text.Image qrcodeImage = qrcode.GetImage();
qrcodeImage.SetAbsolutePosition(psize.Width - qrWitdh - margin, psize.Height - qrHeight - margin);
qrcodeImage.ScalePercent(100);
PdfContentByte pcb = pdfStamper.GetOverContent(1);//内容上层加水印
pcb.AddImage(qrcodeImage);
pdfStamper.Close();
pdfReader.Close();
return pdfFileDes;
}
/// <summary>
/// 把JPG转化成PDF文件,同时反回PDF文件路经
/// </summary>
/// <param name="jpgFile">被转换的JPG文件</param>
/// <param name="pdfFile">生成的PDF文件</param>
/// <returns></returns>
public string ConvertJPGtoPDF(string jpgFile, string pdfFile)
{
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(jpgFile);
image.SetAbsolutePosition(0, 0);
using (FileStream fs = new FileStream(pdfFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
Document doc = new Document(image);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
writer.SetFullCompression();
writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_7);
writer.Open();
doc.Open();
doc.SetPageSize(new iTextSharp.text.Rectangle(0, 0, image.Width, image.Height, 0));
doc.NewPage();
writer.DirectContent.AddImage(image, false);
doc.Close();
writer.Close();
}
return pdfFile;
}
}