GetPageRotation() private method

private GetPageRotation ( PdfDictionary page ) : int
page PdfDictionary
return int
示例#1
1
        public static byte[] MergePdfs(IEnumerable<byte[]> inputFiles)
        {
            MemoryStream outputStream = new MemoryStream();
            Document document = new Document();
            PdfWriter writer = PdfWriter.GetInstance(document, outputStream);
            document.Open();
            PdfContentByte content = writer.DirectContent;

            foreach (byte[] input in inputFiles)
            {
                PdfReader reader = new PdfReader(input);
                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    document.SetPageSize(reader.GetPageSizeWithRotation(i));
                    document.NewPage();
                    PdfImportedPage page = writer.GetImportedPage(reader, i);
                    int rotation = reader.GetPageRotation(i);
                    if (rotation == 90 || rotation == 270)
                    {
                        content.AddTemplate(page, 0, -1f, 1f, 0, 0,
                            reader.GetPageSizeWithRotation(i).Height);
                    }
                    else
                    {
                        content.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }
                }
            }

            document.Close();

            return outputStream.ToArray();
        }
示例#2
0
// ---------------------------------------------------------------------------
    public void Write(Stream stream) {
      // Use old example to create PDF
      MovieTemplates mt = new MovieTemplates();
      byte[] pdf = Utility.PdfBytes(mt);
      using (ZipFile zip = new ZipFile()) { 
        using (MemoryStream ms = new MemoryStream()) {
          // step 1
          using (Document document = new Document()) {
            // step 2
            PdfWriter writer = PdfWriter.GetInstance(document, ms);
            // step 3
            document.Open();
            // step 4
            PdfPTable table = new PdfPTable(2);
            PdfReader reader = new PdfReader(pdf);
            int n = reader.NumberOfPages;
            PdfImportedPage page;
            for (int i = 1; i <= n; i++) {
              page = writer.GetImportedPage(reader, i);
              table.DefaultCell.Rotation = -reader.GetPageRotation(i);
              table.AddCell(Image.GetInstance(page));
            }
            document.Add(table);
          }
          zip.AddEntry(RESULT, ms.ToArray());           
        }
        zip.AddEntry(Utility.ResultFileName(mt.ToString() + ".pdf"), pdf);
        zip.Save(stream);
      }      
    }
示例#3
0
        public void AddPdf(string sInFilePath, ref iTextSharp.text.Document oPdfDoc, ref PdfWriter oPdfWriter)
        {
            iTextSharp.text.pdf.PdfContentByte oDirectContent = oPdfWriter.DirectContent;
            iTextSharp.text.pdf.PdfReader      oPdfReader     = new iTextSharp.text.pdf.PdfReader(sInFilePath);
            int iNumberOfPages = oPdfReader.NumberOfPages;
            int iPage          = 0;

            while ((iPage < iNumberOfPages))
            {
                iPage += 1;

                int iRotation = oPdfReader.GetPageRotation(iPage);
                iTextSharp.text.pdf.PdfImportedPage oPdfImportedPage = oPdfWriter.GetImportedPage(oPdfReader, iPage);
                oPdfDoc.SetPageSize(oPdfReader.GetPageSizeWithRotation(iPage));
                oPdfDoc.NewPage();

                if ((iRotation == 90) | (iRotation == 270))
                {
                    oDirectContent.AddTemplate(oPdfImportedPage, 0, -1f, 1f, 0, 0, oPdfReader.GetPageSizeWithRotation(iPage).Height);
                }
                else
                {
                    oDirectContent.AddTemplate(oPdfImportedPage, 1f, 0, 0, 1f, 0, 0);
                }
            }
        }
 // ---------------------------------------------------------------------------
 /**
  * Inspect a PDF file and write the info to a txt file
  * @param writer StringBuilder
  * @param pdf PDF file bytes
  * @param fileName PDF filename
  */
 public static void Inspect(StringBuilder sb, byte[] pdf, string fileName)
 {
     PdfReader reader = new PdfReader(pdf);
     sb.Append(fileName);
     sb.Append(Environment.NewLine);
     sb.Append("Number of pages: ");
     sb.Append(reader.NumberOfPages);
     sb.Append(Environment.NewLine);
     Rectangle mediabox = reader.GetPageSize(1);
     sb.Append("Size of page 1: [");
     sb.Append(mediabox.Left);
     sb.Append(',');
     sb.Append(mediabox.Bottom);
     sb.Append(',');
     sb.Append(mediabox.Right);
     sb.Append(',');
     sb.Append(mediabox.Top);
     sb.Append("]");
     sb.Append(Environment.NewLine);
     sb.Append("Rotation of page 1: ");
     sb.Append(reader.GetPageRotation(1));
     sb.Append(Environment.NewLine);
     sb.Append("Page size with rotation of page 1: ");
     sb.Append(reader.GetPageSizeWithRotation(1));
     sb.Append(Environment.NewLine);
     sb.Append("Is rebuilt? ");
     sb.Append(reader.IsRebuilt().ToString());
     sb.Append(Environment.NewLine);
     sb.Append("Is encrypted? ");
     sb.Append(reader.IsEncrypted().ToString());
     sb.Append(Environment.NewLine);
     sb.Append(Environment.NewLine);
 }
示例#5
0
        public void AddFile(string fileName)
        {
            var reader = new PdfReader(fileName);

            for (var i = 1; i <= reader.NumberOfPages; i++)
            {
                var size = reader.GetPageSizeWithRotation(i);
                _document.SetPageSize(size);
                _document.NewPage();

                var page = _writer.GetImportedPage(reader, i);
                var rotation = reader.GetPageRotation(i);

                switch (rotation)
                {
                    case 90:
                        _writer.DirectContent.AddTemplate(page, 0, -1, 1, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                        break;
                    // TODO case 180
                    case 270:
                        _writer.DirectContent.AddTemplate(page, 0, 1, -1, 0, reader.GetPageSizeWithRotation(i).Width, 0);
                        break;
                    default:
                        _writer.DirectContent.AddTemplate(page, 0, 0);
                        break;
                }
            }

            reader.Close();
        }
示例#6
0
文件: Form9.cs 项目: Spritutu/ntxx
 public string MergeMultiplePDFsToPDF(string[] fileList, string outMergeFile)
 {
     string returnStr = "";
     try
     {
         int f = 0;
         // we create a reader for a certain document
         PdfReader reader = new PdfReader(fileList[f]);
         // we retrieve the total number of pages
         int n = reader.NumberOfPages; //There are " + n + " pages in the original file.
         // step 1: creation of a document-object
         Document document = new Document(reader.GetPageSizeWithRotation(1));
         // step 2: we create a writer that listens to the document
         PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outMergeFile, FileMode.Create));
         // step 3: we open the document
         document.Open();
         PdfContentByte cb = writer.DirectContent;
         PdfImportedPage page;
         int rotation;
         // step 4: we add content
         while (f < fileList.Length)
         {
             int i = 0;
             while (i < n)
             {
                 i++;
                 document.SetPageSize(reader.GetPageSizeWithRotation(i));
                 document.NewPage();
                 page = writer.GetImportedPage(reader, i);
                 rotation = reader.GetPageRotation(i);
                 if (rotation == 90 || rotation == 270)
                 {
                     cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                 }
                 else
                 {
                     cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                 }
                 //Processed page i
             }
             f++;
             if (f < fileList.Length)
             {
                 reader = new PdfReader(fileList[f]);
                 // we retrieve the total number of pages
                 n = reader.NumberOfPages; //There are " + n + " pages in the original file.
             }
         }
         // step 5: we close the document
         document.Close();
         returnStr = "Succeed!";
     }
     catch (Exception e)
     {
         returnStr += e.Message + "<br />";
         returnStr += e.StackTrace;
     }
     return returnStr;
 }
示例#7
0
        void CreatePdf(string input_path, IList<int> pages, string output_path)
        {
            // open a reader for the source file
            PdfReader reader = new PdfReader(input_path);

            try
            {
                reader.RemoveUnusedObjects();

                // get output file
                using (var fs = new FileStream(output_path, FileMode.Create, FileAccess.Write))
                {
                    // create input document
                    var input_doc = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(pages[0]));
                    // create the writer
                    PdfWriter writer = PdfWriter.GetInstance(input_doc, fs);
                    try
                    {
                        writer.SetFullCompression();
                        input_doc.Open();
                        try
                        {
                            // for each page copy the page directly from the reader into the writer
                            PdfContentByte cb = writer.DirectContent;
                            foreach (int page_number in pages)
                            {
                                input_doc.SetPageSize(reader.GetPageSizeWithRotation(page_number));
                                input_doc.NewPage();

                                PdfImportedPage page = writer.GetImportedPage(reader, page_number);

                                int rotation = reader.GetPageRotation(page_number);
                                if (rotation == 90 || rotation == 270)
                                    cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(page_number).Height);
                                else
                                    cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                            }
                        }
                        finally
                        {
                            input_doc.Close();
                        }
                    }
                    finally
                    {
                        writer.Close();
                    }
                }
            }
            finally
            {
                reader.Close();
            }
        }
示例#8
0
        public void ExtractPages(string inputFile, string outputFile,
            List<int> extractPages, System.Windows.Forms.ProgressBar progres)
        {
            if (inputFile == outputFile)
            {
                System.Windows.Forms.MessageBox.Show("Nie możesz użyć pliku wejściowego jako wyjściowego do zapisu.");
            }

            PdfReader inputPDF = new PdfReader(inputFile);

            Document doc = new Document();
            PdfReader reader = new PdfReader(inputFile);
            progres.Maximum = reader.NumberOfPages;

            using (MemoryStream memoryStream = new MemoryStream())
            {
                PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream);
                doc.Open();
                doc.AddDocListener(writer);
                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    progres.Value = i;
                    if (extractPages.FindIndex(s => s == i) == -1) continue;
                    doc.SetPageSize(reader.GetPageSize(i));
                    doc.NewPage();
                    PdfContentByte cb = writer.DirectContent;
                    PdfImportedPage pageImport = writer.GetImportedPage(reader, i);
                    int rot = reader.GetPageRotation(i);
                    if (rot == 90 || rot == 270)
                    {
                        cb.AddTemplate(pageImport, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                    }
                    else
                    {
                        cb.AddTemplate(pageImport, 1.0F, 0, 0, 1.0F, 0, 0);
                    }
                }
                reader.Close();
                doc.Close();
                try
                {
                    File.WriteAllBytes(outputFile, memoryStream.ToArray());
                }
                catch
                {
                    throw new Exception("Błąd przy próbie zapisu do pliku. Upewnij się iż żaden inny proces obecnie go nie używa.");
                }
            }
        }
        public string AddText(string PathSource, string PathTarget, int x, int y, int selectedPage, String text, int angle, int red, int green, int blue, int fontSize, float opacity)
        {
            try
            {
                iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(PathSource);
                int n = reader.NumberOfPages;

                if (!(selectedPage > 0 && selectedPage <= n))
                {
                    return(String.Format("Invalid Page {0}, the PDF has {1} pages", selectedPage, n));
                }

                iTextSharp.text.Document      document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1));
                iTextSharp.text.pdf.PdfWriter writer   = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new System.IO.FileStream(PathTarget, System.IO.FileMode.Create));

                document.Open();
                iTextSharp.text.pdf.PdfContentByte  cb = writer.DirectContent;
                iTextSharp.text.pdf.PdfImportedPage page;
                int rotation;
                int i = 0;
                // step 4: we add content
                while (i < n)
                {
                    i++;
                    document.NewPage();
                    page     = writer.GetImportedPage(reader, i);
                    rotation = reader.GetPageRotation(i);
                    if (rotation == 90 || rotation == 270)
                    {
                        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                    }
                    else
                    {
                        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }

                    if (i == selectedPage)
                    {
                        InsertText(cb, fontSize, x, y, text, angle, red, green, blue, opacity);
                    }
                }
                document.Close();
                return("");
            }
            catch (Exception e)
            {
                return(e.Message);
            }
        }
        public string SetSize(string sourceFile, string pSize, string targetPath)
        {
            try
            {
                string file = GetFullPath(sourceFile);
                iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(file);
                int n = reader.NumberOfPages;

                Rectangle pageSize = PageSize.GetRectangle(pSize);

                iTextSharp.text.Document      document = new iTextSharp.text.Document(pageSize);
                iTextSharp.text.pdf.PdfWriter writer   = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new System.IO.FileStream(GetFullPath(targetPath), System.IO.FileMode.Create));
                document.Open();
                iTextSharp.text.pdf.PdfContentByte  cb = writer.DirectContent;
                iTextSharp.text.pdf.PdfImportedPage page;
                int rotation;
                int i = 0;

                reader = new iTextSharp.text.pdf.PdfReader(file);
                n      = reader.NumberOfPages;
                while (i < n)
                {
                    i++;
                    document.SetPageSize(pageSize);
                    document.NewPage();
                    page     = writer.GetImportedPage(reader, i);
                    rotation = reader.GetPageRotation(i);
                    if (rotation == 90)
                    {
                        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                    }
                    else if ((rotation == 270))
                    {
                        cb.AddTemplate(page, 0f, 1f, -1f, 0f, reader.GetPageSizeWithRotation(i).Width, 0f);
                    }
                    else
                    {
                        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }
                }
                document.Close();
                return("");
            }
            catch (Exception e)
            {
                return(e.Message);
            }
        }
示例#11
0
// --------------------------------------------------------------------------- 
    /**
     * Manipulates a PDF file src
     * @param src the original PDF
     */
    public byte[] ManipulatePdf(byte[] src) {
      PdfReader reader = new PdfReader(src);
      int n = reader.NumberOfPages;
      int rot;
      PdfDictionary pageDict;
      for (int i = 1; i <= n; i++) {
        rot = reader.GetPageRotation(i);
        pageDict = reader.GetPageN(i);
        pageDict.Put(PdfName.ROTATE, new PdfNumber(rot + 90));        
      }        
      using (MemoryStream ms = new MemoryStream()) {
        using (PdfStamper stamper = new PdfStamper(reader, ms)) {
        }
        return ms.ToArray();
      }
    }
 // based on http://itextsharp.sourceforge.net/examples/Encrypt.cs
 public string ModifyPermissions(string PathSource, string PathTarget, string UserPassword, List <int> Permissons)
 {
     try
     {
         int PDFpermisson = 0;
         foreach (int permisson in Permissons)
         {
             PDFpermisson = PDFpermisson | permisson;
         }
         iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(PathSource);
         int n = reader.NumberOfPages;
         iTextSharp.text.Document      document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1));
         iTextSharp.text.pdf.PdfWriter writer   = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new System.IO.FileStream(PathTarget, System.IO.FileMode.Create));
         writer.SetEncryption(iTextSharp.text.pdf.PdfWriter.STRENGTH128BITS, UserPassword, null, (int)PDFpermisson);
         // step 3: we open the document
         document.Open();
         iTextSharp.text.pdf.PdfContentByte  cb = writer.DirectContent;
         iTextSharp.text.pdf.PdfImportedPage page;
         int rotation;
         int i = 0;
         // step 4: we add content
         while (i < n)
         {
             i++;
             document.SetPageSize(reader.GetPageSizeWithRotation(i));
             document.NewPage();
             page     = writer.GetImportedPage(reader, i);
             rotation = reader.GetPageRotation(i);
             if (rotation == 90 || rotation == 270)
             {
                 cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
             }
             else
             {
                 cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
             }
         }
         document.Close();
         return("");
     }
     catch (Exception e)
     {
         return(e.Message);
     }
 }
 public static void MergeFiles(string destinationFile, List<string> files, bool removeMergedFiles)
 {
     try
     {
         var f = 0;
         var reader = new PdfReader(files.First());
         var numberOfPages = reader.NumberOfPages;
         var document = new Document(reader.GetPageSizeWithRotation(1));
         var writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create));
         document.Open();
         var content = writer.DirectContent;
         while (f < files.Count)
         {
             var i = 0;
             while (i < numberOfPages)
             {
                 i++;
                 document.SetPageSize(reader.GetPageSizeWithRotation(i));
                 document.NewPage();
                 var page = writer.GetImportedPage(reader, i);
                 var rotation = reader.GetPageRotation(i);
                 if (rotation == 90 || rotation == 270)
                     content.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                 else
                     content.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
             }
             f++;
             if (f < files.Count)
             {
                 reader = new PdfReader(files[f]);
                 numberOfPages = reader.NumberOfPages;
             }
         }
         document.Close();
         if (removeMergedFiles)
         {
             DeleteMergedFiles(files);
         }
     }
     catch (Exception e)
     {
         var strOb = e.Message;
     }
 }
示例#14
0
        public PdfRasterizer(string inputPdfPath, int pointsPerInch)
        {
            _pointsPerInch = pointsPerInch;
            // Extract info from pdf using iTextSharp
            try
            {
            using (Stream newpdfStream = new FileStream(inputPdfPath, FileMode.Open, FileAccess.Read))
            {
                using (PdfReader pdfReader = new PdfReader(newpdfStream))
                {
                    int numPagesToUse = pdfReader.NumberOfPages;
                    for (int pageNum = 1; pageNum <= numPagesToUse; pageNum++)
                    {
                        iTextSharp.text.Rectangle pageRect = pdfReader.GetPageSize(pageNum);
                        _pageSizes.Add(pageRect);
                        int pageRot = pdfReader.GetPageRotation(pageNum);
                        _pageRotationInfo.Add(pageRot);
                    }
                }
            }
            }
            catch (Exception excp)
            {
                logger.Error("Cannot open PDF with iTextSharp {0} excp {1}", inputPdfPath, excp.Message);
            }

            _lastInstalledVersion =
                GhostscriptVersionInfo.GetLastInstalledVersion(
                        GhostscriptLicense.GPL | GhostscriptLicense.AFPL,
                        GhostscriptLicense.GPL);

            try
            {
                _rasterizer.Open(inputPdfPath.Replace("/",@"\"), _lastInstalledVersion, false);
            }
            catch (Exception excp)
            {
                logger.Error("Cannot open PDF with ghostscript {0} excp {1}", inputPdfPath, excp.Message);
            }

            _inputPdfPath = inputPdfPath;
        }
示例#15
0
 public static void Test_ReadPdf_01(string file)
 {
     PdfReader reader = null;
     try
     {
         reader = new PdfReader(file);
         Trace.WriteLine("read pdf                          : \"{0}\"", file);
         Trace.WriteLine("number of pages                   : {0}", reader.NumberOfPages);
         Rectangle mediabox = reader.GetPageSize(1);
         Trace.WriteLine("size of page 1                    : [ {0}, {1}, {2}, {3} ]", mediabox.Left, mediabox.Bottom, mediabox.Right, mediabox.Top);
         Trace.WriteLine("rotation of page 1                : {0}", reader.GetPageRotation(1));
         Trace.WriteLine("page size with rotation of page 1 : {0}", reader.GetPageSizeWithRotation(1));
         Trace.WriteLine("file length                       : {0}", reader.FileLength);
         Trace.WriteLine("is rebuilt ?                      : {0}", reader.IsRebuilt());
         Trace.WriteLine("is encrypted ?                    : {0}", reader.IsEncrypted());
     }
     finally
     {
         if (reader != null)
             reader.Close();
     }
 }
示例#16
0
        /// <summary>
        /// Splits the document and saves the contents to a new pdf.
        /// </summary>
        /// <param name="reader">The reader.</param>
        public void SplitDocument(PdfReader reader)
        {
            PdfWriter writer = Writer;
             _document.Open();
             PdfContentByte content = writer.DirectContent;

             for (int i = StartPage; i <= EndPage; i++)
             {
            PdfImportedPage page = writer.GetImportedPage(reader, i);
            Rectangle pageSize = reader.GetPageSizeWithRotation(i);
            _document.SetPageSize(pageSize);
            _document.NewPage();
            int rotation = reader.GetPageRotation(i);
            if (rotation == 90 || rotation == 270)
               content.AddTemplate(page, 0, -1f, 1f, 0, 0, pageSize.Height);
            else
               content.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
             }
        }
        public ActionResult viewPRPdf(Int16 fiscalYear, Int16? coeID)
        {
            var allCoEs = db.CoEs.ToList();
            if (coeID != 0 && coeID != null)
            {
                allCoEs = allCoEs.Where(x => x.CoE_ID == coeID).ToList();
            }
            else
            {
                allCoEs = allCoEs.Where(x => x.CoE_ID != 0).ToList();
            }

            var allMaps = new List<Indicator_CoE_Maps>();
            allMaps = db.Indicator_CoE_Maps.ToList();
            ModelState.Clear();
            var viewModel = new PRViewModel
            {
                //allCoEs = db.CoEs.ToList(),
                allCoEs = allCoEs,
                allAnalysts = db.Analysts.ToList(),
                allMaps = allMaps,
                allFootnoteMaps = db.Indicator_Footnote_Maps.ToList(),
                allFootnotes = db.Footnotes.ToList(),
                Fiscal_Year = fiscalYear,
                Analyst_ID = null,
                allColors = db.Color_Types.ToList(),
            };

            HttpResponse httpResponse = this.HttpContext.ApplicationInstance.Context.Response;
            httpResponse.Clear();
            httpResponse.ContentType = "application/pdf";
            httpResponse.AddHeader("content-disposition", "attachment;filename=\"test.pdf\"");

            MemoryStream memoryStream = new MemoryStream();
            string apiKey = "2429a8e1-7cf6-4a77-9f7f-f4a85a9fcc14";
            var test = (this.RenderView("viewPRSimple", viewModel));
            string value = "<meta charset='UTF-8' />" + test;

            List<string> coeNotes;
            var topMargin = 6;
            if (allCoEs.FirstOrDefault(x => x.CoE_ID == coeID).CoE_Notes != null && allCoEs.FirstOrDefault(x => x.CoE_ID == coeID).CoE_Notes != "")
            {
                coeNotes = Regex.Matches(allCoEs.FirstOrDefault(x => x.CoE_ID == coeID).CoE_Notes, @"\[.*?\]").Cast<Match>().Select(m => m.Value.Substring(1, m.Value.Length - 2)).ToList();
                var coeNotesCount = coeNotes.Count();
                topMargin+=coeNotesCount * 5;
            }

            using (var client = new WebClient())
            {
                NameValueCollection options = new NameValueCollection();
                options.Add("apikey", apiKey);
                options.Add("value", value);
                options.Add("DisableJavascript", "false");
                options.Add("PageSize", "Legal");
                options.Add("UseLandscape", "true");
                options.Add("Zoom", "1.0");
                options.Add("MarginLeft", "2");
                options.Add("MarginTop", "10");
                options.Add("MarginBottomn", "5");
                options.Add("MarginRight", "2");
                //options.Add("HeaderUrl", this.HttpContext.ApplicationInstance.Server.MapPath("viewPRSimple_Header"));
                byte[] result = client.UploadValues("http://api.html2pdfrocket.com/pdf", options);
                //httpResponse.BinaryWrite(result);
                memoryStream.Write(result, 0, result.Length);
            }

            string picPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/SHSheader.png");
            Image logo = Image.GetInstance(picPath);
            //string picPathOPEO = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/logoOPEO.png");
            //Image logoOPEO = Image.GetInstance(picPathOPEO);
            string footerPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/footer.png");
            Image footer = Image.GetInstance(footerPath);
            string picMonthlyPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/Monthly.png");
            string picQuaterlyPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/quaterly.png");
            string picNAPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/na.png");
            string picTargetPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/target.png");
            string picDraftPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/draft.png");
            Image picDraft = Image.GetInstance(picDraftPath);

            var pdfDocument  = new iTextSharp.text.Document();
            var outStream = new MemoryStream();
            var writer = iTextSharp.text.pdf.PdfWriter.GetInstance(pdfDocument, outStream);

            pdfDocument.Open();
            var reader = new iTextSharp.text.pdf.PdfReader(memoryStream.ToArray());

            for (var page = 1; page <= reader.NumberOfPages; page++)
            {
                pdfDocument.SetPageSize(reader.GetPageSizeWithRotation(page));
                pdfDocument.NewPage();
                var importedPage = writer.GetImportedPage(reader, page);
                var pageRotation = reader.GetPageRotation(page);
                var pageWidth = reader.GetPageSizeWithRotation(page).Width;
                var pageHeight = reader.GetPageSizeWithRotation(page).Height;
                switch (pageRotation)
                {
                    case 0:
                        writer.DirectContent.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0);
                        break;

                    case 90:
                        writer.DirectContent.AddTemplate(importedPage, 0, -1f, 1f, 0, 0, pageHeight);
                        break;

                    case 180:
                        writer.DirectContent.AddTemplate(
                            importedPage, -1f, 0, 0, -1f, pageWidth, pageHeight);
                        break;

                    case 270:
                        writer.DirectContent.AddTemplate(importedPage, 0, 1f, -1f, 0, pageWidth, 0);
                        break;
                }
                pdfDocument.SetPageSize(pdfDocument.PageSize);

                logo.Alignment = Element.ALIGN_CENTER;
                logo.ScalePercent(70,70);
                logo.SetAbsolutePosition(5, reader.GetPageSizeWithRotation(page).Height - logo.ScaledHeight-15);
                writer.DirectContent.AddImage(logo);

                var obj = db.CoEs.FirstOrDefault(x => x.CoE_ID == coeID);
                var type = obj.GetType();
                var isDraft = (bool)(type.GetProperty(FiscalYear.FYStrFull("FY_", fiscalYear) + "Draft").GetValue(obj, null) ?? false);
                if (isDraft)
                {
                    picDraft.Alignment = Element.ALIGN_CENTER;
                    picDraft.ScalePercent(70, 70);
                    picDraft.SetAbsolutePosition(reader.GetPageSizeWithRotation(page).Width / 4, 0);
                    writer.DirectContent.AddImage(picDraft);
                }

                //logoOPEO.Alignment = Element.ALIGN_CENTER;
                //logoOPEO.ScalePercent(20, 20);
                //logoOPEO.SetAbsolutePosition(reader.GetPageSizeWithRotation(page).Width - logoOPEO.ScaledWidth - 5, reader.GetPageSizeWithRotation(page).Height - logoOPEO.ScaledHeight - 5);
                //writer.DirectContent.AddImage(logoOPEO);

                if (page == 1)
                {
                    footer.Alignment = Element.ALIGN_CENTER;
                    footer.ScalePercent(45, 45);
                    footer.SetAbsolutePosition(reader.GetPageSizeWithRotation(page).Width - footer.ScaledWidth - 6, 10);
                    writer.DirectContent.AddImage(footer);
                }
            }

            writer.CloseStream = false;
            pdfDocument.Close();

            outStream.WriteTo(httpResponse.OutputStream);
            outStream.Close();
            httpResponse.End();

            return View(viewModel);
        }
示例#18
0
 public static void MergeFiles(string destinationFile, List<string> sourceFiles)
 {
     int f = 0;
     // we create a reader for a certain document
     PdfReader reader = new PdfReader(sourceFiles[f]);
     // we retrieve the total number of pages
     int n = reader.NumberOfPages;
     // step 1: creation of a document-object
     Document document = new Document(reader.GetPageSizeWithRotation(1));
     // step 2: we create a writer that listens to the document
     PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create));
     // step 3: we open the document
     document.Open();
     PdfContentByte cb = writer.DirectContent;
     PdfImportedPage page;
     int rotation;
     // step 4: we add content
     while (f < sourceFiles.Count)
     {
         int i = 0;
         while (i < n)
         {
             i++;
             document.SetPageSize(reader.GetPageSizeWithRotation(i));
             document.NewPage();
             page = writer.GetImportedPage(reader, i);
             rotation = reader.GetPageRotation(i);
             if (rotation == 90 || rotation == 270)
             {
                 cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
             }
             else
             {
                 cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
             }
         }
         f++;
         if (f < sourceFiles.Count)
         {
             reader = new PdfReader(sourceFiles[f]);
             // we retrieve the total number of pages
             n = reader.NumberOfPages;
         }
     }
     // step 5: we close the document
     document.Close();
 }
示例#19
0
 public void Splite(string inputFileName, int pageSize)
 {
     int rotation = 0; 
     PdfReader pdfReader = new PdfReader(inputFileName); 
     string fileName = inputFileName.Substring(0, inputFileName.Length-4); 
     int totalPages  = pdfReader.NumberOfPages;
     int block = 1;
     for (int i = 1; i <= totalPages; block++)
     {
         int tail=block * pageSize;
         if (tail > totalPages) {
             tail = totalPages;
         }
         string newFileName = fileName + string.Format("[{0}-{1}].pdf", i,tail);
         FileStream fs = new FileStream(newFileName, FileMode.Create);
         Document newDocument = new Document();
         PdfWriter pdfWriter = PdfWriter.GetInstance(newDocument, fs);
         pdfWriter.CloseStream = true; 
         newDocument.Open();
         PdfContentByte pdfContentByte = pdfWriter.DirectContent;
         for (int j=1;j<=pageSize && i<=totalPages;j++,i++)
         {
            newDocument.SetPageSize(pdfReader.GetPageSizeWithRotation(i));
            newDocument.NewPage();
            PdfImportedPage importedPage = pdfWriter.GetImportedPage(pdfReader,i);
            rotation = pdfReader.GetPageRotation(i);
            pdfContentByte.AddTemplate(importedPage, 0, 0);
            if (rotation == 90 || rotation == 270)
            {
                pdfContentByte.AddTemplate(importedPage, 0, -1f, 1f, 0, 0, pdfReader.GetPageSizeWithRotation(i).Height);
            }
            else
            {
               pdfContentByte.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0);
            }  
         }
         fs.Flush();
         newDocument.Close();   
     }            
 }  
示例#20
0
            public void AddAnnotation(PdfAnnotation annot)
            {
                List <PdfAnnotation> allAnnots = new List <PdfAnnotation>();

                if (annot.IsForm())
                {
                    PdfFormField field = (PdfFormField)annot;
                    if (field.Parent != null)
                    {
                        return;
                    }
                    ExpandFields(field, allAnnots);
                    if (cstp.fieldTemplates == null)
                    {
                        cstp.fieldTemplates = new Dictionary <PdfTemplate, object>();
                    }
                }
                else
                {
                    allAnnots.Add(annot);
                }
                for (int k = 0; k < allAnnots.Count; ++k)
                {
                    annot = allAnnots[k];
                    if (annot.IsForm())
                    {
                        if (!annot.IsUsed())
                        {
                            Dictionary <PdfTemplate, object> templates = annot.Templates;
                            if (templates != null)
                            {
                                foreach (PdfTemplate tpl in templates.Keys)
                                {
                                    cstp.fieldTemplates[tpl] = null;
                                }
                            }
                        }
                        PdfFormField field = (PdfFormField)annot;
                        if (field.Parent == null)
                        {
                            AddDocumentField(field.IndirectReference);
                        }
                    }
                    if (annot.IsAnnotation())
                    {
                        PdfObject pdfobj = PdfReader.GetPdfObject(pageN.Get(PdfName.ANNOTS), pageN);
                        PdfArray  annots = null;
                        if (pdfobj == null || !pdfobj.IsArray())
                        {
                            annots = new PdfArray();
                            pageN.Put(PdfName.ANNOTS, annots);
                        }
                        else
                        {
                            annots = (PdfArray)pdfobj;
                        }
                        annots.Add(annot.IndirectReference);
                        if (!annot.IsUsed())
                        {
                            PdfRectangle rect = (PdfRectangle)annot.Get(PdfName.RECT);
                            if (rect != null && (rect.Left != 0 || rect.Right != 0 || rect.Top != 0 || rect.Bottom != 0))
                            {
                                int       rotation = reader.GetPageRotation(pageN);
                                Rectangle pageSize = reader.GetPageSizeWithRotation(pageN);
                                switch (rotation)
                                {
                                case 90:
                                    annot.Put(PdfName.RECT, new PdfRectangle(
                                                  pageSize.Top - rect.Bottom,
                                                  rect.Left,
                                                  pageSize.Top - rect.Top,
                                                  rect.Right));
                                    break;

                                case 180:
                                    annot.Put(PdfName.RECT, new PdfRectangle(
                                                  pageSize.Right - rect.Left,
                                                  pageSize.Top - rect.Bottom,
                                                  pageSize.Right - rect.Right,
                                                  pageSize.Top - rect.Top));
                                    break;

                                case 270:
                                    annot.Put(PdfName.RECT, new PdfRectangle(
                                                  rect.Bottom,
                                                  pageSize.Right - rect.Left,
                                                  rect.Top,
                                                  pageSize.Right - rect.Right));
                                    break;
                                }
                            }
                        }
                    }
                    if (!annot.IsUsed())
                    {
                        annot.SetUsed();
                        cstp.AddToBody(annot, annot.IndirectReference);
                    }
                }
            }
示例#21
0
    public byte[] AddSignatureAppearance(byte[] pdfToStamBytes, string stampString)
    {
        using (var ms = new MemoryStream())
        {
            try
            {
                var imageWidth  = 425;
                var imageHeight = 89;
                var fontSize    = 0;
                if (stampString.Length > 25)
                {
                    fontSize = 8;
                }
                else
                {
                    fontSize = 12;
                }

                //TODO: Make configurable
                string path           = "emptyPath";
                string xsdFileLinux   = @"/var/local/lawtrust/configs/signatureFont.ttf";
                string xsdFileWindows = @"C:/lawtrust/configs/signatureFont.ttf";

                if (File.Exists(xsdFileLinux))
                {
                    path = xsdFileLinux;
                }
                else if (File.Exists(xsdFileWindows))
                {
                    path = xsdFileWindows;
                }
                if (!path.Equals("emptyPath"))
                {
                    var reader   = new iTextSharp.text.pdf.PdfReader(pdfToStamBytes);
                    var stamper  = new iTextSharp.text.pdf.PdfStamper(reader, ms);
                    var rotation = reader.GetPageRotation(1);
                    var box      = reader.GetPageSizeWithRotation(1);
                    var bf       = BaseFont.CreateFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                    var pcb      = stamper.GetOverContent(1);
                    var f        = new Font(bf, fontSize);
                    var p        = new Phrase(stampString, f);

                    //TODO: Make coordinates configurable
                    if (rotation == 90)
                    {
                        //landscape
                        ColumnText.ShowTextAligned(pcb, Element.ALIGN_CENTER, p, 740, 10, 0);
                    }
                    else if (rotation == 180)
                    {
                        //normal PDF
                        ColumnText.ShowTextAligned(pcb, Element.ALIGN_CENTER, p, 500, 10, 0);
                    }
                    else if (rotation == 270)
                    {
                        //landscape
                        ColumnText.ShowTextAligned(pcb, Element.ALIGN_CENTER, p, 740, 10, 0);
                    }
                    else
                    {
                        //normal PDF
                        ColumnText.ShowTextAligned(pcb, Element.ALIGN_CENTER, p, 500, 10, 0);
                    }

                    pcb.SaveState();
                    stamper.Close();
                    reader.Close();
                    return(ms.ToArray());
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                //need error handling
                return(null);
            }
        }
    }
示例#22
0
        private static bool Overlay(dynamic overlay, string filename)
        {
            string inputFile  = ServiceCfg.PdfModel;
            string cardFolder = Path.Combine(ServiceCfg.OutputFolderPath, @"pages\");

            if (!PdfManager.CheckFolder(cardFolder, true))
            {
                return(false);
            }
            string outFile = Path.Combine(cardFolder, "CTP_" + filename);

            //Creation du reader et du document pour lire le document PDF original
            PdfReader reader   = new PdfReader(inputFile);
            Document  inputDoc = new Document(reader.GetPageSizeWithRotation(1));

            using (FileStream fs = new FileStream(outFile, FileMode.Create))
            {
                //Creation du PDF Writer pour créer le nouveau Document PDF
                PdfWriter outputWriter = PdfWriter.GetInstance(inputDoc, fs);
                inputDoc.Open();
                //Creation du Content Byte pour tamponner le PDF writer
                PdfContentByte cb1 = outputWriter.DirectContent;

                //Obtien le document PDF à utiliser comme superposition
                PdfReader       overlayReader = new PdfReader(overlay);
                PdfImportedPage overLay       = outputWriter.GetImportedPage(overlayReader, 1);

                //Obtention de la rotation de page de superposition
                int overlayRotation = overlayReader.GetPageRotation(1);

                int n = reader.NumberOfPages;

                //liste des numéros de pages à marquer dans le modèle
                List <int> pagesList = GetModelPages2Overlay(n);

                int i = 1;
                while (i <= n)
                {
                    //S'assurer que la taille de la nouvelle page correspond à celle du document d'origine
                    inputDoc.SetPageSize(reader.GetPageSizeWithRotation(i));
                    inputDoc.NewPage();

                    PdfImportedPage page = outputWriter.GetImportedPage(reader, i);

                    int rotation = reader.GetPageRotation(i);

                    //Ajout de la page PDF originale avec la bonne rotation
                    if (rotation == 90 || rotation == 270)
                    {
                        cb1.AddTemplate(page, 0, -1f, 1f, 0, 0,
                                        reader.GetPageSizeWithRotation(i).Height);
                    }
                    else
                    {
                        //cb1.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                        cb1.AddTemplate(page, 0, 0, true);
                    }

                    //si la page en cours est à marquer
                    if (pagesList.Contains(i))
                    {
                        //Ajout de la superposition avec la bonne rotation
                        if (overlayRotation == 90 || overlayRotation == 270)
                        {
                            cb1.AddTemplate(overLay, 0, -1f, 1f, 0, 0,
                                            reader.GetPageSizeWithRotation(i).Height);
                        }
                        else
                        {
                            //cb1.AddTemplate(overLay, 1f, 0, 0, 1f, 0, 0);
                            cb1.AddTemplate(overLay, float.Parse(ServiceCfg.OverlayX.ToString()), float.Parse(ServiceCfg.OverlayY.ToString()), true);
                        }
                    }
                    //Increment de page
                    i++;
                }
                //Fermeture du fichier d'entrée
                inputDoc.Close();
                //on garde le fichier de sortie
                _lastPdf = outFile;
                //Fermeture du reader pour le fichier de superposition
                overlayReader.Close();
            }

            reader.Close();
            return(true);
        }
示例#23
0
        public Boolean MergePdfFiles(String[] pdfFiles, String outputPath)
        {
            //                                     Optional ByVal authorName As String = "", _
            //                                     Optional ByVal creatorName As String = "", _
            //                                     Optional ByVal subject As String = "", _
            //                                     Optional ByVal title As String = "", _
            //                                     Optional ByVal keywords As String = "")
            Boolean result   = false;
            int     pdfCount = 0;                        //'total input pdf file count
            int     f        = 0;                        //'pointer to current input pdf file
            string  fileName = String.Empty;             // 'current input pdf filename

            iTextSharp.text.pdf.PdfReader reader = null;
            int pageCount = 0;                                //'cureent input pdf page count

            iTextSharp.text.Document           pdfDoc = null; //   'the output pdf document
            iTextSharp.text.pdf.PdfWriter      writer = null;
            iTextSharp.text.pdf.PdfContentByte cb     = null;
            //    'Declare a variable to hold the imported pages
            iTextSharp.text.pdf.PdfImportedPage page = null;
            int  rotation         = 0;
            bool unethicalreading = false;

            //    'Declare a font to used for the bookmarks
            iTextSharp.text.Font bookmarkFont = iTextSharp.text.FontFactory.GetFont(iTextSharp.text.FontFactory.HELVETICA, 12, iTextSharp.text.Font.BOLD, iTextSharp.text.BaseColor.BLUE);

            // Try
            pdfCount = pdfFiles.Length;
            if (pdfCount > 1)
            {
                //            'Open the 1st pad using PdfReader object
                fileName = pdfFiles[f];
                reader   = new iTextSharp.text.pdf.PdfReader(fileName);
                // reader.
                iTextSharp.text.pdf.PdfReader.unethicalreading = unethicalreading;
                //            'Get page count
                pageCount = reader.NumberOfPages;

                //            'Instantiate an new instance of pdf document and set its margins. This will be the output pdf.
                //            'NOTE: bookmarks will be added at the 1st page of very original pdf file using its filename. The location
                //            'of this bookmark will be placed at the upper left hand corner of the document. So you'll need to adjust
                //            'the margin left and margin top values such that the bookmark won't overlay on the merged pdf page. The
                //            'unit used is "points" (72 points = 1 inch), thus in this example, the bookmarks' location is at 1/4 inch from
                //            'left and 1/4 inch from top of the page.

                pdfDoc = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1), 18, 18, 18, 18);
                //            'Instantiate a PdfWriter that listens to the pdf document
                writer = iTextSharp.text.pdf.PdfWriter.GetInstance(pdfDoc, new System.IO.FileStream(outputPath, System.IO.FileMode.Create));    //added system
                //            'Set metadata and open the document
                // With pdfDoc
                pdfDoc.AddAuthor("");
                pdfDoc.AddCreationDate();
                pdfDoc.AddCreator("");
                pdfDoc.AddProducer();
                pdfDoc.AddSubject("");
                pdfDoc.AddTitle("");
                pdfDoc.AddKeywords("");
                pdfDoc.Open();
                //  End With
                //            'Instantiate a PdfContentByte object
                cb = writer.DirectContent;
                //            'Now loop thru the input pdfs
                while (f < pdfCount)
                {
                    //                'Declare a page counter variable
                    int i = 0;
                    //                'Loop thru the current input pdf's pages starting at page 1
                    while (i < pageCount)
                    {
                        i += 1;
                        //                    'Get the input page size
                        pdfDoc.SetPageSize(reader.GetPageSizeWithRotation(i));
                        //                    'Create a new page on the output document
                        pdfDoc.NewPage();

                        //                    'If it is the 1st page, we add bookmarks to the page
                        //                    'If i = 1 Then
                        //                    '    'First create a paragraph using the filename as the heading
                        //                    '    Dim para As New iTextSharp.text.Paragraph(IO.Path.GetFileName(fileName).ToUpper(), bookmarkFont)
                        //                    '    'Then create a chapter from the above paragraph
                        //                    '    Dim chpter As New iTextSharp.text.Chapter(para, f + 1)
                        //                    '    'Finally add the chapter to the document
                        //                    '    pdfDoc.Add(chpter)
                        //                    'End If

                        //                    'Now we get the imported page


                        page = writer.GetImportedPage(reader, i);
                        //                    'Read the imported page's rotation
                        rotation = reader.GetPageRotation(i);
                        //                    'Then add the imported page to the PdfContentByte object as a template based on the page's rotation
                        if (rotation == 90)
                        {
                            cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                        }
                        else
                        if (rotation == 270)
                        {
                            cb.AddTemplate(page, 0, 1.0F, -1.0F, 0, reader.GetPageSizeWithRotation(i).Width + 60, -30);
                        }
                        else
                        {
                            cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0);
                        }
                    } //End While 2

                    //                'Increment f and read the next input pdf file
                    f += 1;
                    if (f < pdfCount)
                    {
                        fileName  = pdfFiles[f];
                        reader    = new iTextSharp.text.pdf.PdfReader(fileName);
                        pageCount = reader.NumberOfPages;
                    } //   End If
                }        //end while 1
                //            'When all done, we close the document so that the pdfwriter object can write it to the output file
                pdfDoc.Close();
                result = true;
            }//        End If Principal
             //    Catch ex As Exception
             //        Throw New Exception(ex.Message)
             //    End Try

            return(result);
        }
        private void btnWeiterZu2_Click(object sender, EventArgs e)
        {
            // Ein neuer Ordner wird erzeugt, der die zerstückelte PDF-Datei aufnimmt.

            try
            {
                NeuePdfDatei.erstelleOrdner();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Fehler: \n Es fehlt die Berechtigung einen Ordner anzulegen, der sodann die Einzelseiten aufnimmt.\n\n"+ex, "Coelina");
                return;
            }

            // Die Datei wird zerlegt.

            NeuePdfDatei.zerlegePdfInEinzelseiten(NeuePdfDatei.VollständigerPfadZurDatei);

            string name;

            try
            {
                FileInfo file = new FileInfo(Properties.Settings.Default.neuesteDatei);
                name = file.Name.Substring(0, file.Name.LastIndexOf("."));
            }
            catch (Exception ex)
            {
                MessageBox.Show("Fehler: \n\nSie müssen eine PDF-Datei auswählen.\n\n" + ex, "Coelina");
                return;
            }

            // Es wird ein Reader für die PDF-Datei erzeugt.

            try
            {
                PdfReader reader = new PdfReader(Properties.Settings.Default.neuesteDatei);

                // Die Anzahl der Seiten der PDF-Datei wird ermittelt.

                int n = reader.NumberOfPages;

                // Die Eigenschaft wird angepasst.

                NeuePdfDatei.AnzahlSeiten = n;
                int digits = 1 + (n / 10);

                // Progressbar einstellen.

                progressBar1.Visible = true;
                progressBar1.Minimum = 1;
                progressBar1.Maximum = n + 1;
                progressBar1.Value = 1;
                progressBar1.Step = 1;
                //progressBar1.PerformStep();

                Document document;
                int pagenumber;
                string filename;

                // Für jede Einzelseite wird mindestens ein Nachrichtenobjekt angelegt.

                for (int i = 0; i < n; i++)
                {
                    pagenumber = i + 1;

                    filename = pagenumber.ToString();
                    while (filename.Length < digits) filename = "0" + filename;
                    filename = "_" + filename + ".pdf";
                    filename = name + filename;

                    // Ein document-Objekt wird erzeugt.

                    document = new Document(reader.GetPageSizeWithRotation(pagenumber));

                    // Ein Writer wird für das document erstellt.

                    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(frmSerienbriefdateiWählen.NeuePdfDatei.Unterverzeichnis + "\\" + filename, FileMode.Create));

                    // Öffnen des Dokuments.

                    document.Open();
                    PdfContentByte cb = writer.DirectContent;
                    PdfImportedPage page = writer.GetImportedPage(reader, pagenumber);
                    int rotation = reader.GetPageRotation(pagenumber);
                    if (rotation == 90 || rotation == 270)
                    {
                        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pagenumber).Height);
                    }
                    else
                    {
                        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }

                    // Schließen des Dokuments.

                    document.Close();

                    List<string> empfängerMitDuplikaten = NeuePdfDatei.ReadPdfFile(NeuePdfDatei.Unterverzeichnis + "\\" + filename, Global.nral[cbxEmpfänger.SelectedIndex].DefinitionRegEx, Global.nral[cbxEmpfänger.SelectedIndex].Begrenzer1, Global.nral[cbxEmpfänger.SelectedIndex].Begrenzer2, cbxEmpfänger.SelectedIndex);

                    // Duplikate werden entfernt, damit jeder Empfänger jede Seite nur 1x bekommt.

                    List<string> empfänger = empfängerMitDuplikaten.Distinct().ToList();

                    // Für jeden einzelnen Empfänger auf einer Seite wird ein Nachrichtenobjekt angelegt.

                    for (int j = 0; j < empfänger.Count(); j++)
                    {

                        // Falls die Alias-Funktionalität in den Einstellungen aktiv ist, wird nach allen Aliassen in Betreff und Body gesucht und entsprechend ersetzt.

                        string betreff = Properties.Settings.Default.betreff;
                        string body = Properties.Settings.Default.body;
                        string aliasKürzel = "";
                        string aliasName = "";
                        string alias1 = "";
                        string alias2 = "";
                        string alias3 = "";
                        string alias4 = "";

                        // Wenn ein Alias ausgewertet werden soll, muss der Alias erst in eine E-Mail-Adresse übersetzt werden.

                        if (cbxEmpfänger.SelectedIndex != 0)
                        {

                            empfänger[j] = Global.AliasMail.ermittleEmailAdresseAusEinemAlias(empfänger[j], cbxEmpfänger.SelectedIndex);

                            // Objekte mit ""-Wert werden entfernt.
                        }

                        //empfänger = empfänger.Where(x => x != null).ToList();

                        // Wenn der Alias in den Einstellungen aktiv geschaltet wurde, wird in Betreff und Body nach Alias gesucht und entsprechend ersetzt.

                        if (Properties.Settings.Default.AliasAktiv == true)
                        {
                            foreach (AliasKopfzeile a in Enum.GetValues(typeof(AliasKopfzeile)))
                            {
                                betreff = Global.AliasMail.AliasSuchenUndTextErsetzen(empfänger[j], betreff, "[" + a + "]");
                                body = Global.AliasMail.AliasSuchenUndTextErsetzen(empfänger[j], body, "[" + a + "]");
                            }
                            if (cbxEmpfänger.SelectedIndex == 0)
                            {
                                aliasKürzel = Global.AliasMail.AliasKürzelErmitteln(empfänger[j]);
                            }
                            aliasName = Global.AliasMail.AliasNameErmitteln(empfänger[j]);
                            alias1 = Global.AliasMail.Alias1Ermitteln(empfänger[j]);
                            alias2 = Global.AliasMail.Alias2Ermitteln(empfänger[j]);
                            alias3 = Global.AliasMail.Alias3Ermitteln(empfänger[j]);
                            alias4 = Global.AliasMail.Alias4Ermitteln(empfänger[j]);
                        }

                        // Jetzt wird ein neues Nachrichtenobjekt erzeugt.

                        // Nur, wenn tatsächlich eine gültige E-Mail-Adresse ermittelt werden kann, wird das Nachrichtenobjekt angelegt.
                        if (empfänger[j].Contains('@'))
                        {
                            Global.fNeueNachricht.Add(new Nachricht(Properties.Settings.Default.bcc, betreff, body, Properties.Settings.Default.cc, frmSerienbriefdateiWählen.NeuePdfDatei.Unterverzeichnis + "\\" + filename, empfänger[j], Properties.Settings.Default.attachment1, Properties.Settings.Default.attachment2, Properties.Settings.Default.attachment3, Properties.Settings.Default.mailPassword, Properties.Settings.Default.smtpPort, Properties.Settings.Default.smtpServer, Properties.Settings.Default.absender, aliasName, aliasKürzel, alias1, alias2, alias3, alias4));
                        }

                        progressBar1.PerformStep();
                    }
                }
            }
            catch (Exception ex)
            {
               string fehler = "Die Datei " + NeuePdfDatei.Name + " kann nicht gelesen werden.\nKann es sein, dass die Datei passwortgeschützt ist?\nHier geht es nicht weiter.";
               MessageBox.Show("Fehler: \n" + fehler + "\n\n" + ex, "Coelina");
               return;
            }

            // Nur, wenn die PDF-Datei existiert und die SMTP-Einstellungen gültig sind, geht es weiter.

            if (File.Exists(btnDateiAuswahl.Text) && Path.GetExtension(btnDateiAuswahl.Text) == ".pdf" && Global.fNeueNachricht.Count() > 0)
            {
                if (Properties.Settings.Default.MaileinstellungenKorrekt == true)
                {
                    frmVorschau frm2 = new frmVorschau();
                    // frm2 soll innerhalb des MDI-Containers öffnen. Also wird der Parent des aktuellen Forms an das nächste Form übergeben.
                    frm2.MdiParent = this.MdiParent;
                    frm2.Show();
                    this.Close();
                }
                else
                {
                    string fehler = "\n\nWechseln Sie zu den Einstellungen, um zuerst einen gültigen SMTP-Zugang einzurichten.\nAnschließend kehren Sie hierher zurück.";
                    MessageBox.Show("Fehler: \n" + fehler, "Coelina");
                    return;
                }
            }
            else
            {
                string fehler = "\nEs muss mindestens ein Empfänger ausgelesen werden können, um zum nächsten Schritt zu kommen.";
                MessageBox.Show("Fehler: \n" + fehler, "Coelina");
                return;
            }

            try
            {
                MailAddress m = new MailAddress(tbxCc.Text);
                Properties.Settings.Default.cc = tbxCc.Text;
            }
            catch
            {
                // Wenn die Textbox nicht leer und gleichzeitig nicht mit keiner gültigen Adresse gefüllt ist, dann wird die Zelle geleert
                if (tbxCc.Text != "")
                {
                    Properties.Settings.Default.cc = "";
                    tbxCc.Text = "";
                    string fehler = "\n\nDie CC-Adresse ist nicht gültig und wird ignoriert.";
                    MessageBox.Show("Fehler: \n" + fehler, "Coelina");
                }
            }

            Properties.Settings.Default.Save();

            try
            {
                MailAddress m = new MailAddress(tbxBcc.Text);
                Properties.Settings.Default.bcc = tbxBcc.Text;
            }
            catch
            {
                // Wenn die Textbox nicht leer und gleichzeitig nicht mit keiner gültigen Adresse gefüllt ist, dann wird die Zelle geleert.

                if (tbxBcc.Text != "")
                {
                    Properties.Settings.Default.bcc = "";
                    tbxBcc.Text = "";
                    string fehler = "\n\nDie BCC-Adresse ist nicht gültig und wird ignoriert.";
                    MessageBox.Show("Fehler: \n" + fehler, "Coelina");
                }
            }
            Properties.Settings.Default.Save();
        }
示例#25
0
        /// <summary>
        /// Merge pdf files.
        /// </summary>
        /// <param name="sourceFiles">PDF files being merged.</param>
        /// <returns></returns>
        public static byte[] MergeFiles(List<Stream> sourceFiles)
        {
            Document document = new Document();
            MemoryStream output = new MemoryStream();

            try
            {
                // Initialize pdf writer
                PdfWriter writer = PdfWriter.GetInstance(document, output);
                writer.PageEvent = new PdfPageEvents();

                // Open document to write
                document.Open();
                PdfContentByte content = writer.DirectContent;

                // Iterate through all pdf documents
                for (int fileCounter = 0; fileCounter < sourceFiles.Count; fileCounter++)
                {
                    // Create pdf reader
                    PdfReader reader = new PdfReader(sourceFiles[fileCounter]);
                    int numberOfPages = reader.NumberOfPages;

                    // Iterate through all pages
                    for (int currentPageIndex = 1; currentPageIndex <=
                                        numberOfPages; currentPageIndex++)
                    {
                        // Determine page size for the current page
                        document.SetPageSize(
                            reader.GetPageSizeWithRotation(currentPageIndex));

                        // Create page
                        document.NewPage();
                        PdfImportedPage importedPage =
                            writer.GetImportedPage(reader, currentPageIndex);


                        // Determine page orientation
                        int pageOrientation = reader.GetPageRotation(currentPageIndex);
                        if ((pageOrientation == 90) || (pageOrientation == 270))
                        {
                            content.AddTemplate(importedPage, 0, -1f, 1f, 0, 0,
                                reader.GetPageSizeWithRotation(currentPageIndex).Height);
                        }
                        else
                        {
                            content.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                throw new Exception("There has an unexpected exception" +
                        " occured during the pdf merging process.", exception);
            }
            finally
            {
                document.Close();
            }
            return output.GetBuffer();
        }
        /// <summary> 合併PDF檔(集合) </summary>
        /// <param name="fileList">欲合併PDF檔之集合(一筆以上)</param>
        /// <param name="outMergeFile">合併後的檔名</param>
        ///     /// <param name="isA4">A5纸张转A4</param>
        public static void mergePDFFiles(string[] fileList, string outMergeFile, bool isA4)
        {
            iTextSharp.text.pdf.PdfReader reader, reader1;
            Document document;

            if (isA4) //是否使用A4纸
            {
                //全用A4
                document = new Document();
            }
            else
            {
                reader1  = new PdfReader(fileList[0]);
                document = new Document(reader1.GetPageSizeWithRotation(1));
            }
            try
            {
                //删除已有文件
                bool b = true;
                if (File.Exists(outMergeFile))
                {
                    try { File.Delete(outMergeFile); }
                    catch (Exception) { b = false; }
                }
                if (b)
                {
                    //如果文件存在则覆盖,如果不存在则创建
                    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outMergeFile, FileMode.Create));
                    document.Open();
                    PdfContentByte  cb = writer.DirectContent;
                    PdfImportedPage newPage;
                    //合并PDF文档
                    for (int i = 0; i < fileList.Length; i++)
                    {
                        reader = new iTextSharp.text.pdf.PdfReader(fileList[i]);
                        int iPageNum = reader.NumberOfPages;
                        for (int j = 1; j <= iPageNum; j++)
                        {
                            if (!isA4)
                            {
                                document.SetPageSize(reader.GetPageSizeWithRotation(1));
                            }
                            else
                            {
                                document.SetPageSize(reader.GetPageSizeWithRotation(1));
                            }
                            document.NewPage();
                            newPage = writer.GetImportedPage(reader, j);
                            int rotation = reader.GetPageRotation(1);
                            if (rotation == 90 || rotation == 270)
                            {
                                if (isA4)
                                {
                                    cb.AddTemplate(newPage, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(1).Height);
                                }
                                else
                                {
                                    cb.AddTemplate(newPage, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(1).Height);
                                }
                            }
                            else
                            {
                                cb.AddTemplate(newPage, 1f, 0, 0, 1f, 0, 0);
                            }
                        }
                    }
                }
            }
            finally
            {
                document.Close();
            }
        }
示例#27
0
        private void pocketmodstyle()
        {
            PdfReader pr = new PdfReader(ofd.FileName);
            if (pr.IsEncrypted())
            {
                MessageBox.Show(ofd.FileName + " is protected.",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return;
            }

            try
            {

                var dst = PageSize.GetRectangle(comboBox1.SelectedItem.ToString());
                var doc = new Document(dst);
                var pw = PdfWriter.GetInstance(doc, new FileStream(sfd.FileName, FileMode.Create));
                doc.Open();

                for (var page = 1; page <= pr.NumberOfPages; page++)
                {
                    if (page % 8 == 1) doc.NewPage();

                    var pcb = pw.DirectContent;
                    var src = pr.GetPageSize(page);
                    int rot = pr.GetPageRotation(page);

                    bool isLandscape = (src.Width > src.Height) ? true : false;
                    float scale;
                    float offset;
                    if (isLandscape)
                    {
                        scale = dst.Height / (src.Height * 4);
                        offset = (dst.Width / 2 - (scale * src.Width)) / 2;
                    }
                    else
                    {
                        scale = dst.Height / (src.Width * 4);
                        offset = (dst.Width / 2 - (scale * src.Height)) / 2;
                    }

                    // For scaling and rotation
                    var transRotate = new iTextSharp.awt.geom.AffineTransform();
                    transRotate.SetToIdentity();
                    transRotate.Scale(scale, scale);

                    // For position
                    var transAdjust = new iTextSharp.awt.geom.AffineTransform();
                    transAdjust.SetToIdentity();

                    // Affine translation of PocketMod style.
                    if (isLandscape || (rot == 90 || rot == 270))
                    {
                        var px = dst.Width / 2;
                        var py = dst.Height / 4;
                        var rads = 180 * Math.PI / 180;

                        switch (page % 8)
                        {
                            // LEFT SIDE
                            // Rotate 180 degrees
                            case 1:
                                transAdjust.Translate(px - offset, py * 4);
                                transRotate.Rotate(-rads);
                                break;
                            case 0: // as 8
                                transAdjust.Translate(px - offset, py * 3);
                                transRotate.Rotate(-rads);
                                break;
                            case 7:
                                transAdjust.Translate(px - offset, py * 2);
                                transRotate.Rotate(-rads);
                                break;
                            case 6:
                                transAdjust.Translate(px - offset, py);
                                transRotate.Rotate(-rads);
                                break;

                            // RIGHT SIDE
                            // no rotation
                            case 2:
                                transAdjust.Translate(px + offset, py * 3);
                                break;
                            case 3:
                                transAdjust.Translate(px + offset, py * 2);
                                break;
                            case 4:
                                transAdjust.Translate(px + offset, py);
                                break;
                            case 5:
                                transAdjust.Translate(px + offset, 0);
                                break;
                        }

                    }
                    else
                    {
                        var px = dst.Width / 2;
                        var py = dst.Height / 4;
                        var rads = 90 * Math.PI / 180;

                        switch (page % 8)
                        {
                            // LEFT SIDE
                            // Rotate counterclockwise 90 degrees
                            case 1:
                                transAdjust.Translate(px - offset, py * 3);
                                transRotate.Rotate(rads);
                                break;
                            case 0: // as 8
                                transAdjust.Translate(px - offset, py * 2);
                                transRotate.Rotate(rads);
                                break;
                            case 7:
                                transAdjust.Translate(px - offset, py);
                                transRotate.Rotate(rads);
                                break;
                            case 6:
                                transAdjust.Translate(px - offset, 0);
                                transRotate.Rotate(rads);
                                break;

                            // RIGHT SIDE
                            // Rotate clockwise 90 degrees
                            case 2:
                                transAdjust.Translate(px + offset, py * 4);
                                transRotate.Rotate(-rads);
                                break;
                            case 3:
                                transAdjust.Translate(px + offset, py * 3);
                                transRotate.Rotate(-rads);
                                break;
                            case 4:
                                transAdjust.Translate(px + offset, py * 2);
                                transRotate.Rotate(-rads);
                                break;
                            case 5:
                                transAdjust.Translate(px + offset, py);
                                transRotate.Rotate(-rads);
                                break;
                        }

                    }
                    var finalTrans = new iTextSharp.awt.geom.AffineTransform();
                    finalTrans.SetToIdentity();
                    finalTrans.Concatenate(transAdjust);
                    finalTrans.Concatenate(transRotate);

                    var importedPage = pw.GetImportedPage(pr, page);
                    pcb.AddTemplate(importedPage, finalTrans);

                    if ((page % 8 == 0)||(page == pr.NumberOfPages))
                    {
                        // Draw guide line for folding.
                        pcb.SetLineWidth(0.01f);

                        // Outside frame
                        if (checkBox1.Checked)
                        {
                            pcb.MoveTo(0f, 0f);
                            pcb.LineTo(dst.Width, 0f);
                            pcb.LineTo(dst.Width, dst.Height);
                            pcb.LineTo(0f, dst.Height);
                            pcb.LineTo(0f, 0f);
                            pcb.Stroke();
                        }

                        pcb.MoveTo(0f, dst.Height * 3 / 4f);
                        pcb.LineTo(dst.Width, dst.Height * 3 / 4);
                        pcb.Stroke();

                        pcb.MoveTo(0f, dst.Height * 2 / 4f);
                        pcb.LineTo(dst.Width, dst.Height * 2 / 4);
                        pcb.Stroke();

                        pcb.MoveTo(0f, dst.Height * 1 / 4f);
                        pcb.LineTo(dst.Width, dst.Height * 1 / 4);
                        pcb.Stroke();

                        pcb.MoveTo(dst.Width / 2, 0f);
                        pcb.LineTo(dst.Width / 2, dst.Height * 1 / 4);
                        pcb.Stroke();

                        pcb.MoveTo(dst.Width / 2, dst.Height * 3 / 4);
                        pcb.LineTo(dst.Width / 2, dst.Height);
                        pcb.Stroke();

                        pcb.SetLineDash(3f, 3f);
                        pcb.MoveTo(dst.Width / 2, dst.Height * 1 / 4);
                        pcb.LineTo(dst.Width / 2, dst.Height * 3 / 4);
                        pcb.Stroke();

                        pcb.SetLineDash(0);
                    }

                }

                doc.Close();
                pw.Close();
                pr.Close();

            }
            catch (Exception e)
            {
                Console.WriteLine("{0} Exception caught.", e);
            }
        }
示例#28
0
            public void AddAnnotation(PdfAnnotation annot)
            {
                ArrayList allAnnots = new ArrayList();

                if (annot.IsForm())
                {
                    PdfFormField field = (PdfFormField)annot;
                    if (field.Parent != null)
                    {
                        return;
                    }
                    expandFields(field, allAnnots);
                    if (_cstp.FieldTemplates == null)
                    {
                        _cstp.FieldTemplates = new Hashtable();
                    }
                }
                else
                {
                    allAnnots.Add(annot);
                }
                for (int k = 0; k < allAnnots.Count; ++k)
                {
                    annot = (PdfAnnotation)allAnnots[k];
                    if (annot.IsForm())
                    {
                        if (!annot.IsUsed())
                        {
                            Hashtable templates = annot.Templates;
                            if (templates != null)
                            {
                                foreach (object tpl in templates.Keys)
                                {
                                    _cstp.FieldTemplates[tpl] = null;
                                }
                            }
                        }
                        PdfFormField field = (PdfFormField)annot;
                        if (field.Parent == null)
                        {
                            addDocumentField(field.IndirectReference);
                        }
                    }
                    if (annot.IsAnnotation())
                    {
                        PdfObject pdfobj = PdfReader.GetPdfObject(_pageN.Get(PdfName.Annots), _pageN);
                        PdfArray  annots = null;
                        if (pdfobj == null || !pdfobj.IsArray())
                        {
                            annots = new PdfArray();
                            _pageN.Put(PdfName.Annots, annots);
                        }
                        else
                        {
                            annots = (PdfArray)pdfobj;
                        }
                        annots.Add(annot.IndirectReference);
                        if (!annot.IsUsed())
                        {
                            PdfRectangle rect = (PdfRectangle)annot.Get(PdfName.Rect);
                            if (rect != null && (rect.Left.ApproxNotEqual(0) || rect.Right.ApproxNotEqual(0) || rect.Top.ApproxNotEqual(0) || rect.Bottom.ApproxNotEqual(0)))
                            {
                                int       rotation = _reader.GetPageRotation(_pageN);
                                Rectangle pageSize = _reader.GetPageSizeWithRotation(_pageN);
                                switch (rotation)
                                {
                                case 90:
                                    annot.Put(PdfName.Rect, new PdfRectangle(
                                                  pageSize.Top - rect.Bottom,
                                                  rect.Left,
                                                  pageSize.Top - rect.Top,
                                                  rect.Right));
                                    break;

                                case 180:
                                    annot.Put(PdfName.Rect, new PdfRectangle(
                                                  pageSize.Right - rect.Left,
                                                  pageSize.Top - rect.Bottom,
                                                  pageSize.Right - rect.Right,
                                                  pageSize.Top - rect.Top));
                                    break;

                                case 270:
                                    annot.Put(PdfName.Rect, new PdfRectangle(
                                                  rect.Bottom,
                                                  pageSize.Right - rect.Left,
                                                  rect.Top,
                                                  pageSize.Right - rect.Right));
                                    break;
                                }
                            }
                        }
                    }
                    if (!annot.IsUsed())
                    {
                        annot.SetUsed();
                        _cstp.AddToBody(annot, annot.IndirectReference);
                    }
                }
            }
示例#29
0
 public void MergeFiles(string destinationFile, string[] sourceFiles)
 {
     int f = 0;
     PdfReader reader = new PdfReader(sourceFiles[f]);
     int n = reader.NumberOfPages;
     Document document = new Document(reader.GetPageSizeWithRotation(1));
     PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create));
     document.Open();
     PdfContentByte cb = writer.DirectContent;
     PdfImportedPage page;
     int rotation;
     while (f < sourceFiles.Length)
     {
         int i = 0;
         while (i < n)
         {
             i++;
             document.SetPageSize(reader.GetPageSizeWithRotation(i));
             document.NewPage();
             page = writer.GetImportedPage(reader, i);
             rotation = reader.GetPageRotation(i);
             if (rotation == 90 || rotation == 270)
             {
                 cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
             }
             else
             {
                 cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
             }
         }
         f++;
         if (f < sourceFiles.Length)
         {
             reader = new PdfReader(sourceFiles[f]);
             n = reader.NumberOfPages;
         }
     }
     document.Close();
 }
示例#30
0
        /// <summary>
        /// Concatenates multiple PDF files together.
        /// </summary>
        /// <param name="outputPDFTitle">The name of the temp file to write</param>
        /// <param name="args">list of files (paths) to concatentate</param>
        public bool ConcatPDFs(string outputPDFTitle, String[] args)
        {
            Document document = new Document();
            try
            {
                int f = 0;
                // we create a reader for a certain document
                PdfReader reader = new PdfReader(args[f]);
                // we retrieve the total number of pages
                int n = reader.NumberOfPages;

                // step 1: creation of a document-object
                document = new Document(reader.GetPageSizeWithRotation(1));

                // step 2: we create a writer that listens to the document
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputPDFTitle, FileMode.Create));

                // step 3: we open the document
                document.Open();

                PdfContentByte cb = writer.DirectContent;
                PdfImportedPage page;
                int rotation;

                // step 4: we add content
                while (f < args.Length)
                {
                    int i = 0;
                    while (i < n)
                    {
                        i++;
                        document.SetPageSize(reader.GetPageSizeWithRotation(i));
                        document.NewPage();
                        page = writer.GetImportedPage(reader, i);
                        rotation = reader.GetPageRotation(i);
                        if (rotation == 90 || rotation == 270)
                        {
                            cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                        }
                        else
                        {
                            cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                        }
                    }
                    f++;
                    if (f < args.Length)
                    {
                        reader = new PdfReader(args[f]);
                        // we retrieve the total number of pages
                        n = reader.NumberOfPages;
                    }
                }

                // step 5: we close the document
                document.Close();

                return true;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                if (document.IsOpen())
                {
                    document.Close();
                }
                return false;
            }
        }
示例#31
0
        public static byte[] InsertImage(byte[] sourceFile, iTextSharp.text.Image image, int pageNumber, double x, double y, string headerSignature)
        {
            try
            {
                var reader = new PdfReader(sourceFile);
                int n = reader.NumberOfPages;

                // step 1: creation of a document-object
                var document = new Document(reader.GetPageSizeWithRotation(1));
                
                // step 2: we create a writer that listens to the document
                byte[] bytes;
                using (var stream = new MemoryStream())
                {
                    var writer = PdfWriter.GetInstance(document, stream);

                    // step 3: we open the document
                    document.Open();
                    var cb = writer.DirectContent;
                    PdfImportedPage page;

                    // step 4: we add content
                    int i = 0;
                    while (i < n)
                    {
                        i++;
                        document.SetPageSize(reader.GetPageSizeWithRotation(i));
                        document.NewPage();
                        page = writer.GetImportedPage(reader, i);
                        int rotation = reader.GetPageRotation(i);
                        if (rotation == 90 || rotation == 270)
                            cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                        else
                            cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);

                        // inserisco l'immagine con la firma
                        if (i == pageNumber)
                        {
                            cb.AddImage(image);

                            // Data del giorno
                            cb.BeginText();
                            var bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
                            cb.SetFontAndSize(bf, 10);
                            var text = headerSignature;

                            // we show some text starting on some absolute position with a given alignment
                            cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, Convert.ToInt64(x) - 25, Convert.ToInt64(y) + 60, 0);

                            // we tell the contentByte, we've finished drawing text
                            cb.EndText();
                        }
                    }

                    // step 5: we close the document
                    document.Close();
                    bytes = stream.ToArray();
                }

                return bytes;
            }

            catch(Exception e)
            {
                var log = LogManager.GetLogger("Sfera");
                log.ErrorFormat("Errore nell'impostazione della firma su pdf - {0}", e, Gipasoft.Library.Utility.GetMethodDescription());
                throw;
            }
        }
示例#32
0
        public byte[] MergeFiles(List<byte[]> sourceFiles)
        {
            var document = new Document();
            var output = new MemoryStream();

            // Initialize pdf writer
            var writer = PdfWriter.GetInstance(document, output);
            writer.PageEvent = new PdfPageEvents();

            // Open document to write
            document.Open();
            var content = writer.DirectContent;

            // Iterate through all pdf documents
            foreach (byte[] sourceFile in sourceFiles)
            {
                var reader = new PdfReader(sourceFile);
                var numberOfPages = reader.NumberOfPages;

                // Iterate through all pages
                for (var currentPageIndex = 1; currentPageIndex <= numberOfPages; currentPageIndex++)
                {
                    // Determine page size for the current page
                    document.SetPageSize(reader.GetPageSizeWithRotation(currentPageIndex));

                    // Create page
                    document.NewPage();
                    var importedPage = writer.GetImportedPage(reader, currentPageIndex);

                    // Determine page orientation
                    var pageOrientation = reader.GetPageRotation(currentPageIndex);
                    if ((pageOrientation == 90) || (pageOrientation == 270))
                    {
                        content.AddTemplate(importedPage, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(currentPageIndex).Height);
                    }
                    else
                    {
                        content.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0);
                    }
                }
            }

            document.Close();

            return output.GetBuffer();
        }
    private void SaveReferenceWithWatermark(byte[] uploadedFile, string fileName)
    {
        PdfReader reader = new PdfReader(uploadedFile);

        int n = reader.NumberOfPages;

        Document document = new Document(reader.GetPageSizeWithRotation(1));

        PdfWriter writer = PdfWriter.GetInstance(document, new System.IO.FileStream(FilePath + fileName, System.IO.FileMode.Create));

        document.Open();

        PdfContentByte cb = writer.DirectContent;
        PdfImportedPage page;
        int rotation;

        for (int i = 1; i <= n; i++)
        {
            document.SetPageSize(reader.GetPageSizeWithRotation(i));
            document.NewPage();

            page = writer.GetImportedPage(reader, i);

            rotation = reader.GetPageRotation(i);

            if (rotation == 90 || rotation == 270)
                cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
            else
                cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);

            BaseFont bf = BaseFont.CreateFont(BaseFont.COURIER, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
            cb.BeginText();
            cb.SetFontAndSize(bf, 26f);
            cb.SetColorFill(Color.RED);
            cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "CONFIDENTIAL", reader.GetPageSizeWithRotation(i).Width / 2f, reader.GetPageSizeWithRotation(i).Height - 26f, 0);
            //cb.ShowText(currentApplication.Files[f].FileType.FileTypeName);
            cb.EndText();

        }

        document.Close();
    }
示例#34
0
        public void zerlegePdfInEinzelseiten(string zuZerlegendeDatei)
        {
            try
            {
                FileInfo file = new FileInfo(zuZerlegendeDatei);
                string name = file.Name.Substring(0, file.Name.LastIndexOf("."));
                // we create a reader for a certain document
                PdfReader reader = new PdfReader(zuZerlegendeDatei);
                // we retrieve the total number of pages
                int n = reader.NumberOfPages;
                int digits = 1 + (n / 10);
                Document document;
                int pagenumber;
                string filename;

                for (int i = 0; i < n; i++)
                {
                    pagenumber = i + 1;
                    filename = pagenumber.ToString();
                    while (filename.Length < digits) filename = "0" + filename;
                    filename = "_" + filename + ".pdf";
                    // step 1: creation of a document-object
                    document = new Document(reader.GetPageSizeWithRotation(pagenumber));
                    // step 2: we create a writer that listens to the document
                    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(this.Unterverzeichnis + "\\" + name + filename, FileMode.Create));
                    // step 3: we open the document
                    document.Open();
                    PdfContentByte cb = writer.DirectContent;
                    PdfImportedPage page = writer.GetImportedPage(reader, pagenumber);
                    int rotation = reader.GetPageRotation(pagenumber);
                    if (rotation == 90 || rotation == 270)
                    {
                        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pagenumber).Height);
                    }
                    else
                    {
                        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }
                    // step 5: we close the document
                    document.Close();
                }
            }
            catch
            {
                //MessageBox.Show("Welche Datei solles sein?");
            }
        }
示例#35
0
        private static void MergePDFs(IList fileList, string destinationfile)
        {
            var document = new Document();
            try {
                var writer = PdfWriter.GetInstance(document, new FileStream(destinationfile, FileMode.Create));
                document.Open();

                foreach (string filename in fileList) {
                    var reader = new PdfReader(filename);
                    for (int i = 0; i++ < reader.NumberOfPages; ) {
                        document.SetPageSize(reader.GetPageSizeWithRotation(1));
                        document.NewPage();

                        if (i == 1) {
                            var fileRef = new Chunk(" ");
                            fileRef.SetLocalDestination(filename);
                            document.Add(fileRef);
                        }

                        if (reader.GetPageRotation(i) == 90 || reader.GetPageRotation(i) == 270) {
                            writer.DirectContent.AddTemplate(writer.GetImportedPage(reader, i), 0, -1f, 1f, 0, 0,
                            reader.GetPageSizeWithRotation(i).Height);
                        }
                        else
                            writer.DirectContent.AddTemplate(writer.GetImportedPage(reader, i), 1f, 0, 0, 1f, 0, 0);
                    }
                }
            }
            catch (Exception e) { throw e; }
            finally { document.Close(); }
        }
        // based on example http://itextsharp.sourceforge.net/examples/Concat.cs
        public string ConcatFilesOld(List <string> files, string targetPath)
        {
            try
            {
                if (files.Count > 0)
                {
                    string file = files[0];
                    iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(GetFullPath(file));
                    int n = reader.NumberOfPages;
                    iTextSharp.text.Document      document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1));
                    iTextSharp.text.pdf.PdfWriter writer   = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new System.IO.FileStream(targetPath, System.IO.FileMode.Create));

                    reader.Close();
                    document.Open();
                    iTextSharp.text.pdf.PdfContentByte  cb = writer.DirectContent;
                    iTextSharp.text.pdf.PdfImportedPage page;
                    int rotation;
                    foreach (string sourceFile in files)
                    {
                        int i = 0;
                        iTextSharp.text.pdf.PdfReader reader2 = new iTextSharp.text.pdf.PdfReader(GetFullPath(sourceFile));
                        n = reader2.NumberOfPages;
                        while (i < n)
                        {
                            i++;
                            document.SetPageSize(reader2.GetPageSizeWithRotation(i));
                            document.NewPage();
                            page     = writer.GetImportedPage(reader2, i);
                            rotation = reader2.GetPageRotation(i);
                            if (rotation == 90)
                            {
                                cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader2.GetPageSizeWithRotation(i).Height);
                            }
                            else if ((rotation == 270))
                            {
                                cb.AddTemplate(page, 0f, 1f, -1f, 0f, reader2.GetPageSizeWithRotation(i).Width, 0f);
                            }
                            else
                            {
                                cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                            }
                        }

                        writer.FreeReader(reader2);
                        reader2.Close();
                    }

                    if (document.IsOpen())
                    {
                        document.CloseDocument();
                        document.Close();
                    }
                    return("");
                }
                else
                {
                    return("No files to process, use AddFile method");
                }
            }
            catch (Exception e)
            {
                return(e.Message);
            }
        }
示例#37
0
        /// <summary>
        /// Merge CV and covering letter and return pdf location
        /// </summary>
        /// <param name="filesToMerge"></param>
        /// <param name="outputFilename"></param>
        /// <param name="result"></param>
        public static void MergePdf(IEnumerable<BulkPrintDocEntry> filesToMerge, string outputFilename, ref BulkPrintCvResult result)
        {
            result.ErrorCvs = new List<BulkPrintErrorCvs>();
            var bulkPrintDocEntries = filesToMerge as BulkPrintDocEntry[] ?? filesToMerge.ToArray();
            if (!bulkPrintDocEntries.Any()) return;
            var document = new iTextSharp.text.Document();
            // initialize pdf writer
            var writer = PdfWriter.GetInstance(document, new FileStream(outputFilename, FileMode.Create));
            // open document to write
            document.Open();
            var content = writer.DirectContent;
            foreach (var docEntry in bulkPrintDocEntries)
            {
                var sCoveringLetterHtml = docEntry.CoveringLetterHtml;
                // create page
                document.NewPage();
                // add styles
                var styles = new StyleSheet();
                styles.LoadStyle("left", "width", "22%");
                styles.LoadTagStyle("td", "valign", "top");
                styles.LoadStyle("bordered", "border", "1");
                var hw = new HTMLWorker(document, null, styles);
                hw.Parse(new StringReader(sCoveringLetterHtml));
                var sFileName = docEntry.CvFileName.ToLower().Replace(".docx", ".pdf").Replace(".DOCX", ".pdf").Replace(".doc", ".pdf").Replace(".DOC", ".pdf").Replace(".rtf", ".pdf").Replace(".RTF", ".pdf");
                if (!File.Exists(sFileName))
                {
                    //pdf file not exists
                    result.ErrorCvs.Add(new BulkPrintErrorCvs
                    {
                        Error = "Pdf file does not exists. " + sFileName,
                        ContactId = docEntry.ContactId,
                        ContactName = new Contacts().GetCandidateName(docEntry.ContactId),
                        Document = docEntry.Doc
                    });
                    continue;
                }

                // Create pdf reader
                var reader = new PdfReader(sFileName);
                if (!reader.IsOpenedWithFullPermissions)
                {
                    //pdf file does not have permission
                    result.ErrorCvs.Add(new BulkPrintErrorCvs
                    {
                        Error = "Do not have enough permissions to read the file",
                        ContactId = docEntry.ContactId,
                        ContactName = new Contacts().GetCandidateName(docEntry.ContactId),
                        Document = docEntry.Doc
                    });
                    continue;
                }

                var numberOfPages = reader.NumberOfPages;

                // Iterate through all pages
                for (var currentPageIndex = 1; currentPageIndex <= numberOfPages; currentPageIndex++)
                {
                    // Determine page size for the current page
                    document.SetPageSize(reader.GetPageSizeWithRotation(currentPageIndex));
                    // Create page
                    document.NewPage();
                    var importedPage = writer.GetImportedPage(reader, currentPageIndex);
                    // Determine page orientation
                    var pageOrientation = reader.GetPageRotation(currentPageIndex);
                    switch (pageOrientation)
                    {
                        case 90:
                            content.AddTemplate(importedPage, 0, -1, 1, 0, 0, reader.GetPageSizeWithRotation(currentPageIndex).Height);
                            break;
                        case 270:
                            content.AddTemplate(importedPage, 0, 1, -1, 0, reader.GetPageSizeWithRotation(currentPageIndex).Width, 0);
                            break;
                        default:
                            content.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0);
                            break;
                    }
                }
            }
            document.Close();
        }
        public ScanPages ExtractDocInfo(string uniqName, string fileName, int maxPagesToExtractFrom, ref int totalPages)
        {
            ScanPages scanPages = null;

            // Extract text and location from pdf pages
            using (Stream newpdfStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                List<List<LocationTextExtractionStrategyEx.TextInfo>> extractedTextAndLoc = new List<List<LocationTextExtractionStrategyEx.TextInfo>>();

                using (PdfReader pdfReader = new PdfReader(newpdfStream))
                {
                    int numPagesToUse = pdfReader.NumberOfPages;
                    if (numPagesToUse > maxPagesToExtractFrom)
                        numPagesToUse = maxPagesToExtractFrom;
                    int numPagesWithText = 0;
                    for (int pageNum = 1; pageNum <= numPagesToUse; pageNum++)
                    {
                        LocationTextExtractionStrategyEx locationStrategy = new LocationTextExtractionStrategyEx();
                        try
                        {
                            string text = PdfTextExtractor.GetTextFromPage(pdfReader, pageNum, locationStrategy);
                            if (text != "")
                                numPagesWithText++;
                            extractedTextAndLoc.Add(locationStrategy.TextLocationInfo);
                        }
                        catch (Exception excp)
                        {
                            logger.Error("Failed to extract from pdf {0}, page {1} excp {2}", fileName, pageNum, excp.Message);
                        }
                    }

                    // Create new structures for the information
                    int pageNumber = 1;
                    List<List<ScanTextElem>> scanPagesText = new List<List<ScanTextElem>>();
                    List<int> pageRotations = new List<int>();
                    foreach (List<LocationTextExtractionStrategyEx.TextInfo> pageInfo in extractedTextAndLoc)
                    {
                        iTextSharp.text.Rectangle pageRect = pdfReader.GetPageSize(pageNumber);
                        int pageRot = pdfReader.GetPageRotation(pageNumber);

                        // Check through found text to see if the page seems to be rotated
                        int[] rotCounts = new int[] { 0, 0, 0, 0 };
                        if (pageInfo.Count > 2)
                        {
                            foreach (LocationTextExtractionStrategyEx.TextInfo txtInfo in pageInfo)
                            {
                                int thisRotation = GetTextRotation(txtInfo.TopLeft, txtInfo.BottomRight);
                                rotCounts[(thisRotation / 90) % 4]++;
                            }
                        }
                        int maxRot = 0;
                        int maxRotCount = 0;
                        for (int i = 0; i < rotCounts.Length; i++)
                            if (maxRotCount < rotCounts[i])
                            {
                                maxRotCount = rotCounts[i];
                                maxRot = i * 90;
                            }
                        //Console.WriteLine("{2} Page{0}rot = {1}", pageNumber, maxRot, uniqName);

                        List<ScanTextElem> scanTextElems = new List<ScanTextElem>();
                        foreach (LocationTextExtractionStrategyEx.TextInfo txtInfo in pageInfo)
                        {
                            DocRectangle boundsRectPercent = ConvertToDocRect(txtInfo.TopLeft, txtInfo.BottomRight, pageRect, maxRot);
                            ScanTextElem sti = new ScanTextElem(txtInfo.Text, boundsRectPercent);
                            scanTextElems.Add(sti);
                        }
                        scanPagesText.Add(scanTextElems);
                        pageRotations.Add(maxRot);
                        pageNumber++;
                    }

                    // Total pages
                    totalPages = pdfReader.NumberOfPages;
                    scanPages = new ScanPages(uniqName, pageRotations, scanPagesText);
                    pdfReader.Close();

                    // Sleep for a little to allow other things to run
                    Thread.Sleep(100);
                }
            }

            // Return scanned text from pages
            return scanPages;
        }
示例#39
0
        public static void MergeFiles(string destinationFile, string[] sourceFiles)
        {
            try
            {
                int f = 0;
                // we create a reader for a certain document
                PdfReader reader = new PdfReader(sourceFiles[f]);
                // we retrieve the total number of pages
                int n = reader.NumberOfPages;
                //Console.WriteLine("There are " + n + " pages in the original file.");
                // step 1: creation of a document-object

                Document document = new Document(reader.GetPageSizeWithRotation(1));
                // step 2: we create a writer that listens to the document
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create));
                // step 3: we open the document
                document.Open();

                PdfContentByte cb = writer.DirectContent;
                PdfImportedPage page;
                int rotation;
                // step 4: we add content
                while (f < sourceFiles.Length)
                {
                    int i = 0;
                    while (i < n)
                    {
                        i++;
                        document.SetPageSize(reader.GetPageSizeWithRotation(i));
                        document.NewPage();
                        page = writer.GetImportedPage(reader, i);
                        rotation = reader.GetPageRotation(i);
                        if (rotation == 90 || rotation == 270)
                        {
                            cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                        }
                        else
                        {
                            cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                        }
                        //Console.WriteLine("Processed page " + i);
                    }
                    f++;
                    if (f < sourceFiles.Length)
                    {
                        reader = new PdfReader(sourceFiles[f]);
                        // we retrieve the total number of pages
                        n = reader.NumberOfPages;
                        //Console.WriteLine("There are " + n + " pages in the original file.");
                    }
                }			// step 5: we close the document
                document.Close();
            }
            catch (Exception e)
            {
                string strOb = e.Message;
            }
        }
示例#40
0
 internal void ReplacePage(PdfReader r, int pageImported, int pageReplaced) {
     PdfDictionary pageN = reader.GetPageN(pageReplaced);
     if (pagesToContent.ContainsKey(pageN))
         throw new InvalidOperationException(MessageLocalization.GetComposedMessage("this.page.cannot.be.replaced.new.content.was.already.added"));
     PdfImportedPage p = GetImportedPage(r, pageImported);
     PdfDictionary dic2 = reader.GetPageNRelease(pageReplaced);
     dic2.Remove(PdfName.RESOURCES);
     dic2.Remove(PdfName.CONTENTS);
     MoveRectangle(dic2, r, pageImported, PdfName.MEDIABOX, "media");
     MoveRectangle(dic2, r, pageImported, PdfName.CROPBOX, "crop");
     MoveRectangle(dic2, r, pageImported, PdfName.TRIMBOX, "trim");
     MoveRectangle(dic2, r, pageImported, PdfName.ARTBOX, "art");
     MoveRectangle(dic2, r, pageImported, PdfName.BLEEDBOX, "bleed");
     dic2.Put(PdfName.ROTATE, new PdfNumber(r.GetPageRotation(pageImported)));
     PdfContentByte cb = GetOverContent(pageReplaced);
     cb.AddTemplate(p, 0, 0);
     PageStamp ps = pagesToContent[pageN];
     ps.replacePoint = ps.over.InternalBuffer.Size;
 }
示例#41
0
 /// <summary>
 ///  Copy pages from the given reader into the given content.
 /// </summary>
 /// <param name="content">The content container into which data will be copied</param>
 /// <param name="reader">
 ///  The reader to collect data from a PDF document that has been opened with full permissions
 /// </param>
 /// <returns>An await-able task that will complete when all pages are copied</returns>
 private async Task GetPages(PdfContentByte content, PdfReader reader)
 {
     int pageCount = reader.NumberOfPages;
     for (int currentPage = 1; currentPage <= pageCount; currentPage++)
     {
         document.SetPageSize(reader.GetPageSize(currentPage));
         document.NewPage();
         var page = await Task.Run<PdfImportedPage>(() =>
             writer.GetImportedPage(reader, currentPage));
         var rotation = reader.GetPageRotation(currentPage);
         if (rotation == 90 || rotation == 270)
         {
             // Add the page with a transform matrix that rotates 90 degrees.
             await Task.Run(() => content.AddTemplate(page, 0f, -1f, 1f, 0f, 0f, page.Height));
         }
         else
         {
             // Add the page with an identity transform.
             await Task.Run(() => content.AddTemplate(page, 1f, 0f, 0f, 1f, 0f, 0f));
         }
     }
 }