jpg文件转换PDF文件

 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;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值