using iTextSharp.awt.geom; using iTextSharp.text; using iTextSharp.text.pdf; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.util; namespace XYY.Core.Standard.PDF { public static class PDFHelper { public static byte[] SetPdfSize(byte[] data, double x, double y, float width, float height, double angle = 0, int qty = 0, double scale = 1.0) { var ms = new MemoryStream(); PdfReader reader = new PdfReader(data); Document doc = new Document(); doc.SetPageSize(new iTextSharp.text.Rectangle(width, height)); PdfWriter writer = PdfWriter.GetInstance(doc, ms); doc.Open(); PdfContentByte cb = writer.DirectContent; AffineTransform transform = new AffineTransform(); transform.Translate(x, y); transform.Scale(scale, scale); if (angle > 0) transform.SetToRotation(angle); if (qty == 0) qty = reader.NumberOfPages; for (int i = 1; i <= reader.NumberOfPages; i++) { doc.NewPage(); PdfImportedPage page = writer.GetImportedPage(reader, i); cb.AddTemplate(page, transform); } doc.Close(); return ms.ToArray(); } public static byte[] CutOutPackage(byte[] data, int index) { var ms = new MemoryStream(); PdfReader reader = new PdfReader(data); Document doc = new Document(reader.GetPageSizeWithRotation(index)); doc.NewPage(); PdfWriter writer = PdfWriter.GetInstance(doc, ms); doc.Open(); PdfContentByte cb = writer.DirectContent; AffineTransform transform = new AffineTransform(); for (int i = index; i <= index; i++) { PdfImportedPage page = writer.GetImportedPage(reader, i); var rotation = reader.GetPageRotation(index); if (rotation == 90) { cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(index).Height); } else if (rotation == 180) { cb.AddTemplate(page, -1f, 0, 0, -1f, reader.GetPageSizeWithRotation(index).Width, reader.GetPageSizeWithRotation(index).Height); } else if (rotation == 270) { cb.AddTemplate(page, 0, 1f, -1f, 0, reader.GetPageSizeWithRotation(index).Width, 0); } else { cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } } doc.Close(); return ms.ToArray(); } /// /// PDF合并方法 /// /// 输出文件路径 /// 需要合并的PDF文件 /// 是否缩放文件尺寸到第一页 public static byte[] SetPageSize(byte[] data, int width, int height, int rotation) { Document document = new Document(); using (var ms = new System.IO.MemoryStream()) { PdfWriter writer = PdfWriter.GetInstance(document, ms); document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage newPage; var reader = new PdfReader(data); int iPageNum = reader.NumberOfPages; int startPage = 1; while (startPage <= iPageNum) { Rectangle rectrangle = null; rectrangle = new Rectangle(width, height); if (rotation == 90) { rectrangle = new Rectangle(height, width); } document.SetPageSize(rectrangle); document.NewPage(); newPage = writer.GetImportedPage(reader, startPage); if (rotation == 90) { cb.AddTemplate(newPage, 0, -1f, 1f, 0, 0, width); } else if (rotation == 180) { cb.AddTemplate(newPage, -1f, 0, 0, -1f, reader.GetPageSizeWithRotation(startPage).Width, reader.GetPageSizeWithRotation(startPage).Height); } else if (rotation == 270) { cb.AddTemplate(newPage, 0, 1f, -1f, 0, reader.GetPageSizeWithRotation(startPage).Width, 0); } else { cb.AddTemplate(newPage, 1f, 0, 0, 1f, 0, 0); } startPage++; } document.Close(); return ms.ToArray(); } } public static void PDFFileRepeat(string outMergeFile, byte[] file) { if (!string.IsNullOrEmpty(outMergeFile)) { try { if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(outMergeFile))) { System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(outMergeFile)); } var document = new Document(new PdfReader(new MemoryStream(file)).GetPageSizeWithRotation(1)); PdfCopy copy = new PdfCopy(document, new System.IO.FileStream(outMergeFile, FileMode.Create)); document.Open(); PdfReader reader = new PdfReader(file); int n = reader.NumberOfPages;// 获得总页码 for (int j = 1; j <= 2; j++) { document.NewPage(); PdfImportedPage page = copy.GetImportedPage(reader, 1);// 从当前Pdf,获取第j页 copy.AddPage(page); } document.Close(); } catch (Exception ex) { } } } public static void MergePDFFiles(string outMergeFile, List files, bool isStretch = true, int qty = 0) { if (!string.IsNullOrEmpty(outMergeFile)) { try { if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(outMergeFile))) { System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(outMergeFile)); } var document = new Document(new PdfReader(new MemoryStream(files[0])).GetPageSizeWithRotation(1)); PdfCopy copy = new PdfCopy(document, new System.IO.FileStream(outMergeFile, FileMode.Create)); document.Open(); for (int i = 0; i < files.Count; i++) { PdfReader reader = new PdfReader(files[i]); int n = qty == 0 ? reader.NumberOfPages : qty;// 获得总页码 for (int j = 1; j <= n; j++) { document.NewPage(); PdfImportedPage page = copy.GetImportedPage(reader, j);// 从当前Pdf,获取第j页 copy.AddPage(page); } } document.Close(); } catch (Exception ex) { } } } public class InvoiceOrder { public string senderPhone { get; set; } public string senderCountry { get; set; } public string senderState { get; set; } public string senderCity { get; set; } public string senderPostCode { get; set; } public string senderName { get; set; } public string senderCompany { get; set; } public string senderStree { get; set; } public string HSCode { get; set; } public string TackingNumber { get; set; } public string Phone { get; set; } public string Name { get; set; } public string Stree { get; set; } public string Weight { get; set; } public string Number { get; set; } public string EnName { get; set; } public string Country { get; set; } public string Qty { get; set; } public string UV { get; set; } public string SV { get; set; } public string SUV { get; set; } public string SSV { get; set; } public DateTime Time { get; set; } } public static byte[] Zoom(string pdfPath, int width, int height) { System.IO.MemoryStream ms = new MemoryStream(); PdfReader reader = new PdfReader(pdfPath); Document document = new Document(); document.SetPageSize(new Rectangle(new RectangleJ(0, 0, width, height))); PdfWriter writer = PdfWriter.GetInstance(document, ms); document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage page = writer.GetImportedPage(reader, 1); //page #1 float Scale = Math.Max(width / page.Width, height / page.Height); cb.AddTemplate(page, Scale, 0, 0, Scale, 0, 0); document.Close(); //ms.Position = 0; return ms.ToArray(); } public class FCLabelInfo { public string TransferNumber { get; set; } public string TrackngNumber { get; set; } public string TrackngNumber2 { get; set; } public string Name { get; set; } public string Stree { get; set; } public string City { get; set; } public string State { get; set; } public string ReceiverZipCode { get; set; } public string Weight { get; set; } } public static byte[] Watermark(byte[] data, string text, int package, int x, int y, int fontSize, BaseColor color) { try { using (PdfReader pdfReader = new PdfReader(new System.IO.MemoryStream(data))) { using (var outputStream = new System.IO.MemoryStream()) { PdfStamper pdfStamper = new PdfStamper(pdfReader, outputStream); PdfContentByte content; BaseFont font = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); PdfGState gs = new PdfGState(); int numberOfPackage = pdfReader.NumberOfPages; numberOfPackage = package; content = pdfStamper.GetOverContent(numberOfPackage); gs.FillOpacity = 1f; content.SetGState(gs); content.BeginText(); content.SetColorFill(color); content.SetFontAndSize(font, fontSize); content.SetTextMatrix(0, 0); content.ShowTextAligned(Element.ALIGN_LEFT, text, x, y, 0); content.EndText(); pdfStamper.Close(); return outputStream.ToArray(); } } } catch (FileNotFoundException) { throw new InvalidOperationException("Label的PDF文件不存在"); } catch (Exception ex) { throw new InvalidOperationException("水印生成错误" + ex.Message); } } } }