c#使用pdfSharp制作pdf(条形码+图片+去除水印)

 需要引用的主键:

1.using PdfSharp;

  try {
                string png1 = Application.StartupPath + @"\aramexConfig\Png\top.jpg";
                string png2 = Application.StartupPath+ @"\aramexConfig\Png\down.jpg";
                Dictionary<string, object> aramexShippmentMap = (Dictionary<string, object>)obj;
                AramexShippment aramexShippment =(AramexShippment)aramexShippmentMap["aramexShippment"];
                string labelPath = aramexShippmentMap["labelPath"].ToString();
                string labelName = aramexShippmentMap["labelName"].ToString();
                if (File.Exists(labelPath+ labelName+ ".JPG"))
                {//文件存在就删除
                    File.Delete(labelPath + labelName + ".JPG");
                }
                int margin_left_right = 50;//左右边距
                int margin_top_bottom = 80;//上下边距(这个高度尽量不动,可以去除水印)
                //1. 定义文档对象
                PdfDocument document = new PdfDocument();
                //2. 新增一页
                PdfPage page = document.AddPage();
                // 设置纸张大小
                page.Size = PageSize.A4;
                //3. 创建一个绘图对象
                XGraphics gfx = XGraphics.FromPdfPage(page);

                XFont font = new XFont("华文宋体", 10, XFontStyle.Bold);
                //定制化内容开始
                int cur_x = 0 + margin_left_right;
                int cur_y = 0 + margin_top_bottom - 30;
                int end_cur_x = cur_x + 250;//横向最大值
                double ContentWight = (page.Width - 2 * cur_x - 10);
                //自动换行参数
                int cnt = 0;
                int height = 0;
                string new_content = "";
                int total_lines = 0;

                cur_y = cur_y + 10;
                
                XImage im = XImage.FromFile(png1);
                gfx.DrawImage(im, cur_x, cur_y, cur_x + 70, 30);
                cur_y = cur_y + 30;
                gfx.DrawString("热线电话 020-83512000", font, XBrushes.Black, new XRect(cur_x, cur_y, cur_x + 70, 20), XStringFormats.CenterLeft);
                //一条横线
                cur_y = cur_y + 50;
                XPen pen = new XPen(XColor.FromKnownColor(XKnownColor.Black), 1);
                gfx.DrawLine(pen, cur_x, cur_y, page.Width - cur_x, cur_y);
                font = new XFont("华文宋体", 8, XFontStyle.Regular);
                cur_y = cur_y + 5;
                gfx.DrawString(" 件数 Packages", font, XBrushes.Black, new XRect(cur_x, cur_y, 50, 10), XStringFormats.CenterLeft);
                gfx.DrawString(aramexShippment.PCS, font, XBrushes.Black, new XRect(cur_x+5, cur_y + 15, 50, 10), XStringFormats.CenterLeft);
                gfx.DrawString(" 重量 Weight ", font, XBrushes.Black, new XRect(end_cur_x - 30, cur_y, 50, 10), XStringFormats.CenterLeft);
                gfx.DrawString(aramexShippment.Weight+" KG", font, XBrushes.Black, new XRect(end_cur_x - 26, cur_y + 13, 50, 10), XStringFormats.CenterLeft);
                gfx.DrawString(" 价值 Value ", font, XBrushes.Black, new XRect(page.Width - 2 * cur_x - 30, cur_y, 50, 10), XStringFormats.CenterLeft);
                gfx.DrawString(aramexShippment.DeclaredValue+" "+ aramexShippment.DeclaredCurrency, font, XBrushes.Black, new XRect(page.Width - 2 * cur_x - 26, cur_y + 13, 50, 10), XStringFormats.CenterLeft);
                //竖线
                gfx.DrawLine(pen, cur_x, cur_y - 5, cur_x, cur_y + 260);//左
                gfx.DrawLine(pen, page.Width - cur_x, cur_y - 5, page.Width - cur_x, cur_y + 260);//右
                //横线
                cur_y = cur_y + 40;
                gfx.DrawLine(pen, cur_x, cur_y, page.Width - cur_x, cur_y);
                //计算矩形
                XTextFormatter tf = new XTextFormatter(gfx);
                //发件人
                string shipperStr = aramexShippment.ShipperAdd1+","+ aramexShippment.OriginCity+","+ aramexShippment.OriginState+","+ aramexShippment.OriginCountry;
                gfx.DrawString(" 寄件人 From: "+ aramexShippment.ShipperEnglish+" /"+ aramexShippment.ShipperContact, font, XBrushes.Black, new XRect(cur_x, cur_y + 5, 50, 10), XStringFormats.CenterLeft);
                XRect rect = new XRect(cur_x, cur_y + 20, ContentWight, 40);
                tf.DrawString(GetNewContent(shipperStr, gfx, ContentWight, ref cnt, ref height, ref new_content, ref total_lines), font, XBrushes.Black, rect, XStringFormats.TopLeft);

                //gfx.DrawString(shipperStr, font, XBrushes.Black, new XRect(cur_x, cur_y + 5, page.Width - 2 * cur_x - 30, 50), XStringFormats.CenterLeft);
                cur_y = cur_y + 50;
                gfx.DrawLine(pen, cur_x, cur_y, page.Width - cur_x, cur_y);
                //收件人
                string consignstr = aramexShippment.CneeAdd1 + "," + aramexShippment.CneeCity + "," + aramexShippment.CneeState + "," + aramexShippment.DestCountry;
                gfx.DrawString(" 收件人 ShipTo: " + aramexShippment.Consignee + " /" + aramexShippment.CneeContact , font, XBrushes.Black, new XRect(cur_x, cur_y + 5, 50, 10), XStringFormats.CenterLeft);
                rect = new XRect(cur_x, cur_y + 20, ContentWight, 40);
                tf.DrawString(GetNewContent(consignstr, gfx, ContentWight, ref cnt, ref height, ref new_content, ref total_lines), font, XBrushes.Black, rect, XStringFormats.TopLeft);
                gfx.DrawString(" + "+ aramexShippment.CneeTel, font, XBrushes.Black, new XRect(cur_x, cur_y + 50, 30, 5), XStringFormats.CenterLeft);
                cur_y = cur_y + 60;
                gfx.DrawLine(pen, cur_x, cur_y, page.Width - cur_x, cur_y);
                //内件品名
                string descriptionItems = aramexShippment.DescriptionEN;
                gfx.DrawString(" 内物品名 Description ", font, XBrushes.Black, new XRect(cur_x, cur_y + 5, 50, 10), XStringFormats.CenterLeft);
                rect = new XRect(cur_x, cur_y + 20, ContentWight, 40);
                tf.DrawString(GetNewContent(descriptionItems, gfx, ContentWight, ref cnt, ref height, ref new_content, ref total_lines), font, XBrushes.Black, rect, XStringFormats.TopLeft);
                gfx.DrawString("参考号:«参考号»", font, XBrushes.Black, new XRect(page.Width - 2 * cur_x - 30, cur_y + 50, 30, 5), XStringFormats.CenterLeft);
                cur_y = cur_y + 60;
                gfx.DrawLine(pen, cur_x, cur_y, page.Width - cur_x, cur_y);
                //条形码
                font = new XFont("Free 3 of 9 Extended", 35, XFontStyle.Regular);
                gfx.DrawString("*"+ aramexShippment .HAWBHAWB+ "*", font, XBrushes.Black, new XRect(cur_x + 170, cur_y, page.Width - 2 * cur_x - 30, 40), XStringFormats.CenterLeft);
                //单号
                cur_y = cur_y + 30;
                font = new XFont("AdobeSongStd-Light", 20, XFontStyle.Regular);
                gfx.DrawString(aramexShippment.HAWBHAWB, font, XBrushes.Black, new XRect(cur_x + 190, cur_y, page.Width - 2 * cur_x - 30, 20), XStringFormats.CenterLeft);

                cur_y = cur_y + 20;
                gfx.DrawLine(pen, cur_x, cur_y, page.Width - cur_x, cur_y);
              
                XImage im2 = XImage.FromFile(png2);
                gfx.DrawImage(im2, page.Width - 2 * cur_x - 110, cur_y + 10, 140, 30);

                //document.Save(labelPath);//保存到本地的pdf
                MemoryStream outstream = new MemoryStream();
                document.Save(outstream);//保存到缓存流中
                outstream.Close();
                document.Close();
            } catch (Exception ex) {
               string error=ex.Message.ToString();
            }

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 PdfSharp 库中的 PdfDocument、PdfPage 和 XGraphics 对象来替换 PDF 文档中的文本。 以下是一个示例代码,演示如何替换 PDF 文档中的文本: ```c# using PdfSharp.Pdf; using PdfSharp.Drawing; // 打开一个 PDF 文档 PdfDocument document = PdfReader.Open("input.pdf", PdfDocumentOpenMode.Modify); // 遍历每个页面 foreach (PdfPage page in document.Pages) { // 创建一个 XGraphics 对象,用于绘制在页面上 XGraphics gfx = XGraphics.FromPdfPage(page); // 遍历页面中的所有文本框 foreach (var content in page.Contents.Elements.OfType<PdfSharp.Pdf.Advanced.PdfContentStream>().SelectMany(x => x.Operations).Where(x => x.Operator == PdfSharp.Pdf.IO.PdfOperator.ShowText)) { // 获取文本框中的文本 string text = content.Operands[0].ToString(); // 如果文本匹配要替换的文本,则进行替换 if (text == "要替换的文本") { // 创建一个新文本框 XRect rect = new XRect(content.Position.X, content.Position.Y, gfx.MeasureString("替换后的文本").Width, gfx.MeasureString("替换后的文本").Height); gfx.DrawString("替换后的文本", new XFont("Arial", 12), XBrushes.Black, rect); // 在 PDF 页面上删除旧的文本框 page.Contents.Elements.Remove(content); // 将新的文本框添加到 PDF 页面上 page.Contents.Elements.Add(new PdfSharp.Pdf.Advanced.PdfContentStream(gfx.PdfPage)); } } } // 保存修改后的 PDF 文档 document.Save("output.pdf"); ``` 替换 PDF 文档中的文本可能会涉及到字体和排版等问题,需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值