Esempio n. 1
0
        /// <summary>
        /// Pobieranie wartości zoom okna dla pliku, tak by zmieścił się w oknie
        /// </summary>
        /// <param name="pdfFile">plik dla którego należy obliczyć zoom</param>
        /// <param name="pdfRotation">rotacja strony PDF</param>
        /// <returns>wartość zoom</returns>
        private int GetFitZoom(byte[] pdfFile, out int pdfRotation)
        {
            double pdfPageSizeXPoint;       //  wielkość pliku w punktach
            double pdfPageSizeYPoint;       //  wielkość pliku w punktach

            IRandomAccessSource byteSource = new RandomAccessSourceFactory().CreateSource(pdfFile);

            using (PdfReader reader = new PdfReader(byteSource, new ReaderProperties()))
                using (PdfDocument pdfDoc = new PdfDocument(reader))
                {
                    pdfRotation = pdfDoc.GetPage(1).GetRotation();

                    switch (pdfRotation)
                    {
                    case 0:
                    case 180:
                        pdfPageSizeYPoint = pdfDoc.GetPage(1).GetPageSize().GetHeight();    //  wielkość pliku w punktach
                        pdfPageSizeXPoint = pdfDoc.GetPage(1).GetPageSize().GetWidth();     //  wielkość pliku w punktach
                        break;

                    case 90:
                    case 270:
                        pdfPageSizeYPoint = pdfDoc.GetPage(1).GetPageSize().GetWidth();     //  wielkość pliku w punktach
                        pdfPageSizeXPoint = pdfDoc.GetPage(1).GetPageSize().GetHeight();    //  wielkość pliku w punktach
                        break;

                    default:
                        throw new Exception(@"Błędny kąt obrotu!");
                    }
                }

            byteSource.Close();

            float dpiX;
            float dpiY;

            // pobranie rozdzielczości ekranu
            using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))
            {
                dpiX = graphics.DpiX;
                dpiY = graphics.DpiY;
            }

            double pdfPageSizeXPix = pdfPageSizeXPoint * dpiX / 72;    //  przeliczenie rozmiaru dokumentu z punktów na piksele
            double pdfPageSizeYPix = pdfPageSizeYPoint * dpiY / 72;    //  przeliczenie rozmiaru dokumentu z punktów na piksele

            int pdfViewerSizeYPix = pdfDocumentViewer.Height - 8;      //  - 8 bo okno ma wewnętrzny margines 4 z każdej strony
            int pdfViewerSizeXPix = pdfDocumentViewer.Width - 8;       //  - 8 bo okno ma wewnętrzny margines 4 z każdej strony

            double scaleX = pdfViewerSizeXPix / pdfPageSizeXPix * 100; //  obliczenie współczynnika skalowania
            double scaleY = pdfViewerSizeYPix / pdfPageSizeYPix * 100; //  obliczenie współczynnika skalowania

            return(scaleX < scaleY ? (int)Math.Floor(scaleX) : (int)Math.Floor(scaleY));
        }
Esempio n. 2
0
        /// <summary>
        /// Wstawianie znaku wodnego do przekazanego pliku
        /// </summary>
        /// <param name="pdfFile">Plik do którego należy wstawić znak wodny</param>
        /// <returns></returns>
        private void SetWatermarkPdf(byte[] pdfFile)
        {
            IRandomAccessSource byteSource = new RandomAccessSourceFactory().CreateSource(pdfFile);
            PdfReader           pdfReader  = new PdfReader(byteSource, new ReaderProperties());

            MemoryStream memoryStreamOutput = new MemoryStream();
            PdfWriter    pdfWriter          = new PdfWriter(memoryStreamOutput);

            PdfDocument pdfDoc = new PdfDocument(pdfReader, pdfWriter);

            FontProgram fontProgram = new TrueTypeFont(Resources.arial);

            PdfFont pdfFont = PdfFontFactory.CreateFont(fontProgram, PdfEncodings.IDENTITY_H, true);

            PdfCanvas over = new PdfCanvas(pdfDoc.GetFirstPage());

            over.SetFillColor(ColorConstants.BLACK);

            Paragraph p = new Paragraph(File.ReadAllText("stopka.txt"));

            p.SetFont(pdfFont);
            p.SetFontSize(8);
            p.SetFixedLeading(8);

            over.SaveState();

            PdfExtGState gs1 = new PdfExtGState();

            gs1.SetFillOpacity(0.2f);
            gs1.SetStrokeOpacity(0.2f);

            over.SetExtGState(gs1);

            int   pageRotation = pdfDoc.GetPage(1).GetRotation();
            float textAngleRad = (float)(pageRotation * Math.PI / 180.0);

            float pageWidth  = pdfDoc.GetPage(1).GetPageSizeWithRotation().GetWidth();
            float pageHeight = pdfDoc.GetPage(1).GetPageSizeWithRotation().GetHeight();

            using (Canvas stopka = new Canvas(over, pdfDoc, pdfDoc.GetPage(1).GetPageSizeWithRotation()))
            {
                switch (pageRotation)
                {
                case 0:
                    stopka.ShowTextAligned(p, pageWidth / 2, 8, 1, TextAlignment.CENTER, VerticalAlignment.BOTTOM, textAngleRad);
                    break;

                case 90:
                    stopka.ShowTextAligned(p, pageHeight - 8, pageWidth / 2, 1, TextAlignment.CENTER, VerticalAlignment.BOTTOM, textAngleRad);
                    break;

                case 180:
                    stopka.ShowTextAligned(p, pageWidth / 2, pageHeight - 8, 1, TextAlignment.CENTER, VerticalAlignment.BOTTOM, textAngleRad);
                    break;

                case 270:
                    stopka.ShowTextAligned(p, 8, pageWidth / 2, 1, TextAlignment.CENTER, VerticalAlignment.BOTTOM, textAngleRad);
                    break;

                default:
                    throw new Exception("Błędny kąt obrotu strony");
                }
            }

            over.RestoreState();

            pdfDoc.Close();

            Global.ScanFiles[Global.IdSelectedFile].PdfFile = memoryStreamOutput.ToArray();

            byteSource.Close();
            memoryStreamOutput.Close();
            pdfReader.Close();
            pdfWriter.Close();
        }
Esempio n. 3
0
        /// <summary>
        /// Obsługa zdarzenia kliknięcia myszką na przycisku obrotu dokumentu, lub skrótu klawiszowego
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnRotate_ClickOrKeyPress(object sender, EventArgs e)
        {
            // jeśli nie ma plików na liście to nic nie rób
            if (listBoxFiles.Items.Count <= 0)
            {
                return;
            }

            int desiredRot = 0;

            // jeśli obracanie zostało wywołane klawiszem
            if (e.GetType() == typeof(KeyEventArgs))
            {
                KeyEventArgs arg = (KeyEventArgs)e;

                switch (arg.KeyData)
                {
                case Keys.Control | Keys.Right:
                    desiredRot = 90;
                    break;

                case Keys.Control | Keys.Left:
                    desiredRot = 270;
                    break;
                }
            }

            if (e.GetType() == typeof(MouseEventArgs))   // jeśli obracanie zostało wywołane myszką
            {
                MouseEventArgs arg = (MouseEventArgs)e;

                switch (arg.Button)
                {
                case MouseButtons.Left:
                    desiredRot = 270;
                    break;

                case MouseButtons.Right:
                    desiredRot = 90;
                    break;
                }
            }

            IRandomAccessSource byteSource = new RandomAccessSourceFactory().CreateSource(Global.ScanFiles[Global.IdSelectedFile].PdfFile);
            PdfReader           pdfReader  = new PdfReader(byteSource, new ReaderProperties());

            MemoryStream memoryStreamOutput = new MemoryStream();
            PdfWriter    pdfWriter          = new PdfWriter(memoryStreamOutput);

            PdfDocument pdfDoc = new PdfDocument(pdfReader, pdfWriter);

            PdfPage page = pdfDoc.GetPage(1);

            var rotate = page.GetPdfObject().GetAsNumber(PdfName.Rotate);

            if (rotate == null)
            {
                page.SetRotation(desiredRot);
            }
            else
            {
                page.SetRotation((rotate.IntValue() + desiredRot) % 360);
            }

            pdfDoc.Close();

            Global.ScanFiles[Global.IdSelectedFile].PdfFile = memoryStreamOutput.ToArray();     //  Przypisz nowy dokument do klasy obiektów ze skanami

            if (Global.SaveRotation)
            {
                File.WriteAllBytes(Global.ScanFiles[Global.IdSelectedFile].PathAndFileName, memoryStreamOutput.ToArray());  //  zapisz nowy plik na dysku w miejsce starego
            }
            byteSource.Close();
            memoryStreamOutput.Close();
            pdfReader.Close();
            pdfWriter.Close();

            //  Wyświetl nowy plik w oknie podglądu
            Global.Zoom = GetFitZoom(Global.ScanFiles[Global.IdSelectedFile].PdfFile, out int _);
            pdfDocumentViewer.LoadFromStream(new MemoryStream(Global.ScanFiles[Global.IdSelectedFile].PdfFile));
            pdfDocumentViewer.ZoomTo(Global.Zoom);
            pdfDocumentViewer.EnableHandTool();
        }