コード例 #1
0
ファイル: GetFromScanner.cs プロジェクト: kozlov-d/QSProjects
 void SavePDF()
 {
     iTextSharp.text.Document document = new iTextSharp.text.Document();
     using (var stream = new MemoryStream())
     {
         var writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, stream);
         writer.CloseStream = false;
         document.Open();
         foreach (Pixbuf pix in vimageslist1.Images)
         {
             if (pix.Width > pix.Height)
             {
                 document.SetPageSize(iTextSharp.text.PageSize.A4.Rotate());
             }
             else
             {
                 document.SetPageSize(iTextSharp.text.PageSize.A4);
             }
             document.NewPage();
             var image = iTextSharp.text.Image.GetInstance(pix.SaveToBuffer("jpeg"));
             image.SetAbsolutePosition(0, 0);
             image.ScaleToFit(document.PageSize.Width, document.PageSize.Height);
             document.Add(image);
         }
         document.Close();
         stream.Position = 0;
         File            = stream.ToArray();
     }
 }
コード例 #2
0
        private void SavePdf(string inputPath, string pathSaveFile)
        {
            // Create a new PDF document
            var doc  = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4);
            var fs   = new FileStream(pathSaveFile, FileMode.Create);
            var wPdf = PdfWriter.GetInstance(doc, fs);

            doc.Open();

            if (File.Exists(inputPath))
            {
                //se arquivo unico
                var img = iTextSharp.text.Image.GetInstance(inputPath);

                doc.SetPageSize(new iTextSharp.text.Rectangle(img.Width, img.Height));
                doc.NewPage();

                img.SetAbsolutePosition(0, 0);
                wPdf.DirectContent.AddImage(img);
            }
            else
            {
                var imageFiles = Directory.GetFiles(inputPath, "*.*"); //.Where(f => fileExtensions.Contains(Path.GetExtension(f).ToLower()));
                //Array.Sort(imageFiles.ToArray(), new AlphanumComparatorFast());

                //importing the images in the pdf
                foreach (string imageFile in imageFiles)
                {
                    //checking file extension
                    //string ext = Path.GetExtension(imageFile).ToLower();
                    //if ((string.Compare(ext, ".jpg") == 0) || (string.Compare(ext, ".jpeg") == 0) || (string.Compare(ext, ".png") == 0) || (string.Compare(ext, ".bmp") == 0) || (string.Compare(ext, ".new") == 0))
                    //{
                    var img = iTextSharp.text.Image.GetInstance(imageFile);

                    doc.SetPageSize(new iTextSharp.text.Rectangle(img.Width, img.Height));
                    doc.NewPage();

                    img.SetAbsolutePosition(0, 0);
                    wPdf.DirectContent.AddImage(img);
                    //}
                }
            }

            //save file
            doc.Close();
            doc.Dispose();

            fs.Close();
            fs.Dispose();

            wPdf.Close();
            wPdf.Dispose();
        }
コード例 #3
0
        /* ----------------------------------------------------------------- */
        ///
        /// CreateFromImage
        ///
        /// <summary>
        /// 画像ファイルから PdfReader オブジェクトを生成します。
        /// </summary>
        ///
        /// <param name="src">画像ファイルのパス</param>
        /// <param name="io">入出力用オブジェクト</param>
        ///
        /// <returns>PdfReader オブジェクト</returns>
        ///
        /* ----------------------------------------------------------------- */
        public static PdfReader CreateFromImage(string src, IO io)
        {
            using (var ms = new System.IO.MemoryStream())
                using (var ss = io.OpenRead(src))
                    using (var image = Image.FromStream(ss))
                    {
                        Debug.Assert(image != null);
                        Debug.Assert(image.FrameDimensionsList != null);
                        Debug.Assert(image.FrameDimensionsList.Length > 0);

                        var doc    = new iTextSharp.text.Document();
                        var writer = PdfWriter.GetInstance(doc, ms);
                        doc.Open();

                        var guid = image.FrameDimensionsList[0];
                        var dim  = new FrameDimension(guid);
                        for (var i = 0; i < image.GetFrameCount(dim); ++i)
                        {
                            image.SelectActiveFrame(dim, i);

                            var scale = PdfFile.Point / image.HorizontalResolution;
                            var w     = image.Width * scale;
                            var h     = image.Height * scale;

                            doc.SetPageSize(new iTextSharp.text.Rectangle(w, h));
                            doc.NewPage();
                            doc.Add(image.GetItextImage());
                        }

                        doc.Close();
                        writer.Close();

                        return(new PdfReader(ms.ToArray()));
                    }
        }
コード例 #4
0
        /// <summary>
        /// Rubber stamps an image based PDF as a PDF/A-1B pdf.
        /// </summary>
        /// <param name="oldFile">The original pdf file.</param>
        /// <param name="newFile">The new pdf file.</param>
        public void ConvertPDF(FileInfo oldFile, FileInfo newFile)
        {
            using (FileStream fs = new FileStream(newFile.FullName, FileMode.Create, FileAccess.Write))
                using (PdfReader pdf = new PdfReader(oldFile.FullName))
                    using (iTextSharp.text.Document doc = new iTextSharp.text.Document(pdf.GetPageSizeWithRotation(1)))
                        using (PdfAWriter writer = PdfAWriter.GetInstance(doc, fs, PdfAConformanceLevel.PDF_A_1B))
                        {
                            doc.Open();
                            ICC_Profile icc = ICC_Profile.GetInstance(Environment.GetEnvironmentVariable("SystemRoot") + @"\System32\spool\drivers\color\sRGB Color Space Profile.icm");
                            writer.SetOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc);
                            PdfContentByte contentByte = writer.DirectContent;

                            for (int i = 1; i <= pdf.NumberOfPages; i++)
                            {
                                doc.SetPageSize(pdf.GetPageSizeWithRotation(i));
                                doc.NewPage();
                                PdfImportedPage page = writer.GetImportedPage(pdf, i);
                                contentByte.AddTemplate(page, 0, 0);
                            }

                            writer.CreateXmpMetadata();
                            doc.Close();
                        }

            OnPdfConverted(oldFile);
        }
コード例 #5
0
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        internal bool CreatePDF(string PDFPath, ProgressBar PBar)
        {
            try
            {
                if (Tabs.Count > 0)
                {
                    PBar.Invoke(new Action(() =>
                    {
                        PBar.Maximum = Tabs.Count;
                        PBar.Value   = 0;
                        PBar.Visible = true;
                        PBar.Style   = ProgressBarStyle.Marquee;
                    }));
                    if (File.Exists(PDFPath))
                    {
                        File.Delete(PDFPath);
                    }
                    var CurDocument  = new iTextSharp.text.Document();
                    var CurPdfWriter = PdfWriter.GetInstance(CurDocument, new FileStream(PDFPath, FileMode.Create, FileAccess.Write, FileShare.None));
                    CurPdfWriter.SetFullCompression();
                    Tabs = Tabs.OrderBy(o => o.Index).ToList();
                    for (int i = 0; i < Tabs.Count; i++)
                    {
                        var CurImage     = Tabs[i].ScannedImage;
                        var CurRectangle = new iTextSharp.text.Rectangle(CurImage.Width, CurImage.Height);
                        CurDocument.SetPageSize(CurRectangle);
                        CurDocument.SetMargins(0, 0, 0, 0);
                        if (i == 0)
                        {
                            CurDocument.Open();
                        }
                        if (i < (Tabs.Count - 1))
                        {
                            CurDocument.NewPage();
                        }
                        CurDocument.Add(iTextSharp.text.Image.GetInstance(CurImage, (iTextSharp.text.BaseColor)null));
                        PBar.Invoke(new Action(() =>
                        {
                            PBar.Style = ProgressBarStyle.Continuous;
                            PBar.Value++;
                        }));
                    }
                    CurDocument.Close();
                }
                else
                {
                    MessageBox.Show("Keine Scanns vorhanden");
                }
                GC.Collect();
                return(true);
            }
            catch (Exception ex)
            {
                Program.MeldeFehler(ex.Message + "\n" + ex.StackTrace);
                Environment.Exit(1);
                return(false);
            }
        }
コード例 #6
0
        private bool EncryptPDF(String strPath, String StrDesPath, String strOpenPassWord, String strOwnerPassWord)
        {
            try
            {
                PdfReader itextPdfReader          = new PdfReader(strPath);
                iTextSharp.text.Document document = new iTextSharp.text.Document();
                FileStream fileStream             = new FileStream(StrDesPath, FileMode.Create);
                PdfWriter  pdfWriter = PdfWriter.GetInstance(document, fileStream);
                String     strOpenPas, strOwnerPas;
                strOpenPas  = this.OpenFilPassWText.Text;
                strOwnerPas = this.PerrmisionPassText.Text;
                pdfWriter.SetEncryption(PdfWriter.STRENGTH40BITS, strOpenPas, strOwnerPas, PdfWriter.AllowCopy);
                document.Open();

                //Setting PDF file enctyption page count
                document.SetPageSize(iTextSharp.text.PageSize.LEDGER.Rotate());
                iTextSharp.text.pdf.PdfContentByte oDirectContent = pdfWriter.DirectContent;
                int iNUmberOfPages = itextPdfReader.NumberOfPages;
                int iPage          = 0;

                while (iPage < iNUmberOfPages)
                {
                    iPage += 1;
                    document.SetPageSize(itextPdfReader.GetPageSizeWithRotation(iPage));
                    document.NewPage();
                    iTextSharp.text.pdf.PdfImportedPage oPdfImportedPage = pdfWriter.GetImportedPage(itextPdfReader, iPage);
                    int iRotation = itextPdfReader.GetPageRotation(iPage);
                    if (iRotation == 90 || iRotation == 270)
                    {
                        oDirectContent.AddTemplate(oPdfImportedPage, 0, -1.0F, 1.0F, 0, 0, itextPdfReader.GetPageSizeWithRotation(iPage).Height);
                    }
                    else
                    {
                        oDirectContent.AddTemplate(oPdfImportedPage, 1.0F, 0, 0, 1.0F, 0, 0);
                    }
                }
                document.Close();
                return(true);
            }catch (Exception e)
            {
                //e.ToString();

                return(false);
            }
        }
コード例 #7
0
        //image to pdf method
        public void Convert(string dir)
        {
            System.IO.DirectoryInfo di       = new System.IO.DirectoryInfo(dir);
            System.IO.FileInfo[]    pngfiles = di.GetFiles("*.png", System.IO.SearchOption.AllDirectories);
            System.IO.FileInfo[]    jpgfiles = di.GetFiles("*.jpg", System.IO.SearchOption.AllDirectories);

            Console.WriteLine(pngfiles.Length);
            Console.WriteLine(jpgfiles.Length);

            string[] paths = new string[pngfiles.Length + jpgfiles.Length];
            Console.WriteLine(paths.Length);
            var i = -1;

            foreach (var p in pngfiles)
            {
                i++;
                paths[i] = dir + "/" + p.ToString();
            }
            foreach (var p in jpgfiles)
            {
                i++;
                paths[i] = dir + "/" + p.ToString();
            }


            iTextSharp.text.Rectangle pageSize = null;

            using (var srcImage = new Bitmap(paths[0].ToString()))
            {
                pageSize = new iTextSharp.text.Rectangle(0, 0, srcImage.Width, srcImage.Height);
            }

            using (var ms = new MemoryStream())
            {
                var document = new iTextSharp.text.Document(pageSize, 0, 0, 0, 0);
                iTextSharp.text.pdf.PdfWriter.GetInstance(document, ms).SetFullCompression();
                document.Open();

                //progress.Maximum = paths.Length;
                //progress.Value = 0;
                var prg = 0;
                foreach (var ii in paths)
                {
                    label.Content = ii;
                    var image = iTextSharp.text.Image.GetInstance(ii.ToString());
                    document.SetPageSize(new iTextSharp.text.Rectangle(0, 0, image.Width, image.Height));
                    document.Add(image);

                    //progress.Value = prg;
                }
                document.Close();

                File.WriteAllBytes(dir + ".pdf", ms.ToArray());
                label.Content = "Conversion complete !";
            }
        }
コード例 #8
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();
            }
        }
コード例 #9
0
        protected void OnButtonPDFClicked(object sender, EventArgs e)
        {
            FileChooserDialog fc =
                new FileChooserDialog("Укажите файл для сохранения документа",
                                      this,
                                      FileChooserAction.Save,
                                      "Отмена", ResponseType.Cancel,
                                      "Сохранить", ResponseType.Accept);

            fc.CurrentName = DocInfo.Name + " " + entryNumber.Text + ".pdf";
            fc.Show();
            if (fc.Run() == (int)ResponseType.Accept)
            {
                fc.Hide();
                iTextSharp.text.Document document = new iTextSharp.text.Document();
                using (var stream = new FileStream(fc.Filename, FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    iTextSharp.text.pdf.PdfWriter.GetInstance(document, stream);
                    document.Open();
                    foreach (DocumentImage img in Images)
                    {
                        if (img.Image.Width > img.Image.Height)
                        {
                            document.SetPageSize(iTextSharp.text.PageSize.A4.Rotate());
                        }
                        else
                        {
                            document.SetPageSize(iTextSharp.text.PageSize.A4);
                        }
                        document.NewPage();
                        var image = iTextSharp.text.Image.GetInstance(img.file);
                        image.SetAbsolutePosition(0, 0);
                        image.ScaleToFit(document.PageSize.Width, document.PageSize.Height);
                        document.Add(image);
                    }
                    document.Close();
                }
            }
            fc.Destroy();
        }
コード例 #10
0
        static private string WriteCompatiblePdf(string sFilename)
        {
            // string s = System.IO.Path.GetTempPath();
            string sNewPdf = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".pdf";

            sNewPdfs.Add(sNewPdf);

            iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(sFilename);

            // we retrieve the total number of pages
            int n = reader.NumberOfPages;

            // step 1: creation of a document-object
            iTextSharp.text.Document document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1));
            // step 2: we create a writer that listens to the document
            iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new FileStream(sNewPdf, FileMode.Create));
            //write pdf that pdfsharp can understand
            writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_4);
            // 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;

            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);
                }
            }
            // step 5: we close the document
            document.Close();



            return(sNewPdf);
        }
コード例 #11
0
        /// <summary>
        ///     Combines a collection of PDF's into a single file
        /// </summary>
        /// <param name="paths">The string collection of PDF file paths to combine.</param>
        /// <returns>A string file path to the new PDF file</returns>
        private static string MergePdfFiles(IEnumerable <string> paths)
        {
            var tempFile = Path.GetTempFileName();

            using (var fileStream = new FileStream(tempFile, FileMode.Append))
            {
                using (var newDocument = new Document())
                {
                    using (var writer = PdfWriter.GetInstance(newDocument, fileStream))
                    {
                        newDocument.Open();

                        var contentByte = writer.DirectContent;

                        PdfImportedPage newPage = null;

                        foreach (var sourceFile in paths)
                        {
                            if (string.IsNullOrWhiteSpace(sourceFile))
                            {
                                continue;
                            }

                            var sourcePdfReader     = new PdfReader(sourceFile);
                            var numberOfSourcePages = sourcePdfReader.NumberOfPages;

                            for (var i = 1; i <= numberOfSourcePages; i++)
                            {
                                newPage = writer.GetImportedPage(sourcePdfReader, i);

                                newDocument.SetPageSize(sourcePdfReader.GetPageSize(i));
                                newDocument.NewPage();

                                contentByte.AddTemplate(newPage, 0, 0);
                            }
                        }

                        if (newPage == null)
                        {
                            return(null);
                        }

                        newDocument.Close();
                    }
                }
            }

            return(tempFile);
        }
コード例 #12
0
        /// <summary>
        /// from http://forum.pdfsharp.net/viewtopic.php?p=2069
        /// uses itextsharp to convert any pdf to 1.4 compatible pdf
        /// </summary>
        static private string WritePdf1pt4Version(string inputPath)
        {
            var tempFileName = Path.GetTempFileName();

            File.Delete(tempFileName);
            string outputPath = tempFileName + ".pdf";

            iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(inputPath);

            // we retrieve the total number of pages
            int n = reader.NumberOfPages;

            // step 1: creation of a document-object
            iTextSharp.text.Document document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1));
            // step 2: we create a writer that listens to the document
            iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new FileStream(outputPath, FileMode.Create));
            //write pdf that pdfsharp can understand
            writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_4);
            // 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;

            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);
                }
            }
            // step 5: we close the document
            document.Close();
            return(outputPath);
        }
コード例 #13
0
        public static void Convert(List <Tiff.PageInfo> il, string dstPath)
        {
            using (var file_stream = new FileStream(dstPath, FileMode.Create, FileAccess.Write, FileShare.None))
                using (var document = new iTextSharp.text.Document())
                    using (PdfWriter pdfWriter = PdfWriter.GetInstance(document, file_stream))
                    {
                        document.SetMargins(0, 0, 0, 0);

                        document.Open();

                        foreach (Tiff.PageInfo info in il)
                        {
                            try
                            {
                                bool needRotate = info.Image.Width > info.Image.Height;
                                if (needRotate)
                                {
                                    info.Image.RotateFlip(RotateFlipType.Rotate90FlipNone);
                                }

                                Image gif = Image.GetInstance(info.Image,
                                                              ImageFormat
                                                              .Png);
                                gif.ScaleAbsolute((float)(info.Image.Width * (72.0 / info.Image.HorizontalResolution)),
                                                  (float)(info.Image.Height * (72.0 / info.Image.VerticalResolution)));
                                gif.SetAbsolutePosition(1, 1);

                                document.SetPageSize(new Rectangle(gif.ScaledWidth, gif.ScaledHeight));
                                document.NewPage();

                                pdfWriter.DirectContent.AddImage(gif);

                                if (needRotate)
                                {
                                    pdfWriter.AddPageDictEntry(PdfName.ROTATE, new PdfNumber(270));
                                }
                            }
                            catch (Exception ex)
                            {
                                Data.Env.WriteToLog(ex);
                                return;
                            }
                        }
                        document.Close();
                    }
        }
コード例 #14
0
ファイル: ImageParser.cs プロジェクト: NortheasternLLC/wpdft
        public static void SaveImages(List <ParsedImage> images, string outputFile)
        {
            var doc = new iTextSharp.text.Document();

            try
            {
                var writer = PdfWriter.GetInstance(doc, new FileStream(outputFile, FileMode.Create));
                writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_5);
                writer.CompressionLevel = PdfStream.BEST_COMPRESSION;
                doc.Open();

                foreach (var parsedImage in images)
                {
                    var image  = iTextSharp.text.Image.GetInstance(parsedImage.Image, parsedImage.Format);
                    var width  = parsedImage.Width;
                    var height = parsedImage.Height;
                    if ((parsedImage.PerformedRotation == RotateFlipType.Rotate90FlipNone) ||
                        (parsedImage.PerformedRotation == RotateFlipType.Rotate270FlipNone))
                    {
                        var temp = width;
                        width  = height;
                        height = temp;
                    }

                    var size = new iTextSharp.text.Rectangle(width, height);
                    image.ScaleAbsolute(width, height);
                    image.CompressionLevel = PdfStream.BEST_COMPRESSION;
                    doc.SetPageSize(size);
                    doc.NewPage();
                    image.SetAbsolutePosition(0, 0);
                    doc.Add(image);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                doc.Close();
            }
        }
コード例 #15
0
        public static void convertJpegToPDFUsingItextSharp()
        {
            List <string> path = imagePath;

            if (path.Count != 0)
            {
                iTextSharp.text.Document document = new iTextSharp.text.Document();

                PdfWriter write = PdfWriter.GetInstance(document, new FileStream(@"H:\temp\1.pdf", FileMode.Append, FileAccess.Write));
                document.Open();
                for (int i = 0; i < path.Count; i++)
                {
                    Bitmap b = new System.Drawing.Bitmap(path[i]);
                    document.SetPageSize(new iTextSharp.text.Rectangle(b.Width + 72f, b.Height + 72f));
                    iTextSharp.text.Image a = iTextSharp.text.Image.GetInstance(b, ImageFormat.Png);
                    document.NewPage();
                    document.Add(a);
                    b.Dispose();
                }
                document.Close();
            }
        }
コード例 #16
0
ファイル: GenPdf.cs プロジェクト: firebirdstang/Cholestabetes
        private bool Add2Pdf(Stream instream, Stream outstream)
        {
            try
            {
                instream.Position = 0;
                PdfReader reader = new PdfReader(instream);

                int n = reader.NumberOfPages;
                // add content, page-by-page
                PdfImportedPage page;
                for (int p = 0; p < n; p++)
                {
                    document.SetPageSize(reader.GetPageSizeWithRotation(p + 1));
                    document.NewPage();
                    page = copier.GetImportedPage(reader, p + 1);
                    copier.AddPage(page);
                }

                reader.Close();
            }
            catch (Exception ex)
            {
                System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
                string methodName = st.GetFrame(0).GetMethod().Name;

                string innerMsg = "";
                if (ex.InnerException != null)
                {
                    innerMsg = ex.InnerException.Message;
                }

                Log(methodName, ex.Message, innerMsg);
                return(false);
            }
            return(true);
        }
コード例 #17
0
ファイル: Extract.cs プロジェクト: kavono/CbrPdfConverter
        /// <summary>
        /// Generate the pdf from the images
        /// </summary>
        private void GeneratePdf()
        {
            // Create a new PDF document
            var document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4);

            string filename = temporaryDir + ".pdf";
            var writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new FileStream(filename, FileMode.Create));
            document.Open();

            string[] imageFiles = Directory.GetFiles(temporaryDir);

            //count for progression bar
            CurOneStep = imageFiles.Count();
            int divider;
            if (DataAccess.Instance.g_ReduceSize)
                divider = 33;
            else
                divider = 50;
            CurOneStep = divider / CurOneStep;


            //importing the images in the pdf
            foreach (string imageFile in imageFiles)
            {
                if (DataAccess.Instance.g_Processing)
                {
                    try
                    {
                        //updating progress bar
                        DataAccess.Instance.g_curProgress += CurOneStep;
                        evnt_UpdateCurBar();

                        if (IsSingleFile)
                        {
                            DataAccess.Instance.g_totProgress = DataAccess.Instance.g_curProgress;
                            evnt_UpdatTotBar(this, e);
                        }

                        //checking file extension
                        string ext = Path.GetExtension(imageFile).ToLower();
                        if ((string.Compare(ext, ".jpg") == 0) || (string.Compare(ext, ".jpeg") == 0) || (string.Compare(ext, ".png") == 0) || (string.Compare(ext, ".bmp") == 0) || (string.Compare(ext, ".new") == 0))
                        {
                            //var size = iTextSharp.text.PageSize.A4;                                                    
                            var img = iTextSharp.text.Image.GetInstance(imageFile);
                            //img.ScaleToFit(iTextSharp.text.PageSize.A4.Width, iTextSharp.text.PageSize.A4.Height);
                            document.SetPageSize(new iTextSharp.text.Rectangle(img.Width, img.Height));
                            // Create an empty page
                            document.NewPage();
                            img.SetAbsolutePosition(0, 0);
                            writer.DirectContent.AddImage(img);
                            
                        }
                    }
                    catch (Exception e)
                    {
                        evnt_ErrorNotify(this, imageFile + " : " + e.Message.ToString());
                    }
                }

            }


            //saving file
            document.Close();
        }
コード例 #18
0
ファイル: ImageParser.cs プロジェクト: NortheasternLLC/wpdft
        public static void SaveImages(List<ParsedImage> images, string outputFile)
        {
            var doc = new iTextSharp.text.Document();
            try
            {
                var writer = PdfWriter.GetInstance(doc, new FileStream(outputFile, FileMode.Create));
                writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_5);
                writer.CompressionLevel = PdfStream.BEST_COMPRESSION;
                doc.Open();

                foreach (var parsedImage in images)
                {
                    var image = iTextSharp.text.Image.GetInstance(parsedImage.Image, parsedImage.Format);
                    var width = parsedImage.Width;
                    var height = parsedImage.Height;
                    if ((parsedImage.PerformedRotation == RotateFlipType.Rotate90FlipNone) ||
                        (parsedImage.PerformedRotation == RotateFlipType.Rotate270FlipNone))
                    {
                        var temp = width;
                        width = height;
                        height = temp;
                    }

                    var size = new iTextSharp.text.Rectangle(width, height);
                    image.ScaleAbsolute(width, height);
                    image.CompressionLevel = PdfStream.BEST_COMPRESSION;
                    doc.SetPageSize(size);
                    doc.NewPage();
                    image.SetAbsolutePosition(0, 0);
                    doc.Add(image);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                doc.Close();
            }
        }
コード例 #19
0
ファイル: Extract.cs プロジェクト: ncmtl/CbrPdfConverter
        /// <summary>
        /// Generate the pdf from the images
        /// </summary>
        private void GeneratePdf()
        {
            // Create a new PDF document
            var document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4);

            string filename = temporaryDir + ".pdf";
            var    writer   = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new FileStream(filename, FileMode.Create));

            document.Open();

            string[] imageFiles = Directory.GetFiles(temporaryDir);

            //count for progression bar
            CurOneStep = imageFiles.Count();
            int divider;

            if (DataAccess.Instance.g_ReduceSize)
            {
                divider = 33;
            }
            else
            {
                divider = 50;
            }
            CurOneStep = divider / CurOneStep;


            //importing the images in the pdf
            foreach (string imageFile in imageFiles)
            {
                if (DataAccess.Instance.g_Processing)
                {
                    try
                    {
                        //updating progress bar
                        DataAccess.Instance.g_curProgress += CurOneStep;
                        evnt_UpdateCurBar();

                        if (IsSingleFile)
                        {
                            DataAccess.Instance.g_totProgress = DataAccess.Instance.g_curProgress;
                            evnt_UpdatTotBar(this, e);
                        }

                        //checking file extension
                        string ext = Path.GetExtension(imageFile).ToLower();
                        if ((string.Compare(ext, ".jpg") == 0) || (string.Compare(ext, ".jpeg") == 0) || (string.Compare(ext, ".png") == 0) || (string.Compare(ext, ".bmp") == 0) || (string.Compare(ext, ".new") == 0))
                        {
                            //var size = iTextSharp.text.PageSize.A4;
                            var img = iTextSharp.text.Image.GetInstance(imageFile);
                            //img.ScaleToFit(iTextSharp.text.PageSize.A4.Width, iTextSharp.text.PageSize.A4.Height);
                            document.SetPageSize(new iTextSharp.text.Rectangle(img.Width, img.Height));
                            // Create an empty page
                            document.NewPage();
                            img.SetAbsolutePosition(0, 0);
                            writer.DirectContent.AddImage(img);
                        }
                    }
                    catch (Exception e)
                    {
                        evnt_ErrorNotify(this, imageFile + " : " + e.Message.ToString());
                    }
                }
            }


            //saving file
            document.Close();
        }
コード例 #20
0
        /// <summary>
        /// 把多个PDF文件、word文件、JPG/PNG/jpge图合并成一个PDF文档
        /// </summary>
        /// <param name="fileList">需要合并文件的完整路径列表</param>
        /// <param name="outMergeFile">输出文件完整路径</param>
        /// <param name="msg">警告或错误消息</param>
        public void MergePDFFile(List <string> fileList, string outMergeFile, ref string msg)
        {
            PdfReader       reader;
            PdfImportedPage newPage;
            PdfWriter       pw;

            iTextSharp.text.Document document = new iTextSharp.text.Document();
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outMergeFile, FileMode.Create));

            document.Open();
            PdfContentByte cb = writer.DirectContent;

            iTextSharp.text.Rectangle re;

            foreach (var itemFile in fileList)
            {
                string fileName = Path.GetFileName(itemFile);
                var    ext      = Path.GetExtension(itemFile).ToLower();
                if (!File.Exists(itemFile))
                {
                    msg += string.Format("文件打印合并__{0} 文件不存在", fileName);
                    continue;
                }
                FileInfo fInfo = new FileInfo(itemFile);
                if (fInfo.Length < 1)
                {
                    msg += string.Format("文件打印合并__文件内容为空,无法打印,{0}", fileName);
                    return;
                }

                if (".pdf".Equals(ext))
                {
                    reader = new PdfReader(itemFile);
                    int iPageNum = reader.NumberOfPages;
                    for (int j = 1; j <= iPageNum; j++)
                    {
                        //获取Reader的pdf页的打印方向
                        re = reader.GetPageSize(reader.GetPageN(j));
                        //设置合并pdf的打印方向
                        document.SetPageSize(re);
                        document.NewPage();
                        newPage = writer.GetImportedPage(reader, j);
                        cb.AddTemplate(newPage, 0, 0);
                    }
                }
                else if (".doc".Equals(ext) || ".docx".Equals(ext))
                {
                    Aspose.Words.Document doc = new Aspose.Words.Document(itemFile);
                    string newPdf             = Path.GetDirectoryName(itemFile) + "\\" + Path.GetFileNameWithoutExtension(itemFile) + ".pdf";
                    doc.Save(newPdf, SaveFormat.Pdf);
                    reader = new PdfReader(newPdf);
                    int iPageNum = reader.NumberOfPages;
                    for (int j = 1; j <= iPageNum; j++)
                    {
                        //获取Reader的pdf页的打印方向
                        re = reader.GetPageSize(reader.GetPageN(j));
                        //设置合并pdf的打印方向
                        document.SetPageSize(re);
                        document.NewPage();
                        newPage = writer.GetImportedPage(reader, j);
                        cb.AddTemplate(newPage, 0, 0);
                    }
                }
                else if (".jpg".Equals(ext) || ".jpeg".Equals(ext) || ".png".Equals(ext) || ".bmp".Equals(ext))
                {
                    FileStream rf    = new FileStream(itemFile, FileMode.Open, FileAccess.Read);
                    int        size  = (int)rf.Length;
                    byte[]     imext = new byte[size];
                    rf.Read(imext, 0, size);
                    rf.Close();

                    iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(imext);

                    //调整图片大小,使之适合A4
                    var imgHeight = img.Height;
                    var imgWidth  = img.Width;
                    if (img.Height > iTextSharp.text.PageSize.A4.Height - 30)
                    {
                        imgHeight = iTextSharp.text.PageSize.A4.Height - 30;
                    }

                    if (img.Width > iTextSharp.text.PageSize.A4.Width - 30)
                    {
                        imgWidth = iTextSharp.text.PageSize.A4.Width - 30;
                    }
                    img.ScaleToFit(imgWidth, imgHeight);

                    //调整图片位置,使之居中
                    img.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE;

                    document.NewPage();
                    document.Add(img);
                }
            }
            document.Close();
        }
コード例 #21
0
ファイル: ViewDoc.cs プロジェクト: Badou03080/earchive
 protected void OnButtonPDFClicked(object sender, EventArgs e)
 {
     FileChooserDialog fc=
         new FileChooserDialog("Укажите файл для сохранения документа",
                               this,
                               FileChooserAction.Save,
                               "Отмена",ResponseType.Cancel,
                               "Сохранить",ResponseType.Accept);
     fc.CurrentName = DocInfo.TypeName + " " + entryNumber.Text + ".pdf";
     fc.Show();
     if(fc.Run() == (int) ResponseType.Accept)
     {
         fc.Hide();
         iTextSharp.text.Document document = new iTextSharp.text.Document();
         using (var stream = new FileStream(fc.Filename, FileMode.Create, FileAccess.Write, FileShare.None))
         {
             iTextSharp.text.pdf.PdfWriter.GetInstance(document, stream);
             document.Open();
             foreach(DocumentImage img in Images)
             {
                 if(img.Image.Width > img.Image.Height)
                     document.SetPageSize(iTextSharp.text.PageSize.A4.Rotate());
                 else
                     document.SetPageSize(iTextSharp.text.PageSize.A4);
                 document.NewPage();
                 var image = iTextSharp.text.Image.GetInstance(img.file);
                 image.SetAbsolutePosition(0,0);
                 image.ScaleToFit(document.PageSize.Width, document.PageSize.Height);
                 document.Add(image);
             }
             document.Close();
         }
     }
     fc.Destroy();
 }
コード例 #22
0
        private static void MergeFiles(string destinationFile, string[] sourceFiles)
        {
            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;

                iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(sSrcFile[f]);
                int n = reader.NumberOfPages;
                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)
                    {
                        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);
                            }
                            //Response.Write("\n Processed page " + i);
                        }

                        f++;
                        if (f < sSrcFile.Length)
                        {
                            reader = new iTextSharp.text.pdf.PdfReader(sSrcFile[f]);
                            n      = reader.NumberOfPages;
                            // Response.Write("There are " + n + " pages in the original file.");
                        }
                    }
                    // Response.Write("Success");
                    document.Close();
                }
            }
            catch (Exception e)
            {
                // Response.Write(e.Message);
            }
        }
コード例 #23
0
ファイル: Program.cs プロジェクト: usnail/Ninokuni
        static void Read_GVD(BinaryReaderBE br, sGVD gvd, string folderOut)
        {
            br.BaseStream.Position = gvd.offset;

            // Read header
            byte[] header = br.ReadBytes(0x10);                     // GVEW0100JPEG0100
            gvd.bigSize = new Size(br.ReadInt32(), br.ReadInt32()); // Size of the biggest quality

            Console.Write("\t\tHeader:\t"); Show_String(header);
            Console.WriteLine("\t\tBiggest size: {0}", gvd.bigSize.ToString() + " px");

            // Read first BLK_ section (contains TOC)
            BLK_Header blk1 = new BLK_Header();

            blk1.type = br.ReadUInt32();
            if (blk1.type != 0x424C4B5F)
            {
                Console.WriteLine("Error Invalid header! BLK_");
                return;
            }
            blk1.size    = br.ReadUInt32();
            blk1.id      = br.ReadUInt32();
            blk1.padding = br.ReadUInt32();

            // Unknown values, inside the BLK_ section
            br.ReadUInt32();    // Unknown: Always 0x20
            br.ReadUInt32();    // Unknown: Always 0x04

            // Start of the TOC section
            uint num_entries  = blk1.size / BlockImage.ENTRY_SIZE;
            uint curroffset   = gvd.offset + blk1.size + sGVD.HEADER_SIZE + 2 * BLK_Header.HEADER_SIZE;
            uint entry_offset = gvd.offset + sGVD.HEADER_SIZE + BLK_Header.HEADER_SIZE + 0x08;      // 0x08 = unknown values

            Page[] page = new Page[BlockImage.MAX_QUALITY];
            for (int i = 0; i < page.Length; i++)
            {
                page[i].blocks = new List <BlockImage>();
            }

            // Read each TOC entry into a BlockImage structure
            for (int i = 0; i < num_entries; i++)
            {
                br.BaseStream.Position = entry_offset + i * BlockImage.ENTRY_SIZE;

                BlockImage bi = new BlockImage();
                bi.posX      = br.ReadUInt32();
                bi.posY      = br.ReadUInt32();
                bi.quality   = br.ReadUInt32();
                bi.data_size = br.ReadUInt32();
                bi.unk1      = br.ReadUInt32();
                bi.padding   = br.ReadUInt32();
                bi.width     = br.ReadUInt32();
                bi.height    = br.ReadUInt32();

                // Get image data, it could be compressed in a GVMP structure
                // for blocked and unblocked images
                br.BaseStream.Position = curroffset;
                bi.data    = new byte[1][];
                bi.data[0] = br.ReadBytes((int)bi.data_size);
                if (Encoding.ASCII.GetString(bi.data[0], 0, 4) == "GVMP")
                {
                    bi.data = Decompress_GVMP(bi.data[0]);
                }
                if (bi.data == null)
                {
                    continue;
                }

                page[bi.quality].blocks.Add(bi);

                // Pad size and add to the current offset
                curroffset += bi.data_size;
                if (curroffset % 0x10 != 0)
                {
                    curroffset += 0x10 - (curroffset % 0x10);
                }
            }

            // Draw and save page
            for (int i = 0; i < page.Length; i++)
            {
                if (quality != -1 && quality != i)
                {
                    continue;
                }

                if (page[i].blocks.Count == 0)
                {
                    continue;
                }

                // For blocked and unblocked
                for (int j = 0; j < page[i].blocks[0].data.Length; j++)
                {
                    // Check if we should extract that page
                    bool extract = (page[i].blocks[0].data.Length == 1);    // Only if there are blocked and unblocked pages
                    if (blocked == 0)
                    {
                        extract = true;
                    }
                    else if (blocked == 1 && j == 0)
                    {
                        extract = true;
                    }
                    else if (blocked == 2 && j == 1)
                    {
                        extract = true;
                    }
                    if (!extract)
                    {
                        continue;
                    }

                    string img_out = Path.Combine(folderOut, gvd.name + '_' + i.ToString());
                    if (j != 0)
                    {
                        img_out += "_unblocked";
                    }
                    img_out += ".jpg";

                    Bitmap bmp = Draw_Page(page[i], j);
                    if (bmp != null)
                    {
                        if (File.Exists(img_out))
                        {
                            File.Delete(img_out);
                        }
                        bmp.Save(img_out, System.Drawing.Imaging.ImageFormat.Jpeg);

                        // Add it to the pdf
                        if (convert == 1)
                        {
                            pdf.SetPageSize(new iTextSharp.text.Rectangle(0, 0, bmp.Width, bmp.Height));
                            pdf.NewPage();
                            iTextSharp.text.Image jpg = iTextSharp.text.Jpeg.GetInstance(img_out);
                            //jpg.Alignment = iTextSharp.text.Image.ORIGINAL_JPEG;
                            jpg.SetAbsolutePosition(0, 0);
                            pdf.Add(jpg);
                        }

                        bmp.Dispose();
                        bmp = null;
                    }
                }

                page[i].blocks.Clear();
            }
            page = null;
        }
コード例 #24
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();
        }
コード例 #25
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);
        }
コード例 #26
0
        public static bool AddPagesToPDF(string filename, List <Tiff.PageInfo> images, int page, int from, int to)
        {
            PdfReader pdfReader = null;

            try
            {
                string password = String.Empty;
                try
                {
                    pdfReader = new PdfReader(filename);
                    if (!pdfReader.IsOpenedWithFullPermissions)
                    {
                        throw new BadPasswordException("");
                    }
                }
                catch (BadPasswordException)
                {
                    while (!pdfReader.IsOpenedWithFullPermissions)
                    {
                        pdfReader.Close();

                        if (
                            InputBox.Show(Environment.StringResources.GetString("DocControl_PDF_Encrypted"),
                                          Environment.StringResources.GetString("DocControl_PDF_EnterPass"),
                                          ref password) == DialogResult.Cancel)
                        {
                            return(false);
                        }
                        try
                        {
                            pdfReader = new PdfReader(filename, Encoding.ASCII.GetBytes(password));
                        }
                        catch (BadPasswordException)
                        {
                        }
                        catch (Exception ex) { Data.Env.WriteToLog(ex); }
                    }
                }
                catch (Exception ex) { Data.Env.WriteToLog(ex); }

                if (pdfReader.NumberOfPages == 0)
                {
                    throw new Exception("В документе отсутствуют страницы. Операция сохранения невозможна!");
                }

                string tmpFileName = Path.GetTempFileName();
                int    imagesCount = images.Count;
                using (var mem_stream = new MemoryStream())
                {
                    using (var document = new iTextSharp.text.Document())
                        using (PdfWriter pdfWriter = PdfWriter.GetInstance(document, mem_stream))
                        {
                            document.OpenDocument();
                            for (int j = 0; j < imagesCount; j++)
                            {
                                Tiff.PageInfo info       = images[j];
                                bool          needRotate = info.Image.Width > info.Image.Height;
                                if (needRotate)
                                {
                                    info.Image.RotateFlip(RotateFlipType.Rotate90FlipNone);
                                }

                                Image gif = Image.GetInstance(info.Image, ImageFormat.Png);
                                gif.SetAbsolutePosition(0, 0);
                                gif.ScaleAbsolute((float)(info.Image.Width * (72.0 / info.Image.HorizontalResolution)),
                                                  (float)(info.Image.Height * (72.0 / info.Image.VerticalResolution)));
                                gif.SetAbsolutePosition(1, 1);

                                document.SetPageSize(new Rectangle(gif.ScaledWidth, gif.ScaledHeight));
                                document.NewPage();

                                pdfWriter.DirectContent.AddImage(gif);

                                if (needRotate)
                                {
                                    pdfWriter.AddPageDictEntry(PdfName.ROTATE, new PdfNumber(270));
                                }
                            }
                            images.Clear();
                            pdfWriter.CloseStream = false;
                            document.CloseDocument();
                        }
                    mem_stream.Position = 0;
                    var addPageReader = new PdfReader(mem_stream);

                    using (var file_stream = new FileStream(tmpFileName, FileMode.Create, FileAccess.Write, FileShare.None))
                        using (var document = new iTextSharp.text.Document(pdfReader.GetPageSize(1)))
                            using (var pdfCopy = new PdfCopy(document, file_stream))
                            {
                                document.Open();
                                if (-1 == page)
                                {
                                    for (int j = 1; j <= imagesCount; j++)
                                    {
                                        PdfImportedPage pp = pdfCopy.GetImportedPage(addPageReader, j);
                                        pdfCopy.AddPage(pp);
                                    }
                                }
                                if (-2 == page)
                                {
                                    page = pdfReader.NumberOfPages - 1;
                                }
                                for (int i = 1; i <= pdfReader.NumberOfPages; i++)
                                {
                                    PdfImportedPage pp = pdfCopy.GetImportedPage(pdfReader, i);
                                    pdfCopy.AddPage(pp);
                                    if (i == page + 1)
                                    {
                                        for (int j = 1; j <= imagesCount; j++)
                                        {
                                            pp = pdfCopy.GetImportedPage(addPageReader, j);
                                            pdfCopy.AddPage(pp);
                                        }
                                    }
                                }
                                document.Close();
                                if (pdfReader != null)
                                {
                                    pdfReader.Close();
                                    pdfReader = null;
                                }
                                addPageReader.Close();
                                File.Copy(tmpFileName, filename, true);
                                File.Delete(tmpFileName);
                                return(true);
                            }
                }
            }
            catch (Exception ex) { Data.Env.WriteToLog(ex); }
            finally
            {
                if (pdfReader != null)
                {
                    pdfReader.Close();
                }
            }
            return(false);
        }
コード例 #27
0
ファイル: Form1.cs プロジェクト: al1-sasha/Convertor
        public void MergePdf(string[] pdfFiles, string outputPath)
        {
            int    pdfCount = 0;
            int    f        = 0;
            string filename = String.Empty;

            iTextSharp.text.pdf.PdfReader reader = null;
            int pageCount = 0;

            iTextSharp.text.Document            pdfDoc = null;
            iTextSharp.text.pdf.PdfWriter       writer = null;
            iTextSharp.text.pdf.PdfContentByte  cb     = null;
            iTextSharp.text.pdf.PdfImportedPage page   = null;
            int rotation = 0;

            iTextSharp.text.Font bookmarkFont = iTextSharp.text.FontFactory.GetFont(iTextSharp.text.FontFactory.HELVETICA, 4, iTextSharp.text.Font.BOLD, iTextSharp.text.BaseColor.RED);

            try
            {
                pdfCount = pdfFiles.Length;
                if (pdfCount > 1)
                {
                    filename  = pdfFiles[f];
                    reader    = new iTextSharp.text.pdf.PdfReader(filename);
                    pageCount = reader.NumberOfPages;
                    pdfDoc    = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1), 18, 18, 18, 18);
                    writer    = iTextSharp.text.pdf.PdfWriter.GetInstance(pdfDoc, new System.IO.FileStream(outputPath, System.IO.FileMode.Create));
                    pdfDoc.AddAuthor("OPGK w Lublinie sp. z o. o. Sławomir Aleksak");
                    pdfDoc.AddCreator("Konwerter");
                    pdfDoc.Open();
                    cb = writer.DirectContent;
                    while (f < pdfCount)
                    {
                        var i = 0;
                        while (i < pageCount)
                        {
                            i += 1;
                            pdfDoc.SetPageSize(reader.GetPageSizeWithRotation(i));
                            pdfDoc.NewPage();
                            if (i == 1)
                            {
                                iTextSharp.text.Paragraph para   = new iTextSharp.text.Paragraph(System.IO.Path.GetFileName(filename).ToUpper(), bookmarkFont);
                                iTextSharp.text.Chapter   chpter = new iTextSharp.text.Chapter(para, f + 1);
                                pdfDoc.Add(chpter);
                            }
                            page     = writer.GetImportedPage(reader, i);
                            rotation = reader.GetPageRotation(i);
                            if (rotation == 90)
                            {
                                cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                            }
                            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);
                            }
                        }
                        f += 1;
                        if (f < pdfCount)
                        {
                            filename  = pdfFiles[f];
                            reader    = new iTextSharp.text.pdf.PdfReader(filename);
                            pageCount = reader.NumberOfPages;
                        }
                    }
                    pdfDoc.Close();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #28
0
 void SavePDF()
 {
     iTextSharp.text.Document document = new iTextSharp.text.Document();
     using (var stream = new MemoryStream ())
     {
         var writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, stream);
         writer.CloseStream = false;
         document.Open();
         foreach(Pixbuf pix in vimageslist1.Images)
         {
             if(pix.Width > pix.Height)
                 document.SetPageSize(iTextSharp.text.PageSize.A4.Rotate());
             else
                 document.SetPageSize(iTextSharp.text.PageSize.A4);
             document.NewPage();
             var image = iTextSharp.text.Image.GetInstance(pix.SaveToBuffer ("jpeg"));
             image.SetAbsolutePosition(0,0);
             image.ScaleToFit(document.PageSize.Width, document.PageSize.Height);
             document.Add(image);
         }
         document.Close();
         stream.Position = 0;
         File = stream.ToArray ();
     }
 }