コード例 #1
0
        //PDF Brief drucken Button
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            // Abfrage ob man die PDF speichern möchte
            SaveFileDialog saveFileDialog = new SaveFileDialog();

            saveFileDialog.Filter       = "Files(*.pdf)|*.pdf";
            saveFileDialog.AddExtension = true;
            saveFileDialog.DefaultExt   = ".pdf";

            if (saveFileDialog.ShowDialog() == true)
            {
                string path = saveFileDialog.FileName;


                //writer instanzieren
                PdfWriter writer = new PdfWriter(path);

                //pdfdocument erzeugen
                PdfDocument pdf = new PdfDocument(writer);


                //Document erzeugen
                using (Document document = new Document(pdf, PageSize.A4))
                {
                    //Einfügen in das document

                    Image logo = new Image(ImageDataFactory.CreateJpeg(new Uri($"{Directory.GetCurrentDirectory()}\\logo.jpg", UriKind.Absolute)));
                    logo.ScaleAbsolute(180f, 50f);
                    logo.SetFixedPosition(400f, 750f);
                    document.Add(logo);

                    document.Add(new Paragraph(TB_vname.Text + " " + TB_nname.Text).SetFixedPosition(45f, 780f, 800f));
                    document.Add(new Paragraph(TB_strasse.Text + " " + TB_hsnr.Text).SetFixedPosition(45f, 760f, 800f));
                    document.Add(new Paragraph(TB_plz.Text + " " + TB_ort.Text).SetFixedPosition(45f, 740f, 800));


                    document.Add(new Paragraph(Betreff.Text).SetFixedPosition(45f, 600f, 800f));

                    document.Add(new Paragraph(Anrede.Text).SetFixedPosition(90f, 500f, 800f));

                    Image inhalt = new Image(ImageDataFactory.CreateJpeg(new Uri($"{Directory.GetCurrentDirectory()}\\inhalt.jpg", UriKind.Absolute)));
                    inhalt.ScaleAbsolute(400f, 400f);
                    inhalt.SetFixedPosition(70f, 100f);
                    document.Add(inhalt);
                }

                pdf.Close();

                //writer schliesen
                writer.Close();

                //öffnen des documentes
                Process.Start(path);
            }
            else
            {
            }
        }
コード例 #2
0
        public virtual void CreatePdf(String dest)
        {
            PdfDocument pdf      = new PdfDocument(new PdfWriter(dest));
            Document    document = new Document(pdf);

            // raw
            byte[] data = new byte[256 * 3];
            for (int i = 0; i < 256; i++)
            {
                data[i * 3]     = (byte)(255 - i);
                data[i * 3 + 1] = (byte)(255 - i);
                data[i * 3 + 2] = (byte)i;
            }
            ImageData raw = ImageDataFactory.Create(256, 1, 3, 8, data, null);

            iText.Layout.Element.Image img = new iText.Layout.Element.Image(raw);
            img.ScaleAbsolute(256, 10);
            document.Add(img);
            // JPEG2000
            iText.Layout.Element.Image img1 = new iText.Layout.Element.Image(ImageDataFactory.Create(TEST1));
            document.Add(img1);
            document.Add(new AreaBreak());
            // BMP
            iText.Layout.Element.Image img2 = new iText.Layout.Element.Image(ImageDataFactory.Create(TEST2));
            img2.SetMarginBottom(10);
            document.Add(img2);
            // PNG
            iText.Layout.Element.Image img3 = new iText.Layout.Element.Image(ImageDataFactory.Create(TEST3));
            img3.SetMarginBottom(10);
            document.Add(img3);
            // Transparent PNG
            iText.Layout.Element.Image img4 = new iText.Layout.Element.Image(ImageDataFactory.Create(TEST4));
            img4.SetBorderLeft(new SolidBorder(6));
            document.Add(img4);
            // GIF
            iText.Layout.Element.Image img5 = new iText.Layout.Element.Image(ImageDataFactory.Create(TEST5));
            img5.SetBackgroundColor(ColorConstants.LIGHT_GRAY);
            document.Add(img5);

            // System.Drawing.Image
            System.Drawing.Image       systemDrawingImage = System.Drawing.Image.FromFile(TEST5);
            iText.Layout.Element.Image awt = new iText.Layout.Element.Image(ImageDataFactory.Create(systemDrawingImage, System.Drawing.Color.Yellow));
            awt.SetMarginTop(10);
            document.Add(awt);

            // JBIG2
            iText.Layout.Element.Image img6 = new iText.Layout.Element.Image(ImageDataFactory.Create(TEST6));
            document.Add(img6);
            // TIFF
            iText.Layout.Element.Image img7 = new iText.Layout.Element.Image(ImageDataFactory.Create(TEST7));
            document.Add(img7);
            document.Close();
        }
コード例 #3
0
        public Tuple <float, float> AddDependentVowelPage(string c, PdfDocument pdf, Document document, string sIndex)
        {
            const String FONT      = @"C:\Windows\Fonts\STKAITI.TTF";
            PdfFont      fontKaiti = PdfFontFactory.CreateFont(FONT, PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED, true);

            //GENERAR CARACTER
            Tuple <float, float> textSize  = SaveBitmapfromFontCharVowel(c, "Kaiti", FontStyle.Regular, sIndex);
            PdfCanvas            pdfCanvas = new PdfCanvas(pdf.AddNewPage());

            Canvas canvas = new Canvas(pdfCanvas, pdf, document.GetPageEffectiveArea(pdf.GetDefaultPageSize()));


            //Layer 1
            PdfLayer pdflayer1 = new PdfLayer("Layer 1", pdf);

            pdflayer1.SetOn(true);
            pdfCanvas.BeginLayer(pdflayer1);

            ///Template IMG
            string template = @"D:\Portada\Cuadernos\PNG A4\Mizige DIN A4 Template HSK - Pie Descripcion 2 lines more.png";

            ImageData data = ImageDataFactory.Create(template);

            iText.Layout.Element.Image img = new iText.Layout.Element.Image(ImageDataFactory.Create(template))
                                             .ScaleToFit(PageSize.A4.GetWidth(), PageSize.A4.GetHeight())
                                             .SetFixedPosition(0, 0);
            canvas.Add(img);
            pdfCanvas.EndLayer();

            //Layer 2 CARACTER GRANDE
            PdfLayer pdflayer2 = new PdfLayer("Layer 2", pdf);

            pdflayer2.SetOn(true);
            pdfCanvas.BeginLayer(pdflayer2);

            int LeftMarginMiZige = 114 * 72 / 300 - 20;
            int UpMarginMiZige   = 114 * 72 / 300 - 5;
            // int CaracterSize = 180;

            int CaracterSize = 200;

            //Este es el path con el que se ha grabado la imagen previamente
            string path = @"D:\KH\KhmerWorkbook\Chars\" + c.ToString() + ".png";

            iText.Layout.Element.Image MainCaracter = new iText.Layout.Element.Image(ImageDataFactory.Create(path))
                                                      .SetFixedPosition(LeftMarginMiZige, PageSize.A4.GetHeight() - CaracterSize - UpMarginMiZige)
                                                      .ScaleAbsolute(CaracterSize, CaracterSize)
                                                      .SetTextAlignment(TextAlignment.CENTER);
            canvas.Add(MainCaracter);
            pdfCanvas.EndLayer();



            //Layer 4 CARACTER PEQUEÑOS FOR
            PdfLayer pdflayer4 = new PdfLayer("Layer 4", pdf);

            pdflayer4.SetOn(true);
            pdfCanvas.BeginLayer(pdflayer4);

            int MiniCaracterSize = 30;
            int MaxColumns       = 17;
            int MaxRows          = 17;

            float width              = 30.6F;
            float height             = 30.7F;
            int   UpMarginMiZigeMini = 22;

            float left   = 0;
            float bottom = 0;

            iText.Layout.Element.Image MiniCaracter = new iText.Layout.Element.Image(ImageDataFactory.Create(path));
            MiniCaracter.ScaleAbsolute(MiniCaracterSize, MiniCaracterSize);
            MiniCaracter.SetTextAlignment(TextAlignment.CENTER);

            for (int col = 0; col < MaxColumns; col++)

            {
                for (int row = 0; row < MaxRows; row++)
                {
                    //No se imprimen donde esta en caracter grande situado
                    if (!(row < 5 && col < 5))
                    {
                        left   = 35 + col * width;
                        bottom = PageSize.A4.GetHeight() - MiniCaracterSize - 2 - UpMarginMiZigeMini - row * height;
                        MiniCaracter.SetFixedPosition(left, bottom);
                        canvas.Add(MiniCaracter);
                    }
                }
            }
            pdfCanvas.EndLayer();

            //INFORMACION CARACTER

            document.SetFont(fontKaiti);

            var   dimensionsColumns = new float[] { 1, 1, 1, 1, 1, 1 };
            Table table             = new Table(UnitValue.CreatePercentArray(dimensionsColumns));

            table.UseAllAvailableWidth();

            PdfLayer pdflayerInfo = new PdfLayer("pdflayerInfo", pdf);

            pdflayerInfo.SetOn(true);
            pdfCanvas.BeginLayer(pdflayerInfo);
            int repeticion = 0;

            List <Paragraph> pGlobals = new List <Paragraph>();

            foreach (Word_HSK word in includedWords)
            {
                //Add row to table
                if (word.Character.Contains(c))
                {
                    repeticion++;

                    Paragraph pGlobal = new Paragraph(word.Character + "\t (" + word.Pinyin + ") , " + word.Type + " , " + word.Description).SetFont(fontKaiti).SetFontSize(10);

                    pGlobals.Add(pGlobal);
                }
            }


            if (repeticion > Maxrepeticion)
            {
                Maxrepeticion = repeticion;
                repeticion    = 0;
                int checkLevel = Level;
            }

            int rowspan = 1;
            int colspan;


            int PalabrasPorFila = 0;

            if (pGlobals.Count <= 4)
            {
                colspan         = 6;
                PalabrasPorFila = 1;
            }
            else if ((pGlobals.Count > 4) && (pGlobals.Count <= 8))
            {
                colspan         = 3;
                PalabrasPorFila = 2;
            }
            else
            {
                colspan         = 2;
                PalabrasPorFila = 3;
            }


            //En blanco antes del numero de pagina

            double Count        = pGlobals.Count;
            double doubleplarba = PalabrasPorFila;
            int    NumeroFilas  = (int)Math.Ceiling(Count / PalabrasPorFila);


            int nwhite = 4 - NumeroFilas;

            int Height  = 14;
            int Columns = 6;                          //Se utiliza para graduar al colspan anterior
            //Celdas en blanco hasta el final del documento
            int FilasBlancasAntesdepalabras = 33 + 4; //Al añadir dos filas mas a la plantilla

            for (int x = 0; x < FilasBlancasAntesdepalabras * Columns; x++)
            {
                Cell cellWhite = new Cell();  // Creating a cell
                cellWhite.SetHeight(Height).Add(new Paragraph(" "));
                table.AddCell(cellWhite);     // Adding cell to the table
            }

            foreach (Paragraph p in pGlobals)
            {
                Cell cellGlobal = new Cell(rowspan, colspan);
                cellGlobal.SetHeight(Height).Add(p);
                table.AddCell(cellGlobal);
            }

            RemoveBorder(table);
            canvas.Add(table);


            Table tableNumberPage = new Table(UnitValue.CreatePercentArray(new float[] { 100 }));

            tableNumberPage.UseAllAvailableWidth();

            for (int x = 0; x < nwhite; x++)
            {
                Cell cellWhite = new Cell();        // Creating a cell
                cellWhite.SetHeight(Height).Add(new Paragraph(" ").SetHeight(Height));
                tableNumberPage.AddCell(cellWhite); // Adding cell to the table
            }

            Cell cellNumberPage = new Cell();   // Creating a cell

            cellNumberPage.SetHeight(Height).Add(new Paragraph(sIndex).SetFontSize(10).SetTextAlignment(TextAlignment.CENTER).SetFont(fontKaiti));
            tableNumberPage.AddCell(cellNumberPage);      // Adding cell to the table

            RemoveBorder(tableNumberPage);
            canvas.Add(tableNumberPage);
            pdfCanvas.EndLayer();


            return(textSize);
        }
        public void AddCaracterPage(string c, PdfDocument pdf, Document document, string sIndex)
        {
            //GENERAR CARACTER
            SaveBitmapfromFontChar(c, "Kaiti", FontStyle.Regular, sIndex);
            PdfCanvas pdfCanvas = new PdfCanvas(pdf.AddNewPage());

            Canvas canvas = new Canvas(pdfCanvas, pdf, document.GetPageEffectiveArea(pdf.GetDefaultPageSize()));


            //Layer 1
            PdfLayer pdflayer1 = new PdfLayer("Layer 1", pdf);

            pdflayer1.SetOn(true);
            pdfCanvas.BeginLayer(pdflayer1);

            ///Template IMG
            string template = @"D:\Portada\Cuadernos\PNG A4\Mizige DIN A4 Template HSK - Pie Descripcion 2 lines more.png";

            ImageData data = ImageDataFactory.Create(template);

            iText.Layout.Element.Image img = new iText.Layout.Element.Image(ImageDataFactory.Create(template))
                                             .ScaleToFit(PageSize.A4.GetWidth(), PageSize.A4.GetHeight())
                                             .SetFixedPosition(0, 0);
            canvas.Add(img);
            pdfCanvas.EndLayer();

            //Layer 2 CARACTER GRANDE
            PdfLayer pdflayer2 = new PdfLayer("Layer 2", pdf);

            pdflayer2.SetOn(true);
            pdfCanvas.BeginLayer(pdflayer2);

            //Para poner una imagen con 300 ppp, use una escala de 72 / 300 = 24 % .Por ejemplo:
            //si tiene una imagen de 5 x 5 pulgadas que escanea a 300 ppp, la
            //imagen resultante es de 1500 x 1500 píxeles(5 x 300 = 1500).Cuando coloca esta imagen en
            //el pdf con una escala del 24 % (72 / 300 = 0.24), la imagen en el pdf será de
            //5X5 pulgadas con 1500X1500 píxeles a 300 dpi.La imagen siempre será de
            //1500X1500 píxeles sea cual sea el tamaño.

            int LeftMarginMiZige = 114 * 72 / 300 - 20;
            int UpMarginMiZige   = 114 * 72 / 300 - 5;
            int CaracterSize     = 180;

            //Este es el path con el que se ha grabado la imagen previamente
            string path = @"D:\HSKBooklet\" + sIndex + "_" + c.ToString() + ".png";

            iText.Layout.Element.Image MainCaracter = new iText.Layout.Element.Image(ImageDataFactory.Create(path))
                                                      .SetFixedPosition(LeftMarginMiZige, PageSize.A4.GetHeight() - CaracterSize - UpMarginMiZige)
                                                      .ScaleAbsolute(CaracterSize, CaracterSize)
                                                      .SetTextAlignment(TextAlignment.CENTER);
            canvas.Add(MainCaracter);
            pdfCanvas.EndLayer();



            //Layer 4 CARACTER PEQUEÑOS FOR
            PdfLayer pdflayer4 = new PdfLayer("Layer 4", pdf);

            pdflayer4.SetOn(true);
            pdfCanvas.BeginLayer(pdflayer4);



            //int MaxColumns = 17;
            //int MaxRows = 26;
            int MiniCaracterSize = 30;
            int MaxColumns       = 17;
            int MaxRows          = 17;

            float width              = 30.6F;
            float height             = 30.7F;
            int   InitialLeftMargin  = 35;
            int   UpMarginMiZigeMini = 22;

            float left   = 0;
            float bottom = 0;

            iText.Layout.Element.Image MiniCaracter = new iText.Layout.Element.Image(ImageDataFactory.Create(path));
            MiniCaracter.ScaleAbsolute(MiniCaracterSize, MiniCaracterSize);
            MiniCaracter.SetTextAlignment(TextAlignment.CENTER);
            MiniCaracter.SetTextAlignment(TextAlignment.CENTER);

            for (int col = 0; col < MaxColumns; col++)

            {
                for (int row = 0; row < MaxRows; row++)
                {
                    //No se imprimen donde esta en caracter grande situado
                    if (!(row < 5 && col < 5))
                    {
                        left   = 35 + col * width;
                        bottom = PageSize.A4.GetHeight() - MiniCaracterSize - 2 - UpMarginMiZigeMini - row * height;

                        //iText.Layout.Element.Image MiniCaracter = new iText.Layout.Element.Image(ImageDataFactory.Create(path))
                        MiniCaracter.SetFixedPosition(left, bottom);
                        canvas.Add(MiniCaracter);
                    }
                }
            }
            pdfCanvas.EndLayer();

            //INFORMACION CARACTER

            //Se incluyen los caracteres no las palabras
            List <Word> arrayIncluded = ToList(includedWords);


            document.SetFont(fontKaiti);

            var   dimensionsColumns = new float[] { 1, 1, 1, 1, 1, 1 };
            Table table             = new Table(UnitValue.CreatePercentArray(dimensionsColumns));

            table.UseAllAvailableWidth();

            PdfLayer pdflayerInfo = new PdfLayer("pdflayerInfo", pdf);

            pdflayerInfo.SetOn(true);
            pdfCanvas.BeginLayer(pdflayerInfo);
            int repeticion = 0;

            List <Paragraph> pGlobals = new List <Paragraph>();

            foreach (Word_HSK word in arrayIncluded)
            {
                //Add row to table
                if (word.Character.Contains(c))
                {
                    repeticion++;

                    Paragraph pGlobal = new Paragraph(word.Character + "\t (" + word.Pinyin + ") , " + word.Description).SetFont(fontKaiti).SetFontSize(10);


                    pGlobals.Add(pGlobal);
                }
            }


            if (repeticion > Maxrepeticion)
            {
                Maxrepeticion = repeticion;
                repeticion    = 0;
                int checkLevel = Level;
            }

            int rowspan = 1;
            int colspan;


            int PalabrasPorFila = 0;

            if (pGlobals.Count <= 4)
            {
                colspan         = 6;
                PalabrasPorFila = 1;
            }
            else if ((pGlobals.Count > 4) && (pGlobals.Count <= 8))
            {
                colspan         = 3;
                PalabrasPorFila = 2;
            }
            else
            {
                colspan         = 2;
                PalabrasPorFila = 3;
            }


            //En blanco antes del numero de pagina

            double Count        = pGlobals.Count;
            double doubleplarba = PalabrasPorFila;
            int    NumeroFilas  = (int)Math.Ceiling(Count / PalabrasPorFila);


            int nwhite = 4 - NumeroFilas;

            int Height  = 14;
            int Columns = 6;                          //Se utiliza para graduar al colspan anterior
            //Celdas en blanco hasta el final del documento
            int FilasBlancasAntesdepalabras = 33 + 4; //Al añadir dos filas mas a la plantilla

            for (int x = 0; x < FilasBlancasAntesdepalabras * Columns; x++)
            {
                Cell cellWhite = new Cell();  // Creating a cell
                cellWhite.SetHeight(Height).Add(new Paragraph(" "));
                table.AddCell(cellWhite);     // Adding cell to the table
            }

            foreach (Paragraph p in pGlobals)
            {
                Cell cellGlobal = new Cell(rowspan, colspan);
                cellGlobal.SetHeight(Height).Add(p);
                table.AddCell(cellGlobal);
            }

            RemoveBorder(table);
            canvas.Add(table);


            Table tableNumberPage = new Table(UnitValue.CreatePercentArray(new float[] { 100 }));

            tableNumberPage.UseAllAvailableWidth();

            for (int x = 0; x < nwhite; x++)
            {
                Cell cellWhite = new Cell();        // Creating a cell
                cellWhite.SetHeight(Height).Add(new Paragraph(" ").SetHeight(Height));
                tableNumberPage.AddCell(cellWhite); // Adding cell to the table
            }

            Cell cellNumberPage = new Cell();   // Creating a cell

            cellNumberPage.SetHeight(Height).Add(new Paragraph(sIndex).SetFontSize(10).SetTextAlignment(TextAlignment.CENTER).SetFont(fontKaiti));
            tableNumberPage.AddCell(cellNumberPage);      // Adding cell to the table

            RemoveBorder(tableNumberPage);
            canvas.Add(tableNumberPage);
            pdfCanvas.EndLayer();
        }
コード例 #5
0
        public void PreparePdfPage()
        {
            // 创建新的一页
            var leftWhite = (_document.GetPdfDocument().GetDefaultPageSize().GetWidth() - _paperColumn * _envelopeResponse.ProductWidth.MMtoPix()) / 2;
            var topWhite  = (_document.GetPdfDocument().GetDefaultPageSize().GetHeight() - _paperRow * _envelopeResponse.ProductHeight.MMtoPix()) / 2;

            // 添加辅助线
            var pdfCanvas = new PdfCanvas(_document.GetPdfDocument(), FrontPageNumber);

            pdfCanvas.SetLineDash(10).SetColor(new DeviceGray(1), true);


            // 画竖线
            for (var i = 0; i <= _paperColumn; i++)
            {
                pdfCanvas
                .MoveTo(leftWhite + i * _envelopeResponse.ProductWidth.MMtoPix(), 0)
                .LineTo(leftWhite + i * _envelopeResponse.ProductWidth.MMtoPix(), topWhite - 5)
                .MoveTo(leftWhite + i * _envelopeResponse.ProductWidth.MMtoPix(), _document.GetPdfDocument().GetDefaultPageSize().GetHeight())
                .LineTo(leftWhite + i * _envelopeResponse.ProductWidth.MMtoPix(), _document.GetPdfDocument().GetDefaultPageSize().GetHeight() - topWhite + 5);
            }

            for (var j = 0; j <= _paperRow; j++)
            {
                pdfCanvas
                .MoveTo(y: topWhite + j * _envelopeResponse.ProductHeight.MMtoPix(), x: 0)
                .LineTo(y: topWhite + j * _envelopeResponse.ProductHeight.MMtoPix(), x: leftWhite - 5)
                .MoveTo(y: topWhite + j * _envelopeResponse.ProductHeight.MMtoPix(), x: _document.GetPdfDocument().GetDefaultPageSize().GetWidth())
                .LineTo(y: topWhite + j * _envelopeResponse.ProductHeight.MMtoPix(), x: _document.GetPdfDocument().GetDefaultPageSize().GetWidth() - leftWhite + 5);
            }


            pdfCanvas.Stroke();
            var fontPath = "";

            if (Process.GetCurrentProcess().MainModule is ProcessModule processModule)
            {
                fontPath = new FileInfo(processModule.FileName).DirectoryName + @"/STKAITI.TTF";
            }

            // 添加水印
            var pdfFont = PdfFontFactory.CreateFont(fontPath, PdfEncodings.IDENTITY_H, false); // 列

            // 上方的水印
            _document.Add(new Paragraph(_waterMark)
                          .SetFont(pdfFont)
                          .SetFontSize(8)
                          .SetFontColor(_urgent ? DeviceRgb.RED : DeviceRgb.BLACK)
                          .SetPageNumber(FrontPageNumber)
                          .SetFixedPosition(
                              leftWhite + 10,
                              _document.GetPdfDocument().GetDefaultPageSize().GetHeight() - topWhite,
                              _document.GetPdfDocument().GetDefaultPageSize().GetWidth() - leftWhite - 10));

            // 左下方的水印
            _document.Add(new Paragraph(_waterMark)
                          .SetFont(pdfFont)
                          .SetFontSize(8)
                          .SetRotationAngle(Math.PI / 2)
                          .SetFontColor(_urgent ? DeviceRgb.RED : DeviceRgb.BLACK)
                          .SetPageNumber(FrontPageNumber)
                          .SetFixedPosition(
                              leftWhite,
                              topWhite + 10,
                              _document.GetPdfDocument().GetDefaultPageSize().GetHeight() - leftWhite - 10));

            if (_envelopeResponse.DoubleSide)
            {
                _document.Add(new Paragraph("反面样式【" + _envelopeResponse.BackStyle + "】")
                              .SetFont(pdfFont)
                              .SetFontSize(8)
                              .SetFontColor(DeviceRgb.BLACK)
                              .SetPageNumber(BackPageNumber)
                              .SetFixedPosition(
                                  leftWhite + (_paperColumn - 1) * _envelopeResponse.ProductWidth.MMtoPix() + 10,
                                  _document.GetPdfDocument().GetDefaultPageSize().GetHeight() - topWhite,
                                  _document.GetPdfDocument().GetDefaultPageSize().GetWidth() - leftWhite - 10));

                // 左下方的水印
                _document.Add(new Paragraph("反面样式【" + _envelopeResponse.BackStyle + "】")
                              .SetFont(pdfFont)
                              .SetFontSize(8)
                              .SetRotationAngle(Math.PI / 2)
                              .SetFontColor(DeviceRgb.BLACK)
                              .SetPageNumber(BackPageNumber)
                              .SetFixedPosition(
                                  leftWhite,
                                  topWhite + 10,
                                  _document.GetPdfDocument().GetDefaultPageSize().GetHeight() - leftWhite - 10));
            }

            // 正面
            // 行
            for (var i = 0; i < _paperRow; i++)
            {
                // 列
                for (var j = 0; j < _paperColumn; j++)
                {
                    var currentIndex = i * _paperColumn + j;
                    if (currentIndex >= _postCardResponses.Count)
                    {
                        continue;
                    }

                    var postCard = _postCardResponses[currentIndex];

                    // 正面
                    var fileId = postCard.ProductFileId;
                    if (!string.IsNullOrEmpty(fileId))
                    {
                        var frontFile = new FileInfo(_templateDirectoryInfo.FullName + "/" + fileId);
                        if (!frontFile.Exists)
                        {
                            frontFile = FileApi.DownloadFileByFileId(fileId, frontFile);
                        }

                        var frontImage = new Image(ImageDataFactory.Create(frontFile.FullName));
                        // 转化尺寸
                        frontImage.ScaleAbsolute(_envelopeResponse.ProductWidth.MMtoPix(), _envelopeResponse.ProductHeight.MMtoPix());
                        frontImage.SetPageNumber(FrontPageNumber);

                        // 坐标po
                        frontImage.SetFixedPosition(
                            leftWhite + j * _envelopeResponse.ProductWidth.MMtoPix(),
                            topWhite + i * _envelopeResponse.ProductHeight.MMtoPix());
                        _document.Add(frontImage);
                    }

                    // 反面
                    var backFileId = postCard.BackProductFileId;
                    if (!string.IsNullOrEmpty(backFileId))
                    {
                        var backFileInfo = new FileInfo(_templateDirectoryInfo.FullName + "/" + backFileId);
                        if (!backFileInfo.Exists)
                        {
                            FileApi.DownloadFileByFileId(backFileId, backFileInfo);
                        }

                        var backImage = new Image(ImageDataFactory.Create(backFileInfo.FullName));
                        // 转化尺寸
                        backImage.ScaleAbsolute(_envelopeResponse.ProductWidth.MMtoPix(), _envelopeResponse.ProductHeight.MMtoPix());
                        backImage.SetPageNumber(BackPageNumber);

                        // 坐标po
                        backImage.SetFixedPosition(
                            leftWhite + (_paperColumn - j - 1) * _envelopeResponse.ProductWidth.MMtoPix(),
                            topWhite + i * _envelopeResponse.ProductHeight.MMtoPix());
                        _document.Add(backImage);
                    }
                }
            }
        }