使用itexsharp导出为pdf时,它显示空白页面

时间:2017-06-08 10:22:54

标签: asp.net sql-server pdf itext

我使用asp.net制作了一个桌面应用程序,将html转换为PDF。 基本上这个应用程序用于从数据库生成用户PDF。

进程:首先我将所有数据转换为html,然后使用itextsharp转换为PDF但在生成一些PDF后显示空白页

任何想法或任何人都面临此类问题

 public static void converttopdf(string HtmlStream, List<Tuple<string, string>> tifffiles, List<Tuple<string, string>> pdffilestomerge, string filename, string patientfirstpagestr, string TableofContent, string patientheader, SqlConnection con, string sectiondetails)
    {

        MemoryStream msOutput = new MemoryStream();
        TextReader reader = new StringReader(HtmlStream);

        Document document = new Document(PageSize.A4, 30, 30, 42, 44);

        string filetogenerate = string.Empty;
        if (pdffilestomerge != null && pdffilestomerge.Count > 1)
        {

            filetogenerate = temppath + filename + "_Temp1.pdf";
        }
        else
        {
            filetogenerate = temppath + filename + "_Temp.pdf";

        }
        PdfWriter writer = PdfWriter.GetInstance(document, new System.IO.FileStream(filetogenerate, System.IO.FileMode.Create));
        HTMLWorker worker = new HTMLWorker(document);
        document.Open();
        worker.StartDocument();

        string[] separator = new string[] { @"<br clear='all' style='page-break-before:always'>" };
        string[] pages = HtmlStream.Split(separator, StringSplitOptions.None);

        foreach (string page in pages)
        {
            document.NewPage();

            System.Collections.ArrayList htmlarraylist = HTMLWorker.ParseToList(new StringReader(page), null);

            for (int k = 0; k < htmlarraylist.Count; k++)
            {
                document.Add((IElement)htmlarraylist[k]);
            }
        }
        using (var ms = new MemoryStream())
        {
            if (tifffiles != null)
            {
                int docid = 0;
                foreach (var obj in tifffiles)
                {
                    string filepath = obj.Item2.ToString();
                    WriteLogEntry("bitmap file path : " + filepath);
                    if (filepath != string.Empty)
                    {
                        try
                        {
                            Bitmap myBitmap = new Bitmap(filepath);
                            System.Drawing.Color pixelColor = myBitmap.GetPixel(50, 50);
                            if (pixelColor.Name == "ff808080")
                            {
                                WriteLogEntry("convert image by irfanview :" + filepath);
                                LaunchCommandLineApp(filepath, temppath + "Test.jpg");

                                document.NewPage();
                                var imgStream = GetImageStream(temppath + "Test.jpg");
                                var image = iTextSharp.text.Image.GetInstance(imgStream);

                                image.SetAbsolutePosition(10, 80);
                                image.ScaleToFit(document.PageSize.Width - 60, document.PageSize.Height - 80);

                                //image.ScaleToFit(document.PageSize.Width - 30, document.PageSize.Height);
                                if (docid != Convert.ToInt32(obj.Item1))
                                {
                                    Chunk c1 = new Chunk("#~@DID" + obj.Item1.ToString() + "#~@");
                                    c1.Font.SetColor(0, 0, 0);  //#00FFFFFF
                                    c1.Font.Size = 0;
                                    document.Add(c1);
                                }
                                document.Add(image);

                                File.Delete(temppath + "Test.jpg");
                            }
                            else
                            {
                                document.NewPage();
                                var imgStream = GetImageStream(filepath);
                                var image = iTextSharp.text.Image.GetInstance(imgStream);
                                image.SetAbsolutePosition(10, 80);
                                image.ScaleToFit(document.PageSize.Width - 60, document.PageSize.Height - 80);
                                //image.ScaleToFit(document.PageSize.Width - 30, document.PageSize.Height);
                                if (docid != Convert.ToInt32(obj.Item1))
                                {
                                    Chunk c1 = new Chunk("#~@DID" + obj.Item1.ToString() + "#~@");
                                    c1.Font.SetColor(0, 0, 0);  //#00FFFFFF
                                    c1.Font.Size = 0;
                                    document.Add(c1);
                                }
                                document.Add(image);

                                WriteLogEntry("Image added successfully" + filepath);
                            }
                        }
                        catch
                        {
                            document.NewPage();
                            if (docid != Convert.ToInt32(obj.Item1))
                            {
                                Chunk c1 = new Chunk("#~@DID" + obj.Item1.ToString() + "#~@");
                                c1.Font.SetColor(0, 0, 0);  //#00FFFFFF
                                c1.Font.Size = 0;
                                document.Add(c1);
                            }
                            WriteLogEntry("Image not valid" + filepath);
                        }
                        docid = Convert.ToInt32(obj.Item1);
                    }
                }
            }
        }

        worker.EndDocument();
        worker.Close();
        document.Close();

        if (pdffilestomerge != null && pdffilestomerge.Count > 1)
        {
            string file = temppath + filename + "_Temp.pdf";

            mergepdf(file, pdffilestomerge, filetogenerate);
        }

        PdfReader pdfreader = new PdfReader(temppath + filename + "_Temp.pdf");

        Document document1 = new Document(PageSize.A4, 30, 30, 42, 44);
        PdfWriter writer1 = PdfWriter.GetInstance(document1, new FileStream(FinalOutputPath + filename + ".pdf", FileMode.Create));

        //HeaderFooter footer = new HeaderFooter(new Phrase("Page "), true);
        //footer.Alignment = Element.ALIGN_RIGHT;
        //footer.Border = iTextSharp.text.Rectangle.NO_BORDER;
        //document1.Footer = footer;

        //HeaderFooter header = new HeaderFooter(new Phrase(""), true);
        //header.Alignment = Element.ALIGN_LEFT;
        //header.Border = iTextSharp.text.Rectangle.NO_BORDER;
        //document1.Add(header);

        document1.Open();

        PdfContentByte cb1 = writer1.DirectContent;
        PdfImportedPage page1;
        string test1 = TableofContent; int TableofContentPageCount = 0; int SectionPageStartNumber = 0;
        string lastdocnamestr = "";
        for (int t = 1; t <= pdfreader.NumberOfPages; t++)
        {
            document1.NewPage();
            HeaderFooter header = new HeaderFooter(new Phrase(""), true);
            header.Alignment = Element.ALIGN_LEFT;
            header.Border = iTextSharp.text.Rectangle.NO_BORDER;
            HeaderFooter header1 = new HeaderFooter(new Phrase(" "), true);
            header1.Alignment = Element.ALIGN_LEFT;
            header1.Border = iTextSharp.text.Rectangle.NO_BORDER;
            HeaderFooter header2 = new HeaderFooter(new Phrase(" "), true);
            header2.Alignment = Element.ALIGN_LEFT;
            header2.Border = iTextSharp.text.Rectangle.NO_BORDER;
            document1.Add(header);
            document1.Add(header1);
            document1.Add(header2);

            page1 = writer1.GetImportedPage(pdfreader, t);
            var baseFont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
            byte[] pdfcontent = pdfreader.GetPageContent(t);
            //PdfDictionary dict = pdfreader.GetPageN(t);
            string contentStream = System.Text.Encoding.Default.GetString(pdfcontent);
            var contentByte = writer1.DirectContent;
            contentByte.BeginText();
            contentByte.SetFontAndSize(baseFont, 8);
            var multiLineString = "";
            var multiLineString1 = "";
            string test = getBetween(contentStream, "#~@", "#~@");
            if (test.Length > 0)
            {
                test1 = test1.Replace(test + ".", t.ToString());
                DataTable dt = getdocdetailforheader(Convert.ToInt32(test.Replace("DID", "")), con);
                if (dt.Rows.Count > 0)
                {
                    multiLineString = dt.Rows[0]["DocumentName"].ToString() + " - " + Convert.ToDateTime(dt.Rows[0]["EncounterDTTM"].ToString()).ToString("MM/dd/yyyy") + " | Owner : " + dt.Rows[0]["Ownername"].ToString();
                    lastdocnamestr = multiLineString;
                    WriteLogEntry(multiLineString);
                }

                if (TableofContentPageCount == 0)
                {
                    TableofContentPageCount = t;
                }
            }
            //if (contentStream.Contains("sectionstart") && SectionPageStartNumber == 0) SectionPageStartNumber = t;



            if (lastdocnamestr != string.Empty)
            {
                multiLineString = lastdocnamestr;
            }
            //else
            //{
            //    if (TableofContentPageCount == 0)
            //    {
            //        multiLineString = "Table of Content";
            //    }                    
            //}

            multiLineString1 = patientheader;
            contentByte.ShowTextAligned(PdfContentByte.ALIGN_LEFT, multiLineString, 15, 820, 0);
            contentByte.ShowTextAligned(PdfContentByte.ALIGN_LEFT, multiLineString1, 15, 810, 0);

            contentByte.EndText();


            string relLogo = Directory.GetCurrentDirectory().ToString().Replace("bin", "").Replace("Debug", "").Replace("\\\\", "") + "\\Image\\MFA_LOGO.png";

            iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(relLogo);
            jpg.ScaleAbsolute(38f, 38f);
            jpg.SetAbsolutePosition(document1.PageSize.Width - 70, 806);
            jpg.Alignment = Element.ALIGN_RIGHT;
            document1.Add(jpg);

            cb1.MoveTo(0, 805);
            cb1.LineTo(document1.PageSize.Width, 805);
            cb1.Stroke();
            cb1.AddTemplate(page1, 0, 0);
        }
        SectionPageStartNumber = pdfreader.NumberOfPages + 1;
        System.Collections.ArrayList htmlarraylist1 = HTMLWorker.ParseToList(new StringReader(sectiondetails), null);
        document1.NewPage();

        for (int k = 0; k < htmlarraylist1.Count; k++)
        {
            document1.Add((IElement)htmlarraylist1[k]);
        }

        document1.Close();
        FinalPDF(FinalOutputPath + filename + ".pdf", FinalOutputPath + filename + "_1.pdf", patientfirstpagestr, test1, TableofContentPageCount, patientheader, SectionPageStartNumber);

        File.Delete(temppath + filename + "_Temp.pdf");

0 个答案:

没有答案