コード例 #1
1
ファイル: Splitter.cs プロジェクト: cube-soft/CubePdfMerge
        //srcで指定されたPDFファイルをページ毎に分割し、destで指定されたパスに保存する。
        //保存ファイル名は「ファイル名-ページ番号.pdf」とする。
        //分割したページ数を返す。
        public List<string> Run(string src, string dest)
        {
            // srcで渡されたファイルが存在するか?
            if (!File.Exists(src))
            {
                throw new FileNotFoundException();
            }

            // destで渡されたフォルダが存在するか?
            if (!Directory.Exists(dest))
            {
                throw new DirectoryNotFoundException();
            }

            var reader = new iTextSharp.text.pdf.PdfReader(src);
            string file_name = Path.GetFileNameWithoutExtension(src);
            int digit = reader.NumberOfPages.ToString().Length;
            var app_name = new MainForm();

            // 一時フォルダにpdfを作成してdestにコピー。
            // その際上書き確認を行う。
            System.IO.DirectoryInfo del = new System.IO.DirectoryInfo(Path.GetTempPath() + "\\" + app_name.Text);
            if (del.Exists) del.Delete(true);
            System.IO.DirectoryInfo tmp = new System.IO.DirectoryInfo(Path.GetTempPath() + "\\" + app_name.Text);
            tmp.Create();
            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                var doc = new iTextSharp.text.Document();
                var dest_tmp = String.Format(@"{{0}}\{{1}}-{{2:D{0}}}.pdf", digit);
                var dest_name = String.Format(dest_tmp, tmp, file_name, i);
                var copy = new iTextSharp.text.pdf.PdfCopy(doc, new System.IO.FileStream(dest_name, FileMode.Create));

                doc.Open();
                copy.AddPage(copy.GetImportedPage(reader, i));
                doc.Close();
            }

            // コピーしたファイルを監視する
            Ret.list.Clear();
            var watcher = new System.IO.FileSystemWatcher();
            watcher.Path = dest;
            watcher.Filter = "*.pdf";
            watcher.Changed += new FileSystemEventHandler(changed);
            watcher.Created += new FileSystemEventHandler(changed);

            watcher.EnableRaisingEvents = true;
            FileSystem.CopyDirectory(tmp.ToString(), dest, UIOption.AllDialogs);
            watcher.EnableRaisingEvents = false;
            watcher.Dispose();
            watcher = null;

            tmp.Delete(true);
            reader.Close();

            return Ret.list;
        }
コード例 #2
0
        private static void MergeFiles(string destinationFile, string ExportPath)
        {
            #region new code

            using (FileStream stream = new FileStream(destinationFile, FileMode.Create))
            {
                iTextSharp.text.Document    pdfDoc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4);
                iTextSharp.text.pdf.PdfCopy pdf    = new iTextSharp.text.pdf.PdfCopy(pdfDoc, stream);
                pdfDoc.Open();
                var files = Directory.GetFiles(ExportPath);

                int i = 1;
                foreach (string file in files)
                {
                    // MemoryStream content= new MemoryStream(
                    var reader = new iTextSharp.text.pdf.PdfReader(file);
                    pdf.AddDocument(reader);
                    i++;
                    reader.Close();
                }

                if (pdfDoc != null)
                {
                    pdfDoc.Close();
                }
            }

            #endregion
        }
コード例 #3
0
        private System.IO.MemoryStream extractPagesFromPerfectBindStream(System.IO.MemoryStream orig_stream,
                                                                         int start_page = 1, int end_page = 1)
        {
            System.IO.MemoryStream dest_stream = null;
            try
            {
                dest_stream = new System.IO.MemoryStream();

                var doc    = new iTextSharp.text.Document();
                var writer = new iTextSharp.text.pdf.PdfCopy(doc, dest_stream);
                doc.Open();

                var reader = new iTextSharp.text.pdf.PdfReader(orig_stream.ToArray());
                for (var i = start_page; i <= end_page; i++)
                {
                    var page = writer.GetImportedPage(reader, i);
                    writer.AddPage(page);
                }

                reader.Close();
                doc.Close();
            }
            catch (Exception excpt)
            {
                System.Diagnostics.Debug.WriteLine(excpt);
            }
            return(dest_stream);
        }
コード例 #4
0
        private System.IO.MemoryStream reorderSaddleStitchBrief(System.IO.MemoryStream orig_stream)
        {
            System.IO.MemoryStream dest_stream = null;
            try
            {
                dest_stream = new System.IO.MemoryStream();



                var reader = new iTextSharp.text.pdf.PdfReader(orig_stream.ToArray());
                var order  = new SaddleStitchPageOrder(reader.NumberOfPages);
                reader.SelectPages(order.PageOrder);
                var pdfdoc           = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1));
                var pdfcopy_provider = new iTextSharp.text.pdf.PdfCopy(pdfdoc, dest_stream);
                pdfdoc.Open();
                iTextSharp.text.pdf.PdfImportedPage importedPage;
                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    importedPage = pdfcopy_provider.GetImportedPage(reader, i);
                    pdfcopy_provider.AddPage(importedPage);
                }
                pdfdoc.Close();
                reader.Close();
            }
            catch (Exception excpt)
            {
                System.Diagnostics.Debug.WriteLine(excpt);
            }
            return(dest_stream);
        }
コード例 #5
0
        private System.IO.MemoryStream joinTwoStreamsIntoOnePdf(System.IO.MemoryStream stream_1, System.IO.MemoryStream stream_2)
        {
            System.IO.MemoryStream dest_stream = null;
            try
            {
                dest_stream = new System.IO.MemoryStream();

                var doc    = new iTextSharp.text.Document();
                var writer = new iTextSharp.text.pdf.PdfCopy(doc, dest_stream);
                doc.Open();

                var reader_1 = new iTextSharp.text.pdf.PdfReader(stream_1.ToArray());
                for (var i = 1; i <= reader_1.NumberOfPages; i++)
                {
                    var page = writer.GetImportedPage(reader_1, i);
                    writer.AddPage(page);
                }
                reader_1.Close();

                var reader_2 = new iTextSharp.text.pdf.PdfReader(stream_2.ToArray());
                for (var i = 1; i <= reader_2.NumberOfPages; i++)
                {
                    var page = writer.GetImportedPage(reader_2, i);
                    writer.AddPage(page);
                }
                reader_2.Close();
                doc.Close();
            }
            catch (Exception excpt)
            {
                System.Diagnostics.Debug.WriteLine(excpt);
            }
            return(dest_stream);
        }
コード例 #6
0
        public static bool SaddleStitch_ReorderPagesForLayout(string src)
        {
            string dest = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(src), "ss brief reordered.pdf");

            try
            {
                using (var stream = new System.IO.FileStream(dest, System.IO.FileMode.Create))
                {
                    iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(src);
                    SaddleStitchPageOrder         order  = new SaddleStitchPageOrder(reader.NumberOfPages);
                    reader.SelectPages(order.PageOrder);
                    iTextSharp.text.Document    pdfdoc           = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1));
                    iTextSharp.text.pdf.PdfCopy pdfcopy_provider = new iTextSharp.text.pdf.PdfCopy(pdfdoc, stream);
                    pdfdoc.Open();
                    iTextSharp.text.pdf.PdfImportedPage importedPage;
                    for (int i = 1; i <= reader.NumberOfPages; i++)
                    {
                        importedPage = pdfcopy_provider.GetImportedPage(reader, i);
                        pdfcopy_provider.AddPage(importedPage);
                    }
                    pdfdoc.Close();
                    reader.Close();
                }
                System.IO.File.Delete(src);
                System.IO.File.Move(dest, src);
                return(true);
            }
            catch (Exception excpt) { System.Diagnostics.Debug.WriteLine(excpt); return(false); }
        }
コード例 #7
0
        public static bool CombineCoverAndInsideCover(List <CockleFilePdf> files, string src)
        {
            try
            {
                using (var stream = new System.IO.FileStream(src, System.IO.FileMode.Create))
                {
                    // initiate iTextSharp processes
                    iTextSharp.text.Document    pdfdoc  = new iTextSharp.text.Document(iTextSharp.text.PageSize.LETTER);
                    iTextSharp.text.pdf.PdfCopy pdfcopy = new iTextSharp.text.pdf.PdfCopy(pdfdoc, stream);
                    pdfdoc.Open();

                    // merge pdfs in folder
                    CockleFilePdf f;
                    for (int i = 0; i < files.Count; i++)
                    {
                        f = files[i];
                        // read file
                        iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(f.FullName);
                        int filePageCount = reader.NumberOfPages;
                        pdfcopy.AddDocument(new iTextSharp.text.pdf.PdfReader(reader));
                    }
                    pdfcopy.Close();
                    pdfdoc.CloseDocument();
                }
                return(true);
            }
            catch (Exception excpt) { System.Diagnostics.Debug.WriteLine(excpt); return(false); }
        }
コード例 #8
0
        private void createCombinedPdf_iTextSharp(List <string> InFiles, string OutFile)
        {
            try
            {
                using (var stream = new System.IO.FileStream(OutFile, System.IO.FileMode.Create))
                    using (var doc = new iTextSharp.text.Document())
                        using (var pdf = new iTextSharp.text.pdf.PdfCopy(doc, stream))
                        {
                            doc.Open();

                            iTextSharp.text.pdf.PdfReader       reader = null;
                            iTextSharp.text.pdf.PdfImportedPage page   = null;

                            //fixed typo
                            InFiles.ForEach(file =>
                            {
                                reader = new iTextSharp.text.pdf.PdfReader(file);

                                for (int i = 0; i < reader.NumberOfPages; i++)
                                {
                                    page = pdf.GetImportedPage(reader, i + 1);
                                    pdf.AddPage(page);
                                }

                                pdf.FreeReader(reader);
                                reader.Close();
                                System.IO.File.Delete(file);
                            });
                        }
            }
            catch (Exception excpt) { System.Diagnostics.Debug.WriteLine(excpt); }
        }
コード例 #9
0
        public void ExtractPage(string sourcePdfPath, string outputPdfPath, int pageNumber, int pageend)
        {
            iTextSharp.text.pdf.PdfReader       reader          = null;
            iTextSharp.text.Document            document        = null;
            iTextSharp.text.pdf.PdfCopy         pdfCopyProvider = null;
            iTextSharp.text.pdf.PdfImportedPage importedPage    = null;

            try
            {
                // Intialize a new PdfReader instance with the contents of the source Pdf file:
                reader = new iTextSharp.text.pdf.PdfReader(sourcePdfPath);

                // Capture the correct size and orientation for the page:
                document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(pageNumber));

                // Initialize an instance of the PdfCopyClass with the source
                // document and an output file stream:
                pdfCopyProvider = new iTextSharp.text.pdf.PdfCopy(document,
                                                                  new System.IO.FileStream(outputPdfPath, System.IO.FileMode.Create));

                document.Open();

                // Extract the desired page number:
                if (pageNumber == pageend)
                {
                    importedPage = pdfCopyProvider.GetImportedPage(reader, pageNumber + 1);
                    pdfCopyProvider.AddPage(importedPage);
                }
                else
                {
                    for (int i = pageNumber; i <= pageend; i++)
                    {
                        importedPage = pdfCopyProvider.GetImportedPage(reader, i + 1);
                        pdfCopyProvider.AddPage(importedPage);
                    }
                }

                document.Close();
                reader.Close();
            }
            catch (Exception ex)
            {
                _arCommonService.CreateErrorLog(ex.Message, ex.StackTrace);
            }
        }
コード例 #10
0
        private void SaveFile(int desde)
        {
            if (CDPSession.Current.File == null)
            {
                return;
            }

            var pageCount   = GetPageCount();
            var currentPage = 1;

            CDPSession.Current.File.InputStream.Position = 0;

            using (var ms = new MemoryStream())
            {
                CDPSession.Current.File.InputStream.CopyTo(ms);
                var reader = new iTextSharp.text.pdf.PdfReader(ms.ToArray());

                for (var i = 1; i <= pageCount; i++)
                {
                    var newFile = string.Format("{0}{1}.pdf", _folder, desde);
                    var doc     = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(currentPage));
                    var pdfCpy  = new iTextSharp.text.pdf.PdfCopy(doc, new System.IO.FileStream(newFile, System.IO.FileMode.Create));

                    doc.Open();
                    for (var j = 1; j <= 4; j++)
                    {
                        iTextSharp.text.pdf.PdfImportedPage page = pdfCpy.GetImportedPage(reader, currentPage);
                        //pdfCpy.SetFullCompression();
                        pdfCpy.AddPage(page);
                        currentPage += 1;
                    }

                    desde++;
                    doc.Close();
                    pdfCpy.Close();
                }

                reader.Close();
            }
        }
コード例 #11
0
        private void MergeFiles(string destinationFile, string ExportPath)
        {
            #region old code
            //        if (System.IO.File.Exists(destinationFile))
            //            System.IO.File.Delete(destinationFile);

            //        string[] sSrcFile;
            //        sSrcFile = new string[sourceFiles.Count()];

            //        string[] arr = new string[sourceFiles.Count()];
            //        for (int i = 0; i <= sourceFiles.Length - 1; i++)
            //        {
            //            if (sourceFiles[i] != null)
            //            {
            //                if (sourceFiles[i].Trim() != "")
            //                    arr[i] = sourceFiles[i].ToString();
            //            }
            //        }

            //        if (arr != null)
            //        {
            //            sSrcFile = new string[sourceFiles.Count()];

            //            for (int ic = 0; ic <= arr.Length - 1; ic++)
            //            {
            //                sSrcFile[ic] = arr[ic].ToString();
            //            }
            //        }
            //        try
            //        {
            //            int f = 0;

            //            using (iTextSharp.text.Document document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4))
            //            {

            //                iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create));

            //                document.Open();
            //                iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent;
            //                iTextSharp.text.pdf.PdfImportedPage page;

            //                int rotation;
            //                while (f < sSrcFile.Length)
            //                {

            //                    iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(sSrcFile[f]);
            //                    int n = reader.NumberOfPages;
            //                    int i = 0;
            //                    while (i < n)
            //                    {
            //                        i++;

            //                        document.SetPageSize(iTextSharp.text.PageSize.A4);
            //                        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++;
            //                   // reader.Dispose();
            //                    //if (f < sSrcFile.Length)
            //                    //{

            //                    //    reader = new iTextSharp.text.pdf.PdfReader(sSrcFile[f]);
            //                    //    n = reader.NumberOfPages;

            //                    //}



            //                }

            //                document.Close();

            //                // reader.Close();
            //               //  reader.Dispose();
            //            }
            //           // reader.Close();
            //           // reader.Dispose();
            //           //reader = new PdfReader();
            //           // sSrcFile= new string[0];
            //        }

            //        catch (Exception e)
            //        {
            //            // Response.Write(e.Message);
            //        }


            //    }


            //}
            #endregion

            #region new code

            using (FileStream stream = new FileStream(destinationFile, FileMode.Create))
            {
                iTextSharp.text.Document    pdfDoc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4);
                iTextSharp.text.pdf.PdfCopy pdf    = new iTextSharp.text.pdf.PdfCopy(pdfDoc, stream);
                pdfDoc.Open();
                var files = Directory.GetFiles(ExportPath);

                int i = 1;
                foreach (string file in files)
                {
                    var reader = new iTextSharp.text.pdf.PdfReader(file);
                    pdf.AddDocument(reader);
                    i++;
                    reader.Close();
                }

                if (pdfDoc != null)
                {
                    pdfDoc.Close();
                }
            }

            #endregion
        }
コード例 #12
0
ファイル: Form1.cs プロジェクト: al1-sasha/Convertor
        public void splitPdfByPages(String sourcePdf, int numOfPages, string baseNameOutPdf)
        {
            int    pageCount  = 0;
            string path       = Path.GetFullPath(sourcePdf);
            string separtator = "_";
            string extension  = ".pdf";

            try
            {
                raf       = new iTextSharp.text.pdf.RandomAccessFileOrArray(sourcePdf);
                reader    = new iTextSharp.text.pdf.PdfReader(raf, null);
                pageCount = reader.NumberOfPages;
                if (pageCount < numOfPages)
                {
                    MessageBox.Show("Nie ma co dzielić");
                }
                else
                {
                    string counter;
                    string ext         = System.IO.Path.GetExtension(baseNameOutPdf);
                    string outfile     = string.Empty;
                    double m           = pageCount / numOfPages;
                    int    n           = (int)Math.Ceiling(m);
                    int    currentPage = 1;
                    string thename     = Path.GetFileNameWithoutExtension(sourcePdf);
                    string name        = Path.GetFileName(sourcePdf);
                    for (int i = 1; i <= pageCount; i++)
                    {
                        if (i < 10)
                        {
                            counter = "00";
                        }
                        else
                        {
                            counter = "0";
                        }
                        outfile = path.Replace(name, "") + thename + separtator + counter + i + extension;
                        doc     = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(currentPage));
                        pdfCpy  = new iTextSharp.text.pdf.PdfCopy(doc, new System.IO.FileStream(outfile, System.IO.FileMode.Create));
                        doc.Open();
                        if (i < n)
                        {
                            for (int j = 1; j <= numOfPages; j++)
                            {
                                page = pdfCpy.GetImportedPage(reader, currentPage);
                                pdfCpy.AddPage(page);
                                currentPage += 1;
                            }
                        }
                        else
                        {
                            for (int j = currentPage; j <= pageCount; j++)
                            {
                                page = pdfCpy.GetImportedPage(reader, j);
                                pdfCpy.AddPage(page);
                            }
                        }
                        doc.Close();
                        Console.Beep();
                    }
                }
                reader.Close();
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #13
0
        public string ReorderBookmarks()
        {
            string result = "";

            iTextSharp.text.pdf.PdfReader reader;
            string tempSavePath;

            System.IO.FileStream                 fs;
            iTextSharp.text.Document             document;
            iTextSharp.text.pdf.PdfCopy          copier;
            IList <Dictionary <string, object> > bookmarkList;
            Bookmark firstBookmark;
            SortedList <long, Bookmark> byStartPages;
            SortedList <long, Bookmark> byIndexNumbers;
            Bookmark thisBookmark;
            Bookmark previousBookmark;
            long     totalPages;
            long     currentPages;
            IList <Dictionary <string, object> > newBookmarkList;

            // check to see if file is open by another process
            string quickCheck = System.IO.Path.GetDirectoryName(path) + "\\~" + System.IO.Path.GetFileNameWithoutExtension(path) + System.IO.Path.GetExtension(path);
            long   safeNumber = 1;

            while (System.IO.File.Exists(quickCheck))
            {
                quickCheck  = System.IO.Path.GetDirectoryName(path) + "\\~" + System.IO.Path.GetFileNameWithoutExtension(path) + "(" + safeNumber + ")" + System.IO.Path.GetExtension(path);
                safeNumber += 1;
            }
            bool isSafe = false;

            while (!isSafe)
            {
                try
                {
                    System.IO.File.Move(path, quickCheck);
                    System.IO.File.Move(quickCheck, path);
                    isSafe = true;
                }
                catch
                {
                    System.Windows.Forms.MessageBoxButtons buttons    = System.Windows.Forms.MessageBoxButtons.OKCancel;
                    System.Windows.Forms.DialogResult      diagResult = System.Windows.Forms.MessageBox.Show(path + " is being used by another process. Please close that process and click Ok.", "File in Use", buttons);
                    if (diagResult == System.Windows.Forms.DialogResult.Cancel)
                    {
                        result = "File in use.";
                        return(result);
                    }
                }
            }

            // initalizing reader
            reader       = new iTextSharp.text.pdf.PdfReader(path);
            bookmarkList = iTextSharp.text.pdf.SimpleBookmark.GetBookmark(reader);
            totalPages   = reader.NumberOfPages;

            // empty bookmark list
            if (bookmarkList == null)
            {
                reader.Close();
                System.Windows.Forms.MessageBox.Show("No bookmarks detected.");
                result = "Error";
                return(result);
            }

            // get all bookmarks and add them to a list sorted by start pages and another list sorted by index numbers
            byStartPages   = new SortedList <long, Bookmark>();
            byIndexNumbers = new SortedList <long, Bookmark>();
            long index = 0;

            AddBookmarkToSortedLists(bookmarkList, byStartPages, byIndexNumbers, index);

            // get end pages
            previousBookmark = null;
            foreach (KeyValuePair <long, Bookmark> element in byStartPages)
            {
                if (previousBookmark == null)
                {
                    previousBookmark = element.Value;
                }
                else
                {
                    previousBookmark.SetEndPage(element.Key - 1);
                    previousBookmark = element.Value;
                }
                element.Value.SetPriority(GetPriorityFromList(priorityList, element.Value.GetName()));
            }
            previousBookmark.SetEndPage(totalPages);

            // sort bookmarks by priority or sort by index
            if (prioritizeBookmarks)
            {
                firstBookmark = ReorderNodesByPriority(byIndexNumbers);
            }
            else
            {
                firstBookmark = ReorderNodesByIndex(byIndexNumbers);
            }

            // create a new pdf document
            newBookmarkList = new List <Dictionary <string, object> >();
            tempSavePath    = System.IO.Path.GetDirectoryName(path) + "\\" + System.IO.Path.GetFileNameWithoutExtension(path) + " - Sorted.pdf";
            long saveCount = 0;

            while (System.IO.File.Exists(tempSavePath))
            {
                saveCount++;
                tempSavePath = System.IO.Path.GetDirectoryName(path) + "\\" + System.IO.Path.GetFileNameWithoutExtension(path) + " - Sorted(" + saveCount + ").pdf";
            }
            fs       = new System.IO.FileStream(tempSavePath, System.IO.FileMode.Create);
            document = new iTextSharp.text.Document();
            copier   = new iTextSharp.text.pdf.PdfCopy(document, fs);
            document.Open();
            thisBookmark = firstBookmark;
            currentPages = 0;
            long firstBookmarkedPage = byStartPages.ElementAt(0).Key;

            if (firstBookmarkedPage > 1)
            {
                for (int i = 1; i < firstBookmarkedPage; i++)
                {
                    copier.AddPage(copier.GetImportedPage(reader, i));
                    currentPages++;
                }
            }
            while (thisBookmark != null)
            {
                int startPage = (int)thisBookmark.GetStartPage();
                int endPage   = (int)thisBookmark.GetEndPage();
                for (int i = startPage; i <= endPage; i++)
                {
                    copier.AddPage(copier.GetImportedPage(reader, i));
                }
                if (startPage != currentPages + 1)
                {
                    thisBookmark.ChangePage(currentPages + 1);
                }
                currentPages += (endPage - startPage) + 1;
                newBookmarkList.Add(thisBookmark.GetDictionary());
                thisBookmark = thisBookmark.GetNextNode();
            }
            copier.Outlines = newBookmarkList;
            copier.Close();
            document.Close();
            fs.Close();
            reader.Close();

            reader = new iTextSharp.text.pdf.PdfReader(path);
            IList <Dictionary <string, object> > currentBookmarkList = iTextSharp.text.pdf.SimpleBookmark.GetBookmark(reader);

            reader.Close();

            // delete original and rename sorted file to original name
            if (totalPages != currentPages)
            {
                result = "The number of pages in the new document(s) does not match the number of pages in the old document. Aborting overwrite.";
                return(result);
            }
            if (bookmarkList.Count != currentBookmarkList.Count)
            {
                result = "Bookmark count of original file does not match bookmark count of file being replaced. Aborting overwrite.";
                return(result);
            }
            try
            {
                System.IO.File.Delete(path);
                System.IO.File.Move(tempSavePath, path);
            }
            catch
            {
                result = "Could not overwrite. Sorted bookmarks saved as " + tempSavePath;
            }

            return(result);
        }
コード例 #14
0
        public static bool CombineBriefPages_AddingBlanks(
            List <CockleFilePdf> srcFiles, string src, TypeOfBindEnum bind)
        {
            // new attempt Dec 28, to account for divider pages (or any page without text)
            // text has to start on odd-numbered page, if followed by divider page

            // first, add 2 pages for each divider page, to account for front and back.
            // then, when everything is together, cycle through doc to add extra dividers...
            // ... so that text always falls on odd-numbered page


            // should work for both Saddle Stitch and Perfect Bind


            // create new list without cover, ordered by rank
            List <CockleFilePdf> files = new List <CockleFilePdf>(
                srcFiles
                .Where(f => f.FileType != SourceFileTypeEnum.Cover)
                .Where(f => f.FileType != SourceFileTypeEnum.InsideCv)
                .Where(f => f.FileType != SourceFileTypeEnum.SidewaysPage)
                .Where(f => f.FileType != SourceFileTypeEnum.Brief_Foldout)
                .Where(f => f.FileType != SourceFileTypeEnum.Brief_ZFold)
                .Where(f => f.FileType != SourceFileTypeEnum.App_Foldout)
                .Where(f => f.FileType != SourceFileTypeEnum.App_ZFold)
                .Where(f => f.FileType != SourceFileTypeEnum.Unrecognized)
                .OrderBy(f => f.Rank));

            if (files.Count < 1)
            {
                return(false);
            }

            // what if files.Count == 1 ??? just return ???

            int  pageCount         = 0;
            bool hasDividers       = false;
            bool firstAppFileFound = false;
            int  firstPageOfApp    = -1;

            try
            {
                using (var stream = new System.IO.FileStream(src, System.IO.FileMode.Create))
                {
                    // initiate iTextSharp processes
                    iTextSharp.text.Document    pdfdoc  = new iTextSharp.text.Document(iTextSharp.text.PageSize.LETTER);
                    iTextSharp.text.pdf.PdfCopy pdfcopy = new iTextSharp.text.pdf.PdfCopy(pdfdoc, stream);
                    pdfdoc.Open();

                    // merge pdfs in folder
                    CockleFilePdf f;
                    for (int i = 0; i < files.Count; i++)
                    {
                        f = files[i];
                        // read file
                        iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(f.FullName);
                        int filePageCount = reader.NumberOfPages;

                        // set up pdfstamper
                        iTextSharp.text.pdf.PdfStamper stamper = new iTextSharp.text.pdf.PdfStamper(reader, stream);

                        // look for divider pages here, add blank if exists
                        List <int> divider_pages = new List <int>();
                        iTextSharp.text.pdf.parser.PdfReaderContentParser parser = new iTextSharp.text.pdf.parser.PdfReaderContentParser(reader);
                        for (int j = 1; j <= reader.NumberOfPages; j++)
                        {
                            iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy extract = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy();
                            var    extractedText = parser.ProcessContent(j, extract);
                            string textFromPage  = extractedText.GetResultantText();

                            int cnt     = textFromPage.ToCharArray().Count();
                            int mch_cnt = System.Text.RegularExpressions.Regex.Matches(textFromPage, @"A(PPENDIX|ppendix)").Count;

                            if (System.Text.RegularExpressions.Regex.Matches(textFromPage, @"\S").Count == 0)
                            {
                                // collect blank pages
                                divider_pages.Add(j);
                            }
                            else if (cnt < 50 && mch_cnt > 0)
                            {
                                // collect other divider pages
                                divider_pages.Add(j);
                            }
                        }
                        if (divider_pages.Count > 0)
                        {
                            hasDividers = true;

                            int k = 0; // adjust for total page number change
                            foreach (int page in divider_pages)
                            {
                                stamper.InsertPage(page + k, reader.GetPageSizeWithRotation(1));
                                filePageCount = reader.NumberOfPages;
                                k++;
                            }
                        }

                        // add blank page if needed to make even number
                        if (files[i].FileType == SourceFileTypeEnum.Index ||
                            files[i].FileType == SourceFileTypeEnum.Brief ||
                            files[i].FileType == SourceFileTypeEnum.App_Index ||
                            files[i].FileType == SourceFileTypeEnum.Motion ||
                            files[i].FileType == SourceFileTypeEnum.Divider_Page)
                        {
                            f.AssignNeedsBlankPage(files, reader.NumberOfPages);
                            if (f.NeedsBlankPage)
                            {
                                //PdfStamper stamper2 = new PdfStamper(reader, stream);
                                stamper.InsertPage(reader.NumberOfPages + 1, reader.GetPageSizeWithRotation(1));
                                filePageCount = reader.NumberOfPages;
                            }
                        }

                        // with last document in 'files', add extra pages to make divisible by 4
                        if (bind == TypeOfBindEnum.SaddleStitch && i == files.Count - 1)
                        {
                            if (bind == TypeOfBindEnum.SaddleStitch &&
                                (pageCount + reader.NumberOfPages) % 4 != 0)
                            {
                                //PdfStamper stamper3 = new PdfStamper(reader, stream);
                                while ((pageCount + reader.NumberOfPages) % 4 != 0)
                                {
                                    stamper.InsertPage(reader.NumberOfPages + 1, reader.GetPageSizeWithRotation(1));
                                }
                            }
                        }

                        // get first page of first app file
                        if (!firstAppFileFound && files[i].FileType == SourceFileTypeEnum.App_File)
                        {
                            firstAppFileFound = true;
                            firstPageOfApp    = pageCount + 1;
                        }

                        // add document to 'src'
                        pdfcopy.AddDocument(new iTextSharp.text.pdf.PdfReader(reader));
                        pageCount += reader.NumberOfPages;
                    }

                    pdfcopy.Close();
                    pdfdoc.CloseDocument();
                }

                // final cycle, if dividers, to make sure text starts on odd-sided pages
                if (bind == TypeOfBindEnum.PerfectBind && hasDividers)
                {
                    string dest = (System.IO.Path.GetDirectoryName(src) + @"\temp " + DateTime.Now.ToString("ddMMyyyyhhmmssffff"));

                    using (var stream = new System.IO.FileStream(dest, System.IO.FileMode.Create))
                    {
                        iTextSharp.text.pdf.PdfReader  reader  = new iTextSharp.text.pdf.PdfReader(src);
                        iTextSharp.text.pdf.PdfStamper stamper = new iTextSharp.text.pdf.PdfStamper(reader, stream);

                        // get all blank pages in appendix
                        iTextSharp.text.pdf.parser.PdfReaderContentParser parser = new iTextSharp.text.pdf.parser.PdfReaderContentParser(reader);
                        List <List <int> > groupsOfBlanks = new List <List <int> >();
                        List <int>         group_list     = new List <int>();
                        int x;
                        for (x = firstPageOfApp; x <= reader.NumberOfPages; x++)
                        {
                            iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy extract = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy();
                            var    extractedText = parser.ProcessContent(x, extract);
                            string textFromPage  = extractedText.GetResultantText();
                            // find blank pages and cluster into group_list
                            if (System.Text.RegularExpressions.Regex.Matches(textFromPage, @"\S").Count == 0)
                            {
                                // capture blank page cluster (??? but what if only 1 page ???)
                                if (group_list.Count == 0 || group_list.Contains(x - 1))
                                {
                                    group_list.Add(x);
                                }
                            }
                            else
                            {
                                // find first page after cluster
                                if (group_list.Count > 0)
                                {
                                    if (group_list.Last() % 2 == 1)
                                    {
                                        // add blank page
                                        stamper.InsertPage(group_list.Last() + 1, reader.GetPageSizeWithRotation(1));
                                    }
                                }
                                // clear list
                                group_list.Clear();
                            }
                        }
                        stamper.Close();
                        reader.Close();
                    }
                    System.IO.File.Delete(src);
                    System.IO.File.Move(dest, src);
                }
            }
            catch (Exception excpt)
            {
                System.Diagnostics.Debug.WriteLine(excpt); return(false);
            }
            return(true);
        }