Java 如何使用iText在每页上添加总页码?

Java 如何使用iText在每页上添加总页码?,java,itext,Java,Itext,如何使用iText在每页上添加总页码?通过快速网络搜索提醒自己这一点;看看 相关的方法有onedpage()生成“X”和onCloseDocument()在到达文档末尾时生成“Y” 首先使用虚拟页面计数处理从PdfWriter到bytestream的输出 从该ByTestStream创建一个PdfReader,调用PdfReader.getNumberOfPages获取实际的页面计数 重新创建PDF输出,了解页数,并相应地更改页脚 这很混乱,但是如果没有两次通过的方法,就无法轻松地知道页面计数

如何使用iText在每页上添加总页码?

通过快速网络搜索提醒自己这一点;看看

相关的方法有
onedpage()
生成“X”和
onCloseDocument()
在到达文档末尾时生成“Y”

  • 首先使用虚拟页面计数处理从
    PdfWriter
    bytestream
    的输出
  • 从该
    ByTestStream
    创建一个
    PdfReader
    ,调用
    PdfReader.getNumberOfPages
    获取实际的页面计数
  • 重新创建PDF输出,了解页数,并相应地更改页脚

  • 这很混乱,但是如果没有两次通过的方法,就无法轻松地知道页面计数。有关操作PDF的详细信息,请参见。以下是我使用的代码。将页面写入输出不会增加太多开销

    outputStream = new ByteArrayOutputStream();
    output = new DataOutputStream(outputStream);
    document = new Document();
    writer = PdfWriter.getInstance(document, output);
    document.open();
    contentByte = writer.getDirectContent();
    ....add stuff
    document.close();
    writer.close();
    byte[] output = outputStream.toByteArray();
    PdfReader reader = new PdfReader(output);
    //reset the output
    outputStream = new ByteArrayOutputStream();
    output = new DataOutputStream(outputStream);
    document = new Document();
    writer = PdfWriter.getInstance(document, output);
    document.open();
    PdfStamper stamper = new PdfStamper(reader, outputStream);
    //add the pages
    for (int i = 1; i <= pageCount; i++)
    {
        contentByte = stamper.getOverContent(i);
        addParagraph("Page " + i + " of " + pageCount, new Point(500, 30), boldTextFont);  // my own paragraph font
    }
    stamper.close();
    
    outputStream=newbytearrayoutputstream();
    输出=新数据输出流(outputStream);
    文件=新文件();
    writer=PdfWriter.getInstance(文档,输出);
    document.open();
    contentByte=writer.getDirectContent();
    ……添加内容
    document.close();
    writer.close();
    字节[]输出=outputStream.toByteArray();
    PdfReader读取器=新PdfReader(输出);
    //重置输出
    outputStream=新的ByteArrayOutputStream();
    输出=新数据输出流(outputStream);
    文件=新文件();
    writer=PdfWriter.getInstance(文档,输出);
    document.open();
    PdfStamper压模=新的PdfStamper(读卡器,输出流);
    //添加页面
    
    对于(inti=1;i不再搜索,这里是解决方案。如果他们删除此链接,我将把代码发布到我的站点并托管此链接


    您可以创建一个继承自
    PdfPageEventHelper
    然后重写这两个函数,如下所示:

    Imports System.Collections.Generic
    Imports System.Text
    
    Imports iTextSharp.text.pdf
    Imports iTextSharp.text
    
    Namespace PDF_EnteteEtPiedDePage
        Public Class EnteteEtPiedDePage
            Inherits PdfPageEventHelper
            ' This is the contentbyte object of the writer
            Private cb As PdfContentByte
    
            ' we will put the final number of pages in a template
            Private template As PdfTemplate
    
            ' this is the BaseFont we are going to use for the header / footer
            Private bf As BaseFont = Nothing
    
            ' This keeps track of the creation time
            Private PrintTime As DateTime = DateTime.Now
    
            ' we override the onOpenDocument method
            Public Overrides Sub OnOpenDocument(writer As PdfWriter, document As Document)
                Try
                    PrintTime = DateTime.Now
                    bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
                    cb = writer.DirectContent
                    template = cb.CreateTemplate(50, 50)
                Catch de As DocumentException
                Catch ioe As System.IO.IOException
                End Try
            End Sub
    
            Public Overrides Sub OnStartPage(writer As PdfWriter, document As Document)
                MyBase.OnStartPage(writer, document)
    
                Dim pageSize As Rectangle = document.PageSize
    
            End Sub
    
            Public Overrides Sub OnEndPage(writer As PdfWriter, document As Document)
                MyBase.OnEndPage(writer, document)
    
                Dim pageN As Integer = writer.PageNumber
                Dim text As [String] = "Page " & pageN & " de "
                Dim len As Single = bf.GetWidthPoint(text, 8)
    
                Dim pageSize As Rectangle = document.PageSize
    
                cb.SetRGBColorFill(100, 100, 100)
    
                cb.BeginText()
                cb.SetFontAndSize(bf, 8)
                cb.SetTextMatrix(pageSize.GetLeft(40), pageSize.GetBottom(30))
                cb.ShowText(text)
                cb.EndText()
    
                cb.AddTemplate(template, pageSize.GetLeft(40) + len, pageSize.GetBottom(30))
    
                cb.BeginText()
                cb.SetFontAndSize(bf, 8)
                cb.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, "Imprimé le : " & PrintTime.ToShortDateString() & " à " & PrintTime.ToShortTimeString, pageSize.GetRight(40), pageSize.GetBottom(30), 0)
                cb.EndText()
            End Sub
    
            Public Overrides Sub OnCloseDocument(writer As PdfWriter, document As Document)
                MyBase.OnCloseDocument(writer, document)
    
                template.BeginText()
                template.SetFontAndSize(bf, 8)
                template.SetTextMatrix(0, 0)
                template.ShowText("" & Convert.ToString((writer.PageNumber - 1)))
                template.EndText()
            End Sub
    
        End Class
    End Namespace
    
    Dim PageEventHandler = New EnteteEtPiedDePage()
                aPdfWriter.PageEvent = PageEventHandler
    
    然后,只需设置
    pdfwriter PageEvent
    的值,如下所示:

    Imports System.Collections.Generic
    Imports System.Text
    
    Imports iTextSharp.text.pdf
    Imports iTextSharp.text
    
    Namespace PDF_EnteteEtPiedDePage
        Public Class EnteteEtPiedDePage
            Inherits PdfPageEventHelper
            ' This is the contentbyte object of the writer
            Private cb As PdfContentByte
    
            ' we will put the final number of pages in a template
            Private template As PdfTemplate
    
            ' this is the BaseFont we are going to use for the header / footer
            Private bf As BaseFont = Nothing
    
            ' This keeps track of the creation time
            Private PrintTime As DateTime = DateTime.Now
    
            ' we override the onOpenDocument method
            Public Overrides Sub OnOpenDocument(writer As PdfWriter, document As Document)
                Try
                    PrintTime = DateTime.Now
                    bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
                    cb = writer.DirectContent
                    template = cb.CreateTemplate(50, 50)
                Catch de As DocumentException
                Catch ioe As System.IO.IOException
                End Try
            End Sub
    
            Public Overrides Sub OnStartPage(writer As PdfWriter, document As Document)
                MyBase.OnStartPage(writer, document)
    
                Dim pageSize As Rectangle = document.PageSize
    
            End Sub
    
            Public Overrides Sub OnEndPage(writer As PdfWriter, document As Document)
                MyBase.OnEndPage(writer, document)
    
                Dim pageN As Integer = writer.PageNumber
                Dim text As [String] = "Page " & pageN & " de "
                Dim len As Single = bf.GetWidthPoint(text, 8)
    
                Dim pageSize As Rectangle = document.PageSize
    
                cb.SetRGBColorFill(100, 100, 100)
    
                cb.BeginText()
                cb.SetFontAndSize(bf, 8)
                cb.SetTextMatrix(pageSize.GetLeft(40), pageSize.GetBottom(30))
                cb.ShowText(text)
                cb.EndText()
    
                cb.AddTemplate(template, pageSize.GetLeft(40) + len, pageSize.GetBottom(30))
    
                cb.BeginText()
                cb.SetFontAndSize(bf, 8)
                cb.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, "Imprimé le : " & PrintTime.ToShortDateString() & " à " & PrintTime.ToShortTimeString, pageSize.GetRight(40), pageSize.GetBottom(30), 0)
                cb.EndText()
            End Sub
    
            Public Overrides Sub OnCloseDocument(writer As PdfWriter, document As Document)
                MyBase.OnCloseDocument(writer, document)
    
                template.BeginText()
                template.SetFontAndSize(bf, 8)
                template.SetTextMatrix(0, 0)
                template.ShowText("" & Convert.ToString((writer.PageNumber - 1)))
                template.EndText()
            End Sub
    
        End Class
    End Namespace
    
    Dim PageEventHandler = New EnteteEtPiedDePage()
                aPdfWriter.PageEvent = PageEventHandler
    

    试试这个,因为我也受到了这个问题的困扰,而且我还新建了这个库,所以在经历了很多麻烦之后,我得到了结果,只是像我在评论中提到的那样,尝试两次应用逻辑

    class PdfReportServlet extends HttpServlet
    {
        public static int total = 0;
    
        public static int getTotal() 
        {
            return total;
        }
    
        public static void setTotal(int total) {
            PdfReportServlet .total = total;
        }
    
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        {
            String reportFor = request.getParameter("report");
            if(!"".equals(reportFor))
            {
                if(reportFor.equals("pdf"))
                {
        /* 
           from here logic starts
        */
                    response.setContentType("application/pdf");
                    Document document = new Document(PageSize.LETTER.rotate());
                    try
                    {
                        ByteArrayOutputStream bos = new ByteArrayOutputStream();
                        PdfWriter pdfWriter = PdfWriter.getInstance(document, bos);
                        PdfReport pdfReport = new PdfReport();
                        pdfWriter.setPageEvent(pdfReport);
                        document.open();
                        String id = request.getParameter("id");
                        DettagliFamigliaPDFReport.generatePDFReport(document,id);
                        document.close();
    
                        /*
                         * now again give new references to Document and PdfWriter classes.
                         */
    
                        document = new Document(PageSize.LETTER.rotate());
    
                        pdfWriter = PdfWriter.getInstance(document, response.getOutputStream());
                        PDFReport.setTotalPages(getTotal());/*##PAGES_TOTAL here i set total Pages which i get from above logic */
                        PdfReport pdfReport = new PdfReport();
                        pdfWriter.setPageEvent(pdfReport);
                        document.open();
                        id = request.getParameter("id");
                        PDFReport.generatePDFReport(document,id);
                        document.close();
    
                    }
                    catch(DocumentException de){
                        de.printStackTrace();
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
    
    }
    
    
    /*
        Here below i write the class inherits the PdfPageEventHelper class and also having generatePDFReport() method.
    */
    
    
    public class PDFReport extends PdfPageEventHelper
    {
        public static PdfTemplate template;
        public static int totalPages=0;
    
        public static int getTotalPages() {
            return totalPages;
        }
    
        public static void setTotalPages(int totalPages) {
            DettagliFamigliaPDFReport.totalPages = totalPages;
        }
    
    
        public static void generatePDFReport(Document document,String id)
        {
            // here your data to write on page of pdf.
        }
    
        @Override
        public void onOpenDocument(PdfWriter writer, Document doc) 
        {
            template = writer.getDirectContent().createTemplate(100, 100);
        }
    
        int totalPage = 0;
        @Override
        public void onCloseDocument(PdfWriter writer, Document doc) 
        {
            totalPage = writer.getPageNumber() - 1;/* at the end this method calls and you will get total number of pages.*/
            PdfReportServlet.setTotal(totalPage); /* while first time logic of servlet executes then i set the total pages to servlet's variable using this logic.
    and second time servlet's logic is executing i passed totalPages to this class variable
    where i marked ##PAGES_TOTAL  */
        }
    
        @Override
        public void onStartPage(PdfWriter writer, Document doc) {
            // Here i write header logic when each time page starts.
        }
    
        @Override`enter code here`
        public void onEndPage(PdfWriter writer, Document doc) 
        {
            Rectangle rect = writer.getPageSize();
            float width = rect.getWidth()/2;   
    
            DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
            Date date = new Date();
    
            String footerOne = "This document is printed on date "+dateFormat.format(date)+" - Page. "+writer.getPageNumber()+" of "+getTotalPages();
    
            Paragraph paraOne = new Paragraph(footerOne);
    
            Font fontFooter = new Font();
            fontFooter.setSize(8);
            fontFooter.setColor(Color.gray);
    
            paraOne.setFont(fontFooter);
    
            Phrase footerPhraseOne = new Phrase(paraOne);
            ColumnText.showTextAligned(writer.getDirectContent(),
                    Element.ALIGN_CENTER, footerPhraseOne,
                    width, 30, 0);
        }
    }
    
    这是一个方便的函数!(基于Milhous的方法)(使用itext版本4.1.6.0)

    公共静态字节[]addPageNumber(字节[]pdf)
    {
    PdfReader reader=新PdfReader(pdf);
    var Pages=reader.NumberOfPages;
    MemoryStream ms=新的MemoryStream();
    PdfStamper压模=新PdfStamper(读卡器,毫秒);
    
    对于(inti=1;i,这是您的代码片段:

    final PdfWriter writer = PdfWriter.getInstance(document, outputStream);
    writer.setPageEvent(new PageStamper());
    
    以及编号代码:

    import com.itextpdf.text.*;
    import com.itextpdf.text.pdf.*;
    import com.itextpdf.tool.xml.*;
    import com.itextpdf.tool.xml.css.*;
    
    import java.io.IOException;
    
    /**
     * Adds page number to al the pages except the first.
     */
    public class PageStamper extends PdfPageEventHelper {
        private static final Logger logger = Logger.getLogger(PageStamper.class);
    
        @Override
        public void onEndPage(PdfWriter writer, Document document) {
            final int currentPageNumber = writer.getCurrentPageNumber();
    
            if (currentPageNumber == 1) {
                return;
            }
    
            try {
                final Rectangle pageSize = document.getPageSize();
                final PdfContentByte directContent = writer.getDirectContent();
    
                directContent.setColorFill(BaseColor.GRAY);
                directContent.setFontAndSize(BaseFont.createFont(), 10);
    
                directContent.setTextMatrix(pageSize.getRight(40), pageSize.getBottom(30));
                directContent.showText(String.valueOf(currentPageNumber));
    
            } catch (DocumentException | IOException e) {
                logger.error("PDF generation error", e);
            }
        }
    }
    

    此处找到此代码:。非常感谢,Y722

    正如其他答案所示,您首先需要创建pdf,然后查看您创建的pdf包含多少页面,然后将页脚添加到每个页面。 理想的类是PdfStamper,其目的是向现有pdf/现有pdf页面添加其他元素

    下面是一个基于米尔豪斯的详细示例:

    Font smallFont = FontFactory.getFont("Arial", 9, Font.NORMAL);
    ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream();
    Document document = new Document(PageSize.A4, 70, 70, 40, 40);
    PdfWriter pdfWriter = PdfWriter.getInstance(document, pdfOutputStream);
    
    document.open();
    //CREATE PDF HERE - ADD CONTENT TO DOCUMENT
    document.close();
    
    int pageCount = pdfWriter.getPageNumber()-1;
    byte[] pdfAsBytes = pdfOutputStream.toByteArray();
    
    //add footer
    PdfReader reader = new PdfReader(pdfAsBytes);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    DataOutputStream output = new DataOutputStream(outputStream);
    document = new Document();
    document.open();
    PdfStamper stamper = new PdfStamper(reader, output);
    for (int i = 1; i <= pageCount; i++) {
      ColumnText.showTextAligned(stamper.getOverContent(i), 
        Element.ALIGN_CENTER, new Phrase(i+"/" + pageCount, smallFont), 550, 30, 0);
    }
    stamper.close();
    byte[] finalPdfAsBytes = outputStream.toByteArray();
    
    Font smallFont=FontFactory.getFont(“Arial”,9,Font.NORMAL);
    ByteArrayOutputStream pdfOutputStream=新建ByteArrayOutputStream();
    文件=新文件(PageSize.A4、70、70、40、40);
    PdfWriter PdfWriter=PdfWriter.getInstance(文档,pdfOutputStream);
    document.open();
    //在此处创建PDF-将内容添加到文档
    document.close();
    int pageCount=pdfWriter.getPageNumber()-1;
    byte[]pdfAsBytes=pdfOutputStream.toByteArray();
    //添加页脚
    PdfReader reader=新PdfReader(PDFAS字节);
    ByteArrayOutputStream outputStream=新建ByteArrayOutputStream();
    DataOutputStream输出=新的DataOutputStream(outputStream);
    文件=新文件();
    document.open();
    PdfStamper压模=新PdfStamper(读卡器,输出);
    
    对于(inti=1;i这是用Java转换的Rama代码(至少是其中的一部分)


    经过两天的努力,我终于得到了PDF中的总页数。 实际上,我的客户要求只在PDF的最后一页显示页脚。 我就是这样做的,希望将来能对别人有所帮助。 步骤1: 创建新类,该类将继承自PdfPageEventHelper,如下所示

    public class ITextEvents : PdfPageEventHelper
    {
    public int pageNos { get; set; }
    
    /// <summary>
    /// CALLED ON EACH PAGE END PAGE, 
    /// </summary>
    /// <param name="writer"></param>
    /// <param name="document"></param>
    public override void OnEndPage(iTextSharp.text.pdf.PdfWriter writer, iTextSharp.text.Document document)
    {
    //LOGIC: TO SHOW DISCLAIMER ONLY ON LAST PAGE
    if (document.PageNumber == pageNos)
    {
    //Create new Paragraph
    Paragraph p = new Paragraph();
    //ADD CHUNK IN PARAGRAPH
    p.Add(new Chunk("Heading-Text: ", FontFactory.GetFont("Calibri",11,Font.BOLD)));
    p.Add(new Chunk("Details sow in footer", FontFactory.GetFont("Calibri", 10)));
    //PARAGRAPH TEXT ALIGNMENT. 
    p.Alignment = Element.ALIGN_LEFT;
    //CREATE PDF TABLE, FOR ADDING NEW CELL AND ROW IN THE PDF
    PdfPTable footerTbl = new PdfPTable(1);
    //SETING TABLE WIDTH
    footerTbl.TotalWidth = 580;
    footerTbl.HorizontalAlignment = Element.ALIGN_LEFT;
    //ADDING CELL IN THE TABLE
    PdfPCell cell = new PdfPCell(p);
    //CELL LAYOUT DESIGN
    cell.Border = 1;
    cell.PaddingLeft = 10;
    cell.PaddingRight = 10;
    footerTbl.AddCell(cell);
    //ADDING TABLE IN THE PDF
    footerTbl.WriteSelectedRows(0, -1, 10, 110, writer.DirectContent);
    }
    }
    
    /// <summary>
    /// THIS METHOD WILL GET TOTAL PDF PAGES COUNT,
    /// REQUIREMENT OF THIS METHOD WAS IS TO SHOW FOOTER ON LAST PAGE IN THE PDF. 
    /// </summary>
    /// <param name="HistoryHTML"></param>
    /// <param name="Name"></param>
    /// <param name="filePath"></param>
    /// <returns></returns>
    public int GetTotalPageCount(string HistoryHTML, String Name, string filePath)
    {
    try
    {
    using (MemoryStream stream = new System.IO.MemoryStream())
    {
    StringReader sr = new StringReader(HistoryHTML);
    Document pdfDoc = new Document(PageSize.A4, 30f, 30f, 30f, 90f);
    PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream);
    pdfDoc.Open();
    XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
    pdfDoc.Close();
    
    bool exists = System.IO.Directory.Exists(filePath);
    if (!exists)
        System.IO.Directory.CreateDirectory(filePath);
    System.IO.File.WriteAllBytes((filePath + @"\FileName-" + Name + ".pdf"), stream.ToArray());
    
    string path = AppDomain.CurrentDomain.BaseDirectory + @"FolderPath\" + "FileName-" + Name + ".pdf";
    
    PdfReader pdfReader = new PdfReader(path);
    int numberOfPages = pdfReader.NumberOfPages;
    pdfReader.Close();
    stream.Close();
    return numberOfPages;
    
    }
    }
    catch (Exception ex)
    {
    CommonFunction.logElmahError(ex);
    }
    return -1;
    }
    }  
    
    为了更好地理解,我提供了控制器端代码

    public string ExportPDF(string HistoryHTML, String Name)
            {
                int pageCount = new Common.ITextEvents().GetTotalPageCount(HistoryHTML, Name, Server.MapPath("~/FolderPath"));
    
                using (MemoryStream stream = new System.IO.MemoryStream())
                {
                    StringReader sr = new StringReader(HistoryHTML);
                    Document pdfDoc = new Document(PageSize.A4, 30f, 30f, 30f, 30f);
                    PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream);
                    pdfDoc.Open();
    
                    //APPEND DISCLAIMER TEXT ACCORING TO HIPAA RULES.
                    writer.PageEvent = new Common.ITextEvents() { pageNo = pageCount };
    
                    XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
                    pdfDoc.Close();
    
                    bool exists = System.IO.Directory.Exists(Server.MapPath("~/FolderPath"));
                    if (!exists)
                        System.IO.Directory.CreateDirectory(Server.MapPath("~/FolderPath"));
                    System.IO.File.WriteAllBytes(Server.MapPath("~/FolderPath/" + Name + ".pdf"), stream.ToArray());
    
                    return File(stream.ToArray(), "application/pdf", "FileName-" + Name + "-" + Name + ".pdf");
                }
            }
    

    似乎是首选的方式。但是计算出的'adjust'变量有一个问题:它只针对一个字符计算:'helv.getWidthPoint(“0”,12)”:-(示例不再可用,它确实很难看。但这也是使用iText的唯一方式。如果有人知道更好的Java PDF库(最好是免费的/OSS),我很想知道。对于使用PDF reader,文档必须关闭,否则它会给出PDF页眉也不例外。因此,在每个页脚中使用它,文档需要打开以写入每个页脚。以防万一:很好,他们实际上删除了链接,并且您能够预测它:-)当你添加页面时,你要数一数。@Milhous你能解释一下:addparagration(“Page”+i+”of“+pageCount,new Point(500,30),boldTextFont);//我自己的段落字体从哪里来的?错误的示例代码。如果你不一次添加页面也没有帮助。一点用处都没有。这不是java代码,问题被标记为[java]。无论如何,这很有帮助。我将其转换为java,但它对我不起作用。:(@pinch我如何调用此方法以及在何处?@Rama如果您愿意,您可以将此代码添加到您的响应中。如果您这样做,请阻止我。“实际上,我的客户要求仅在PDF的最后一页显示页脚”那么你根本不需要页面事件。只需在所有其他内容完成后绘制页脚即可。
    public string ExportPDF(string HistoryHTML, String Name)
            {
                int pageCount = new Common.ITextEvents().GetTotalPageCount(HistoryHTML, Name, Server.MapPath("~/FolderPath"));
    
                using (MemoryStream stream = new System.IO.MemoryStream())
                {
                    StringReader sr = new StringReader(HistoryHTML);
                    Document pdfDoc = new Document(PageSize.A4, 30f, 30f, 30f, 30f);
                    PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream);
                    pdfDoc.Open();
    
                    //APPEND DISCLAIMER TEXT ACCORING TO HIPAA RULES.
                    writer.PageEvent = new Common.ITextEvents() { pageNo = pageCount };
    
                    XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
                    pdfDoc.Close();
    
                    bool exists = System.IO.Directory.Exists(Server.MapPath("~/FolderPath"));
                    if (!exists)
                        System.IO.Directory.CreateDirectory(Server.MapPath("~/FolderPath"));
                    System.IO.File.WriteAllBytes(Server.MapPath("~/FolderPath/" + Name + ".pdf"), stream.ToArray());
    
                    return File(stream.ToArray(), "application/pdf", "FileName-" + Name + "-" + Name + ".pdf");
                }
            }