예제 #1
0
        }     // End Sub CropPdf2

        static void CropPdf3(double page_width, double page_height)
        {
            string fn = @"D:\username\Desktop\0001 Altstetten - GB01 H602 - OG14.pdf";

            // fn = @"D:\username\Desktop\0030 Sentimatt - GB01 Sentimatt - EG00.pdf";
            fn = @"D:\username\Desktop\Altstetten_1_50.pdf";


            // The current implementation of PDFsharp has only one layout of the graphics context.
            // The origin(0, 0) is top left and coordinates grow right and down.
            // The unit of measure is always point (1 / 72 inch).

            // 1 pt = 0,0352778 cm
            // 1 pt = 0,352778 mm
            // 1 inch = 2,54 cm
            // 1/72 inch to cm = 0,035277777777777776 cm


            // A0:
            // w: 2384 pt =  84,10222 cm
            // h: 3370 pt = 118,8861  cm

            // A3:
            // w:  842 pt = 29,7039  cm
            // h: 1191 pt = 42,01583 cm

            // A4:
            // 595 pt to cm = 20,9903 w
            // 842 pt to cm = 29,7039 h



            // A0
            page_width  = 2384;
            page_height = 3370;

            // A3
            page_width  = 842;
            page_height = 1191;

            // A4
            page_width  = 595;
            page_height = 842;

            PdfMargin margin = new PdfMargin(mm2pt(10)); // 1cm in pt


            double crop_width  = page_width - margin.Left - margin.Right;
            double crop_height = page_height - margin.Top - margin.Bottom;


            using (PdfSharp.Drawing.XPdfForm sourceForm = PdfSharp.Drawing.XPdfForm.FromFile(fn))
            {
                sourceForm.PageNumber = 1;
                int numHori  = (int)System.Math.Ceiling(sourceForm.Page.Width.Point / crop_width);
                int numVerti = (int)System.Math.Ceiling(sourceForm.Page.Height.Point / crop_height);

                PdfSharp.Drawing.XRect pageDimenstions = new PdfSharp.Drawing.XRect(0, 0, sourceForm.Page.Width, sourceForm.Page.Height);

                using (PdfSharp.Pdf.PdfDocument destDocument = new PdfSharp.Pdf.PdfDocument())
                {
                    for (int iverti = 0; iverti < numVerti; iverti++)
                    {
                        for (int ihori = 0; ihori < numHori; ihori++)
                        {
                            PdfSharp.Pdf.PdfPage destPage = destDocument.AddPage();
                            destPage.Width  = crop_width;
                            destPage.Height = crop_height;

                            PdfSharp.Drawing.XRect cropRect = new PdfSharp.Drawing.XRect(ihori * crop_width, iverti * crop_height, sourceForm.Page.Width, sourceForm.Page.Height);

                            using (PdfSharp.Drawing.XGraphics destGFX = PdfSharp.Drawing.XGraphics.FromPdfPage(destPage))
                            {
                                destGFX.DrawImageCropped(sourceForm, cropRect, pageDimenstions, PdfSharp.Drawing.XGraphicsUnit.Point);
                            } // End Using destGFX
                        }     // ihori
                    }         // iverti

                    // destDocument.Save("chopped.pdf");

                    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                    {
                        destDocument.Save(ms);
                        ms.Position = 0;

                        using (PdfSharp.Drawing.XPdfForm croppedImages = PdfSharp.Drawing.XPdfForm.FromStream(ms))
                        {
                            using (PdfSharp.Pdf.PdfDocument finalDestination = new PdfSharp.Pdf.PdfDocument())
                            {
                                PdfSharp.Drawing.XFont font = new PdfSharp.Drawing.XFont("Arial", 8);

                                for (int i = 0; i < croppedImages.PageCount; ++i)
                                {
                                    PdfSharp.Pdf.PdfPage targetPage = finalDestination.AddPage();
                                    targetPage.Width  = page_width;
                                    targetPage.Height = page_height;

                                    PdfSharp.Drawing.XRect pageSize = new PdfSharp.Drawing.XRect(0, 0, targetPage.Width, targetPage.Height);

                                    try
                                    {
                                        croppedImages.PageIndex = i;

                                        using (PdfSharp.Drawing.XGraphics targetGFX = PdfSharp.Drawing.XGraphics.FromPdfPage(targetPage))
                                        {
#if DEBUG_ME
                                            targetGFX.DrawRectangle(XBrushes.Honeydew, pageSize);
#endif

                                            PdfSharp.Drawing.XRect targetRect = new PdfSharp.Drawing.XRect(margin.Left, margin.Top, crop_width, crop_height);

                                            targetGFX.DrawImage(croppedImages, targetRect, targetRect, PdfSharp.Drawing.XGraphicsUnit.Point);

                                            DrawBorder(targetGFX, targetPage.Width.Point, targetPage.Height.Point, margin);
                                            DrawCrosshairs(targetGFX, targetPage.Width.Point, targetPage.Height.Point, margin);

                                            // int numHori = (int)System.Math.Ceiling(sourceForm.Page.Width / crop_width);
                                            // int numVerti = (int)System.Math.Ceiling(sourceForm.Page.Height / crop_height);

                                            int col = i % numHori;
                                            int row = i / numHori;

                                            // targetGFX.DrawString($"Column {col + 1}/{numHori} Row {row + 1}/{numVerti}, Page {i + 1}/{croppedImages.PageCount}", font, PdfSharp.Drawing.XBrushes.Black, margin.Left + 5, targetPage.Height.Point - margin.Bottom + font.Size + 5);
                                            targetGFX.DrawString($"Spalte {col + 1}/{numHori} Zeile {row + 1}/{numVerti}, Seite {i + 1}/{croppedImages.PageCount}", font, PdfSharp.Drawing.XBrushes.Black, margin.Left + 5, targetPage.Height.Point - margin.Bottom + font.Size + 5);
                                        } // End using targetGFX
                                    }
                                    catch (System.Exception ex)
                                    {
                                        System.Console.WriteLine(croppedImages.PageIndex);
                                        System.Console.WriteLine(ex.Message);
                                    }
                                } // Next i

                                finalDestination.Save("CropPdf3.pdf");
                            } // End Using finalDestination
                        }     // End Using croppedImages
                    }         // End Using ms
                }             // End Using destDocument
            }                 // End Using sourceForm
        }                     // End Sub CropPdf3
예제 #2
0
        public static void CropPdf1(double crop_width, double crop_height)
        {
            string fn = @"D:\username\Desktop\0001 Altstetten - GB01 H602 - OG14.pdf";

            // fn = @"D:\username\Desktop\0030 Sentimatt - GB01 Sentimatt - EG00.pdf";


            // The current implementation of PDFsharp has only one layout of the graphics context.
            // The origin(0, 0) is top left and coordinates grow right and down.
            // The unit of measure is always point (1 / 72 inch).

            // 1 pt = 0,0352778 cm
            // 1 pt = 0,352778 mm
            // 1 inch = 2,54 cm
            // 1/72 inch to cm = 0,035277777777777776 cm


            // A0:
            // w: 2384 pt =  84,10222 cm
            // h: 3370 pt = 118,8861  cm

            // A3:
            // w:  842 pt = 29,7039  cm
            // h: 1191 pt = 42,01583 cm

            // A4:
            // 595 pt to cm = 20,9903 w
            // 842 pt to cm = 29,7039 h


            using (PdfSharp.Drawing.XPdfForm sourceForm = PdfSharp.Drawing.XPdfForm.FromFile(fn))
            {
                sourceForm.PageNumber = 1;

                int numHori  = (int)System.Math.Ceiling(sourceForm.Page.Width.Point / crop_width);
                int numVerti = (int)System.Math.Ceiling(sourceForm.Page.Height.Point / crop_height);
                PdfSharp.Drawing.XRect pageDimenstions = new PdfSharp.Drawing.XRect(0, 0, sourceForm.Page.Width.Point, sourceForm.Page.Height.Point);


                // Crop the PDF - HAS NO EFFECT...
                // sourceForm.Page.CropBox = new PdfSharp.Pdf.PdfRectangle(cropDim);

                using (PdfSharp.Pdf.PdfDocument destDocument = new PdfSharp.Pdf.PdfDocument())
                {
                    for (int iverti = 0; iverti < numHori; iverti++)
                    {
                        for (int ihori = 0; ihori < numHori; ihori++)
                        {
                            PdfSharp.Pdf.PdfPage destPage = destDocument.AddPage();
                            destPage.Width  = sourceForm.Page.Width;
                            destPage.Height = sourceForm.Page.Height;


                            PdfSharp.Drawing.XRect cropDim = new PdfSharp.Drawing.XRect(ihori * crop_width, iverti * crop_height, crop_width, crop_height);

                            PdfSharp.Drawing.XRect cropRect = new PdfSharp.Drawing.XRect(cropDim.X, destPage.Height.Point - cropDim.Height - cropDim.Y, cropDim.Width, cropDim.Height);

                            using (PdfSharp.Drawing.XGraphics destGFX = PdfSharp.Drawing.XGraphics.FromPdfPage(destPage))
                            {
                                destGFX.DrawImage(sourceForm, pageDimenstions);
                                destGFX.DrawRectangle(PdfSharp.Drawing.XPens.DeepPink, cropDim);
                            } // End Using destGFX

                            // PdfSharp.Drawing.XRect cropRect1 = new PdfSharp.Drawing.XRect(cropRect.X - 30, cropRect.Y - 30, cropRect.Width + 30, cropRect.Height + 30);

                            destPage.CropBox = new PdfSharp.Pdf.PdfRectangle(cropRect);
                            // destPage.MediaBox = new PdfSharp.Pdf.PdfRectangle(cropRect1);

                            // destPage.CropBox = new PdfSharp.Pdf.PdfRectangle(new XPoint(cropDim.X, destPage.Height - cropDim.Height - cropDim.Y),
                            //                      new XSize(cropDim.Width, cropDim.Height));
                        } // Next ihori
                    }     // Next iverti

                    destDocument.Save("CropPdf1.pdf");
                } // End Using gfx
            }     // End Using document
        }         // End Sub CropPdf1
예제 #3
0
        public static void ReadPdf()
        {
            // Get a fresh copy of the sample PDF file
            string filename = @"C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\R_SERVICES\doc\manual\R-intro.pdf";

            // Create the output document
            PdfSharp.Pdf.PdfDocument outputDocument =
                new PdfSharp.Pdf.PdfDocument();

            // Show single pages
            // (Note: one page contains two pages from the source document)
            outputDocument.PageLayout = PdfSharp.Pdf.PdfPageLayout.SinglePage;

            /*
             * PdfSharp.Drawing.XFont font =
             *  new PdfSharp.Drawing.XFont("Verdana", 8, PdfSharp.Drawing.XFontStyle.Bold);
             * PdfSharp.Drawing.XStringFormat format = new PdfSharp.Drawing.XStringFormat();
             * format.Alignment = PdfSharp.Drawing.XStringAlignment.Center;
             * format.LineAlignment = PdfSharp.Drawing.XLineAlignment.Far;
             */
            PdfSharp.Drawing.XGraphics gfx;
            PdfSharp.Drawing.XRect     box;

            // Open the external document as XPdfForm object
            PdfSharp.Drawing.XPdfForm form =
                PdfSharp.Drawing.XPdfForm.FromFile(filename);

            for (int idx = 0; idx < form.PageCount; idx += 2)
            {
                // Add a new page to the output document
                PdfSharp.Pdf.PdfPage page = outputDocument.AddPage();
                page.Orientation = PdfSharp.PageOrientation.Landscape;
                double width  = page.Width;
                double height = page.Height;

                int rotate = page.Elements.GetInteger("/Rotate");

                gfx = PdfSharp.Drawing.XGraphics.FromPdfPage(page);

                // Set page number (which is one-based)
                form.PageNumber = idx + 1;

                box = new PdfSharp.Drawing.XRect(0, 0, width / 2, height);
                // Draw the page identified by the page number like an image
                gfx.DrawImage(form, box);


                // Write document file name and page number on each page
                box.Inflate(0, -10);

                /*
                 * gfx.DrawString(string.Format("- {1} -", filename, idx + 1),
                 *   font, PdfSharp.Drawing.XBrushes.Red, box, format);
                 */
                if (idx + 1 < form.PageCount)
                {
                    // Set page number (which is one-based)
                    form.PageNumber = idx + 2;

                    box = new PdfSharp.Drawing.XRect(width / 2, 0, width / 2, height);
                    // Draw the page identified by the page number like an image
                    gfx.DrawImage(form, box);

                    // Write document file name and page number on each page
                    box.Inflate(0, -10);

                    /*
                     * gfx.DrawString(string.Format("- {1} -", filename, idx + 2),
                     *  font, PdfSharp.Drawing.XBrushes.Red, box, format);
                     */
                }
            }

            // Save the document...
            filename = "TwoPagesOnOne_tempfile.pdf";
            outputDocument.Save(filename);
            // ...and start a viewer.
            System.Diagnostics.Process.Start(filename);
        }
예제 #4
0
        public static string makeIt(string out_name, string source, ID_MACROS.IDS.PAGE_MODE md)
        {
            if (md == ID_MACROS.IDS.PAGE_MODE.mode1)
            {
                string                         filename       = source;
                PdfDocument                    outputDocument = new PdfDocument();
                PdfSharp.Drawing.XFont         font           = new PdfSharp.Drawing.XFont("Times New Roman", 10, PdfSharp.Drawing.XFontStyle.Regular);
                PdfSharp.Drawing.XStringFormat format         = new PdfSharp.Drawing.XStringFormat();
                format.Alignment     = PdfSharp.Drawing.XStringAlignment.Near;
                format.LineAlignment = PdfSharp.Drawing.XLineAlignment.Far;
                PdfSharp.Drawing.XGraphics gfx;
                PdfSharp.Drawing.XRect     box;
                PdfSharp.Drawing.XPdfForm  form = PdfSharp.Drawing.XPdfForm.FromFile(filename);
                for (int idx = 0; idx < form.PageCount; idx++)
                {
                    PdfPage page   = outputDocument.AddPage();
                    double  width  = page.Width;
                    double  height = page.Height;
                    gfx             = PdfSharp.Drawing.XGraphics.FromPdfPage(page);
                    form.PageNumber = idx + 1;
                    box             = new PdfSharp.Drawing.XRect(0, 0, width, height);
                    gfx.DrawImage(form, box);
                    box.Inflate(0, -30);
                }
                filename = out_name;
                outputDocument.Save(filename);
                return(filename);
            }
            else
            {
                int[]                          lst            = PDF_MAKER.PDF_MAKER.Page_Number_List;
                string                         filename       = source;
                PdfDocument                    outputDocument = new PdfDocument();
                PdfSharp.Drawing.XFont         font           = new PdfSharp.Drawing.XFont("Times New Roman", 10, PdfSharp.Drawing.XFontStyle.Regular);
                PdfSharp.Drawing.XStringFormat format         = new PdfSharp.Drawing.XStringFormat();
                format.Alignment     = PdfSharp.Drawing.XStringAlignment.Center;
                format.LineAlignment = PdfSharp.Drawing.XLineAlignment.Far;
                PdfSharp.Drawing.XGraphics gfx;
                PdfSharp.Drawing.XRect     box;
                PdfSharp.Drawing.XPdfForm  form = PdfSharp.Drawing.XPdfForm.FromFile(filename);
                for (int idx = 0; idx < form.PageCount; idx++)
                {
                    PdfPage page   = outputDocument.AddPage();
                    double  width  = page.Width;
                    double  height = page.Height;
                    gfx             = PdfSharp.Drawing.XGraphics.FromPdfPage(page);
                    form.PageNumber = idx + 1;
                    box             = new PdfSharp.Drawing.XRect(0, 0, width, height);
                    gfx.DrawImage(form, box);
                    box.Inflate(0, -30);

                    if (lst[idx] == 2)
                    {
                        gfx.DrawString(String.Format("{1}", filename, idx + 1), font, PdfSharp.Drawing.XBrushes.Black, box, format);
                    }
                    else if (lst[idx] == 1)
                    {
                        gfx.DrawString(String.Format("{1}", filename, PAGE_MODE_II_NUMBERS.RomanNumbers.convert(idx + 1)), font, PdfSharp.Drawing.XBrushes.Black, box, format);
                    }
                    else
                    {
                    }
                }
                filename = out_name;
                outputDocument.Save(filename);
                return(filename);
            }
        }