예제 #1
0
        public void ManipulatePdf(string HtmlContent, string basePath)
        {
            string FONTTABLEHEADER  = basePath + @"fonts\Metric-Bold.otf";
            string FONTTABLEGENERAL = basePath + @"fonts\Metric-Regular.otf";
            string FONTPAGEHEADING  = basePath + @"fonts\Indian Type Foundry - Zahrah Bold Italic.otf";
            string HOMEPAGEHEADING  = basePath + @"fonts\Indian Type Foundry - Zahrah Light.otf";

            ConverterProperties properties = new ConverterProperties();

            properties.SetBaseUri(basePath);
            FontProvider fontProvider     = new DefaultFontProvider(false, false, false);
            FontProgram  fontTableHeader  = FontProgramFactory.CreateFont(FONTTABLEHEADER);
            FontProgram  fontTableGeneral = FontProgramFactory.CreateFont(FONTTABLEGENERAL);
            FontProgram  fontPageHeading  = FontProgramFactory.CreateFont(FONTPAGEHEADING);
            FontProgram  homePageHeading  = FontProgramFactory.CreateFont(HOMEPAGEHEADING);

            fontProvider.AddFont(homePageHeading);
            fontProvider.AddFont(fontTableHeader);
            fontProvider.AddFont(fontTableGeneral);
            fontProvider.AddFont(fontPageHeading);
            properties.SetFontProvider(fontProvider);
            PdfDocument pdfDoc = new PdfDocument(new PdfWriter(basePath + @"Pdf\Test.pdf"));

            pdfDoc.SetDefaultPageSize(iText.Kernel.Geom.PageSize.LETTER.Rotate());
            HtmlConverter.ConvertToPdf(HtmlContent, pdfDoc, properties);
        }
예제 #2
0
        public void ManipulatePdf(string htmlSource, string pdfDest, string resourceLoc, PageSize pageSize, float screenWidth)
        {
            PdfWriter   writer = new PdfWriter(pdfDest);
            PdfDocument pdfDoc = new PdfDocument(writer);

            // Set the result to be tagged
            pdfDoc.SetTagged();
            pdfDoc.SetDefaultPageSize(pageSize);

            ConverterProperties converterProperties = new ConverterProperties();

            // Set media device description details
            MediaDeviceDescription mediaDescription = new MediaDeviceDescription(MediaType.SCREEN);

            mediaDescription.SetWidth(screenWidth);
            converterProperties.SetMediaDeviceDescription(mediaDescription);

            FontProvider fp = new DefaultFontProvider();

            // Register external font directory
            fp.AddDirectory(resourceLoc);

            converterProperties.SetFontProvider(fp);
            // Base URI is required to resolve the path to source files
            converterProperties.SetBaseUri(resourceLoc);

            // Create acroforms from text and button input fields
            converterProperties.SetCreateAcroForm(true);

            HtmlConverter.ConvertToPdf(new FileStream(htmlSource, FileMode.Open, FileAccess.Read, FileShare.Read),
                                       pdfDoc, converterProperties);

            pdfDoc.Close();
        }
예제 #3
0
        /// <summary>
        /// Creates the PDF file.
        /// </summary>
        /// <param name="src">the path to the source HTML file</param>
        /// <param name="dest">the path to the resulting PDF</param>
        public void CreatePdf(String src, String dest)
        {
            ConverterProperties properties = new ConverterProperties();

            properties.SetFontProvider(new DefaultFontProvider(true, true, true));
            HtmlConverter.ConvertToPdf(new FileInfo(src), new FileInfo(dest), properties);
        }
예제 #4
0
        public MemoryStream ManipulatePdf(PageSize pageSize)
        {
            var memoryStream = new MemoryStream();

            var properties          = new ConverterProperties();
            var defaultFontProvider = new DefaultFontProvider(true, true, false);

            defaultFontProvider.AddDirectory(FONT_DIRECTORY);
            properties.SetFontProvider(defaultFontProvider);

            using (var pdfWriter = new PdfWriter(memoryStream))
            {
                pdfWriter.SetCloseStream(false);
                var pdfDocument = new PdfDocument(pdfWriter);
                pdfDocument.SetDefaultPageSize(pageSize);

                if (!string.IsNullOrEmpty(_convertRequest.Header))
                {
                    var headerHandler = new ReportHeaderCreator(_convertRequest.Header);
                    pdfDocument.AddEventHandler(PdfDocumentEvent.START_PAGE, headerHandler);
                }

                if (!string.IsNullOrEmpty(_convertRequest.Footer))
                {
                    var footerHandler = new ReportFooterCreator(_convertRequest.Footer);
                    pdfDocument.AddEventHandler(PdfDocumentEvent.END_PAGE, footerHandler);
                }

                var document = HtmlConverter.ConvertToDocument(_convertRequest.Content, pdfDocument, properties);
                document.Close();
            }

            memoryStream.Position = 0;
            return(memoryStream);
        }
예제 #5
0
            public virtual void HandleEvent(Event @event)
            {
                var docEvent = (PdfDocumentEvent)@event;
                var pdf      = docEvent.GetDocument();

                var page     = docEvent.GetPage();
                var pageSize = page.GetPageSize();


                var   coordX       = pageSize.GetWidth() / 2;
                float coordY       = PdfFormation.PAGE_NUMBER_FOOTER_MARGIN_BOTTOM;
                var   canvasWidth  = pageSize.GetWidth();
                float canvasHeight = PdfFormation.PAGE_NUMBER_FOOTER_HEIGHT;

                var canvas = new Canvas(new PdfCanvas(page), new Rectangle(coordX, coordY, canvasWidth, canvasHeight));

                canvas.SetFontProvider(new DefaultFontProvider(true, true, true));
                canvas.SetFontSize(REGULAR_FONT_SIZE);
                canvas.SetFont(PdfFontFactory.CreateFont(FONT_TIMES_NEW_ROMAN));

                var pageFooter = _footer.Replace(PdfFormation.PAGE_NUMBER_TEMPLATE, pdf.GetPageNumber(page).ToString());

                var properties          = new ConverterProperties();
                var defaultFontProvider = new DefaultFontProvider(true, true, true);

                defaultFontProvider.AddDirectory(FONT_DIRECTORY);
                properties.SetFontProvider(defaultFontProvider);

                foreach (var element in HtmlConverter.ConvertToElements(pageFooter, properties))
                {
                    canvas.Add((IBlockElement)element);
                }

                canvas.Close();
            }
예제 #6
0
        /// <summary>
        /// Creates the PDF file.
        /// </summary>
        /// <param name="src">the path to the source HTML file</param>
        /// <param name="fonts">the path to a font folder with extra fonts</param>
        /// <param name="dest">the path to the resulting PDF</param>
        public void CreatePdf(String src, String fonts, String dest)
        {
            ConverterProperties properties   = new ConverterProperties();
            FontProvider        fontProvider = new DefaultFontProvider();

            fontProvider.AddDirectory(fonts);
            properties.SetFontProvider(fontProvider);
            HtmlConverter.ConvertToPdf(new FileInfo(src), new FileInfo(dest), properties);
        }
예제 #7
0
        /// <summary>
        /// Creates the PDF file.
        /// </summary>
        /// <param name="src">the path to the source HTML file</param>
        /// <param name="font">the path to an extra font</param>
        /// <param name="dest">the path to the resulting PDF</param>
        public void CreatePdf(String src, String font, String dest)
        {
            ConverterProperties properties   = new ConverterProperties();
            FontProvider        fontProvider = new DefaultFontProvider();
            FontProgram         fontProgram  = FontProgramFactory.CreateFont(font);

            fontProvider.AddFont(fontProgram);
            properties.SetFontProvider(fontProvider);
            HtmlConverter.ConvertToPdf(new FileInfo(src), new FileInfo(dest), properties);
        }
예제 #8
0
        internal static ConverterProperties InitConverterProperties()
        {
            ConverterProperties converterProperties = new ConverterProperties();

            converterProperties.SetBaseUri(SOURCE_FOLDER);
            FontProvider fontProvider = new FontProvider();

            fontProvider.AddDirectory(RESOURCES);
            fontProvider.AddStandardPdfFonts();
            converterProperties.SetFontProvider(fontProvider);
            return(converterProperties);
        }
예제 #9
0
        /// <summary>
        /// Creates the PDF file.
        /// </summary>
        /// <param name="src">the path to the source HTML file</param>
        /// <param name="fonts">the path to a folder containing a series of fonts</param>
        /// <param name="dest">the path to the resulting PDF</param>
        public void CreatePdf(String src, String fonts, String dest)
        {
            PdfWriter   writer = new PdfWriter(dest);
            PdfDocument pdf    = new PdfDocument(writer);

            pdf.SetDefaultPageSize(PageSize.A4.Rotate());
            ConverterProperties properties   = new ConverterProperties();
            FontProvider        fontProvider = new DefaultFontProvider(false, false, false);

            fontProvider.AddDirectory(fonts);
            properties.SetFontProvider(fontProvider);
            HtmlConverter.ConvertToPdf(new FileStream(src, FileMode.Open, FileAccess.Read), pdf, properties);
        }
예제 #10
0
        public virtual void WordBreakMidNumbersTest()
        {
            FontProvider fontProvider = new DefaultFontProvider();

            fontProvider.AddFont(fontsFolder + "NotoSansCJKjp-Regular.otf");
            ConverterProperties converterProperties = new ConverterProperties();

            converterProperties.SetFontProvider(fontProvider);
            HtmlConverter.ConvertToPdf(new FileInfo(sourceFolder + "wordBreakMidNumbers.html"), new FileInfo(destinationFolder
                                                                                                             + "wordBreakMidNumbers.pdf"), converterProperties);
            NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(destinationFolder + "wordBreakMidNumbers.pdf"
                                                                             , sourceFolder + "cmp_wordBreakMidNumbers.pdf", destinationFolder));
        }
예제 #11
0
        public virtual void OverflowXWordBreakTest()
        {
            // TODO: update cmp file after implementing DEVSIX-1438
            FontProvider fontProvider = new DefaultFontProvider();

            fontProvider.AddFont(fontsFolder + "NotoSansCJKjp-Regular.otf");
            ConverterProperties converterProperties = new ConverterProperties();

            converterProperties.SetFontProvider(fontProvider);
            HtmlConverter.ConvertToPdf(new FileInfo(sourceFolder + "overflowXWordBreak.html"), new FileInfo(destinationFolder
                                                                                                            + "overflowXWordBreak.pdf"), converterProperties);
            NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(destinationFolder + "overflowXWordBreak.pdf"
                                                                             , sourceFolder + "cmp_overflowXWordBreak.pdf", destinationFolder));
        }
예제 #12
0
        public void fromHtml()
        {
            PdfDocument
                pdf = new PdfDocument(
                new PdfWriter(dest));     //we use a PdfDocument Object instead of FileStream to write HTML into
            ConverterProperties cprop    = new ConverterProperties();
            FontProvider        provider = new FontProvider();

            provider.AddFont(font_path, PdfEncodings.IDENTITY_H);

            cprop.SetFontProvider(provider);
            pdf.AddEventHandler(PdfDocumentEvent.END_PAGE, new WatermarkEvent()); //here we add custom event handler
            HtmlConverter.ConvertToPdf(new FileStream(html_path, FileMode.Open), pdf, cprop);
        }
예제 #13
0
        public void ManipulatePdf(string src, string dest)
        {
            WriterProperties writerProperties = new WriterProperties();

            writerProperties.AddXmpMetadata();

            PdfWriter   pdfWriter = new PdfWriter(dest, writerProperties);
            PdfDocument pdfDoc    = new PdfDocument(pdfWriter);

            pdfDoc.GetCatalog().SetLang(new PdfString("en-US"));

            pdfDoc.SetTagged();
            pdfDoc.GetCatalog().SetViewerPreferences(new PdfViewerPreferences().SetDisplayDocTitle(true));

            PdfDocumentInfo pdfMetaData = pdfDoc.GetDocumentInfo();

            pdfMetaData.SetAuthor("Samuel Huylebroeck");
            pdfMetaData.AddCreationDate();
            pdfMetaData.GetProducer();
            pdfMetaData.SetCreator("iText Software");
            pdfMetaData.SetKeywords("example, accessibility");
            pdfMetaData.SetSubject("PDF accessibility");

            // Title is derived from html

            // pdf conversion
            ConverterProperties props        = new ConverterProperties();
            FontProvider        fontProvider = new FontProvider();

            fontProvider.AddStandardPdfFonts();
            fontProvider.AddDirectory(SRC);

            // The noto-nashk font file (.ttf extension) is placed in the resources
            props.SetFontProvider(fontProvider);
            // Base URI is required to resolve the path to source files
            props.SetBaseUri(SRC);

            // Setup custom tagworker factory for better tagging of headers
            DefaultTagWorkerFactory tagWorkerFactory = new AccessibilityTagWorkerFactory();

            props.SetTagWorkerFactory(tagWorkerFactory);

            HtmlConverter.ConvertToPdf(new FileStream(src, FileMode.Open), pdfDoc, props);

            pdfDoc.Close();
        }
예제 #14
0
        public void ManipulatePdf(String pdfDest)
        {
            String htmlSource = SRC + "hello.html";

            Stream inputStream = new FileStream(SRC + "sRGB Color Space Profile.icm", FileMode.Open, FileAccess.Read);

            ConverterProperties converterProperties = new ConverterProperties();

            // Pdf/A files should have only embedded fonts inside. That's why the standard pdf fonts should be removed from
            // the FontProvider, which contains fonts to be used during conversion
            converterProperties.SetFontProvider(new DefaultFontProvider(false, true, false));

            PdfADocument pdfADocument = new PdfADocument(new PdfWriter(pdfDest), PdfAConformanceLevel.PDF_A_1B,
                                                         new PdfOutputIntent("Custom", "", "http://www.color.org",
                                                                             "sRGB IEC61966-2.1", inputStream));

            HtmlConverter.ConvertToPdf(new FileStream(htmlSource, FileMode.Open, FileAccess.Read), pdfADocument, converterProperties);
        }
예제 #15
0
        public byte[] Convert(string htmlContent)
        {
            byte[] pdf = null;
            using (var memoryStream = new MemoryStream())
            {
                var writterProperties = new WriterProperties()
                                        .SetFullCompressionMode(true);
                using (PdfWriter writer = new PdfWriter(memoryStream, writterProperties))
                {
                    PdfDocument pdfDoc = new PdfDocument(writer);
                    pdfDoc.SetTagged();

                    PageSize pageSize = new PageSize(900, 1000);
                    pdfDoc.SetDefaultPageSize(pageSize);

                    ConverterProperties converterProperties = new ConverterProperties();
                    converterProperties.SetCreateAcroForm(true);

                    var fp = new DefaultFontProvider(true, false, false);
                    converterProperties.SetFontProvider(fp);

                    MediaDeviceDescription mediaDescription = new MediaDeviceDescription(MediaType.SCREEN);
                    converterProperties.SetMediaDeviceDescription(mediaDescription);

                    var                elements        = HtmlConverter.ConvertToElements(htmlContent, converterProperties);
                    Document           document        = new Document(pdfDoc);
                    CJKSplitCharacters splitCharacters = new CJKSplitCharacters();
                    document.SetSplitCharacters(splitCharacters);
                    document.SetProperty(Property.SPLIT_CHARACTERS, splitCharacters);
                    foreach (IElement element in elements)
                    {
                        document.Add((IBlockElement)element);
                    }
                    document.Close();

                    pdf = memoryStream.ToArray();

                    memoryStream.Close();
                    pdfDoc.Close();
                }
            }

            return(pdf);
        }
예제 #16
0
        public static void Create(string dest)
        {
            PdfWriter pdfWriter = new PdfWriter(dest);

            PdfDocument pdfDoc = new PdfDocument(pdfWriter);

            // pdf conversion
            ConverterProperties props = new ConverterProperties();
            FontProvider        fp    = new FontProvider();

            fp.AddStandardPdfFonts();
            fp.AddDirectory(@"fonts");//The noto-nashk font file (.ttf extension) is placed in the resources

            props.SetFontProvider(fp);
            props.SetBaseUri(@"fonts");
            //Setup custom tagworker factory for better tagging of headers
            HtmlConverter.ConvertToPdf(@"<h1>Hello</h1><p>world</p>", pdfDoc, props);
            pdfDoc.Close();
        }
예제 #17
0
        public static void generatePDF()
        {
            // Base URI is required to resolve the path to source files
            ConverterProperties converterProperties = new ConverterProperties();

            using (var htmlStream = File.OpenRead(SRC))
            {
                if (File.Exists(DEST))
                {
                    File.Delete(DEST);
                }
                using (var pdfStream = File.OpenWrite(DEST))
                {
                    FontProvider fontProvider = new DefaultFontProvider();
                    FontProgram  fontProgram  = FontProgramFactory.CreateFont(FONT);
                    fontProvider.AddFont(fontProgram);
                    converterProperties.SetFontProvider(fontProvider);
                    HtmlConverter.ConvertToPdf(htmlStream, pdfStream, converterProperties);
                }
            }
        }
예제 #18
0
        static void test1()
        {
            FileInfo  out_pdf = new FileInfo(@"d:\test.pdf");
            PdfWriter writer  = new PdfWriter(out_pdf);
            //用法1 -- 使用默认参数直接转换(A4,)
            //HtmlConverter.ConvertToPdf(htmlDoc, writer);

            //用法2 -- 自定义页面大小、留白尺寸
            //PageSize a6 = PageSize.A6;
            //a6.ApplyMargins(20, 20, 20, 20, false);		//if true the rectangle will expand, otherwise it will shrink
            //pdf.SetDefaultPageSize(a6);
            PdfDocument         pdf      = new PdfDocument(writer);
            ConverterProperties prop     = new ConverterProperties();
            FontProvider        provider = new DefaultFontProvider();

            provider.AddSystemFonts();
            prop.SetFontProvider(provider);
            string html = File.ReadAllText(@"d:\test.html");

            HtmlConverter.ConvertToPdf(html, pdf, prop);
            Console.WriteLine("转化成功");
        }
예제 #19
0
            public virtual void HandleEvent(Event @event)
            {
                PdfDocumentEvent docEvent = (PdfDocumentEvent)@event;
                PdfDocument      pdfDoc   = docEvent.GetDocument();
                PdfPage          page     = docEvent.GetPage();
                int       pageNumber      = pdfDoc.GetPageNumber(page);
                Rectangle pageSize        = page.GetPageSize();
                PdfCanvas pdfCanvas       = new PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc);
                //Add watermark
                Canvas canvas = new Canvas(pdfCanvas, pdfDoc, page.GetPageSize());

                canvas.SetFontColor(ColorConstants.WHITE);
                canvas.SetProperty(Property.FONT_SIZE, 60);
                // canvas.SetProperty(Property.FONT, BaseFont.);
                ConverterProperties properties = new ConverterProperties();

                properties.SetFontProvider(new DefaultFontProvider(true, true, true));
                canvas.ShowTextAligned(new Paragraph("CONFIDENTIAL"),
                                       298, 421, pdfDoc.GetPageNumber(page),
                                       TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45);
                pdfCanvas.Release();
            }
예제 #20
0
        public void ProcessRequest(HttpContext context)
        {
            string[] FONTS =
            {
                // msjh.ttc[0], the first one ttf in msjh.ttc.
                @"C:\Windows\Fonts\msjh.ttc,0",
            };
            // If the POST body has uncoded symbols,such as "<" and ">",
            // it will be judged as potentially dangerous. And put the POST
            // body to Request.Unvalidated.Form.
            String HTML = context.Request.Unvalidated.Form["content"] == null ? context.Request.Form["content"]: context.Request.Unvalidated.Form["content"];

            // Check whether the HTML has content.
            if (HTML != null && HTML != "")
            {
                // Define the date as the pdf file name.
                String strDate  = DateTime.Now.ToString("yyyyMMddHHmmss");
                String filename = "D:\\" + strDate + ".pdf";

                ConverterProperties properties = new ConverterProperties();
                // Deal with font provider.
                FontProvider fontProvider = new DefaultFontProvider(false, false, false);
                foreach (string font in FONTS)
                {
                    FontProgram fontProgram = FontProgramFactory.CreateFont(font);
                    fontProvider.AddFont(fontProgram);
                }
                // Set font type
                properties.SetFontProvider(fontProvider);
                // Set the base uri (that is, the root) of the website.
                // HttpContext.Current.Server.MapPath("~") : the root of website.
                properties.SetBaseUri(HttpContext.Current.Server.MapPath("~"));

                // Convert html to pdf.
                HtmlConverter.ConvertToPdf(WebUtility.HtmlDecode(HTML), new FileStream(filename, FileMode.Create), properties);
                Download(filename, strDate + ".pdf");
            }
        }
예제 #21
0
        /// <summary>
        /// Convierte texto html de entrada en un archivo pdf.
        /// </summary>
        /// <param name="html">Html a convertir en pdf.</param>
        /// <param name="orientation">Orientación.</param>
        /// <param name="fontData">Byte content of the font program file.</param>
        /// <returns>Datos binarios del pdf.</returns>
        public byte[] GetPdfFormHtml(string html,
                                     string orientation = "PORTRAIT", byte[] fontData = null)
        {
            QRCodeTagWorkerFactory = new QRCodeTagWorkerFactory();

            ConverterProperties properties = new ConverterProperties();

            properties.SetTagWorkerFactory(QRCodeTagWorkerFactory);
            properties.SetCssApplierFactory(new QRCodeTagCssApplierFactory());

            if (fontData != null)
            {
                FontProvider fontProvider = new FontProvider();
                fontProvider.AddFont(fontData, PdfEncodings.IDENTITY_H);

                properties.SetFontProvider(fontProvider);
            }

            byte[] result = null;

            using (var ms = new MemoryStream())
            {
                using (var pdfDocument = new PdfDocument(new PdfWriter(ms)))
                {
                    if (orientation.ToUpper() == "LANDSCAPE")
                    {
                        pdfDocument.SetDefaultPageSize(PageSize.A4.Rotate());
                    }

                    HtmlConverter.ConvertToPdf(html, pdfDocument, properties);
                    result = ms.ToArray();
                }
            }

            return(result);
        }
예제 #22
0
        public async Task <IActionResult> Convert()
        {
            StringValues clientParam;
            StringValues keyParam;
            StringValues orientationParam;
            StringValues pageSizeParam;
            var          hasClient      = Request.Query.TryGetValue("client", out clientParam);
            var          hasKey         = Request.Query.TryGetValue("key", out keyParam);
            var          hasOrientation = Request.Query.TryGetValue("orientation", out orientationParam);
            var          hasPageSize    = Request.Query.TryGetValue("pageSize", out pageSizeParam);
            var          client         = hasClient && clientParam.Count > 0 ? clientParam[0] : "";
            var          key            = hasKey && keyParam.Count > 0 ? keyParam[0] : "";
            var          orientation    = hasOrientation && orientationParam.Count > 0 ? orientationParam[0] : "portrait";
            var          pageSize       = hasPageSize && pageSizeParam.Count > 0 ? pageSizeParam[0] : "A4";

            if (!_clientKeys.ContainsKey(client) || _clientKeys[client] != key)
            {
                return(new NotFoundResult());
            }

            var formData = HttpContext.Request.Form;
            var files    = formData.Files;
            var docFile  = files.Where(f => f.FileName == "doc.html").FirstOrDefault();

            IActionResult response = null;

            if (docFile != null)
            {
                var tempFolder = $"{System.IO.Path.GetTempPath()}{Guid.NewGuid()}";
                Directory.CreateDirectory(tempFolder);

                foreach (var file in files)
                {
                    if (file.FileName != "doc.html")
                    {
                        await System.IO.File.WriteAllBytesAsync($"{tempFolder}/{file.FileName}", ReadAllBytes(file.OpenReadStream()));
                    }
                }

                try
                {
                    using (var htmlSource = docFile.OpenReadStream())
                        using (var pdfDest = new ByteArrayOutputStream())
                        {
                            var writer = new PdfWriter(pdfDest);
                            var pdfDoc = new PdfDocument(writer);
                            pdfDoc.SetTagged();

                            PageSize ps = PageSize.A4;

                            if (pageSize == "A3")
                            {
                                ps = PageSize.A3;
                            }

                            if (orientation == "landscape")
                            {
                                ps = ps.Rotate();
                            }

                            pdfDoc.SetDefaultPageSize(ps);

                            var converterProperties = new ConverterProperties();

                            var fp = new DefaultFontProvider();
                            fp.AddDirectory(tempFolder);
                            converterProperties.SetFontProvider(fp);

                            converterProperties.SetImmediateFlush(true);
                            converterProperties.SetBaseUri(new Uri(tempFolder).AbsoluteUri);
                            HtmlConverter.ConvertToPdf(htmlSource, pdfDoc, converterProperties);
                            var bytes = pdfDest.ToArray();
                            response = new FileContentResult(bytes, "application/pdf");
                        }
                }
                catch (Exception ex)
                {
                    response = StatusCode(500, new { error = ex.Message, stackTrace = ex.StackTrace });
                }

                Directory.Delete(tempFolder, true);
            }
            else
            {
                response = StatusCode((int)HttpStatusCode.BadRequest, new { error = "No doc file provided" });
            }

            return(response);
        }
예제 #23
0
        public static byte[] ConvertToPdfWithTags(string html, string title, string docOptions)
        {
            DocOptions documentOptions = DocOptions.None;

            if (!string.IsNullOrEmpty(docOptions))
            {
                int options;
                if (int.TryParse(docOptions, out options))
                {
                    documentOptions = (DocOptions)options;
                }
            }
            PdfFontFactory.RegisterDirectory(System.Web.Hosting.HostingEnvironment.MapPath("~/content/fonts/"));
            ConverterProperties props = new ConverterProperties();

            FontProvider fp = new FontProvider();

            fp.AddDirectory(System.Web.Hosting.HostingEnvironment.MapPath("~/content/fonts/"));
            props.SetFontProvider(fp);
            props.SetTagWorkerFactory(new DefaultTagWorkerFactory());

            ImageData imageFirst =
                ImageDataFactory.Create(System.Web.Hosting.HostingEnvironment.MapPath(headerPage1));

            ImageData imageAll =
                ImageDataFactory.Create(System.Web.Hosting.HostingEnvironment.MapPath(headerAllPages));

            using (var workStream = new MemoryStream())
            {
                using (var pdfWriter = new PdfWriter(workStream, new WriterProperties().AddUAXmpMetadata().SetPdfVersion
                                                         (PdfVersion.PDF_2_0).SetFullCompressionMode(true)))
                {
                    PdfDocument pdfDoc = new PdfDocument(pdfWriter);
                    pdfDoc.GetCatalog().SetLang(new PdfString("en-GB"));


                    pdfDoc.GetCatalog().SetViewerPreferences(new PdfViewerPreferences().SetDisplayDocTitle(true));
                    if (documentOptions > 0)
                    {
                        pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, new PublicReportHeaderFooter(documentOptions, title, imageFirst, imageAll));
                    }
                    //Set meta tags
                    var pdfMetaData = pdfDoc.GetDocumentInfo();
                    pdfMetaData.AddCreationDate();
                    pdfMetaData.GetProducer();
                    pdfMetaData.SetCreator("iText Software");
                    //Set the document to be tagged
                    pdfDoc.SetTagged();

                    //Extra metadata tags available
                    //pdfMetaData.SetAuthor("");
                    using (var document = HtmlConverter.ConvertToDocument(html, pdfDoc, props))
                    {
                        //Can do more with document here if necessary
                    }

                    //Returns the written-to MemoryStream containing the PDF.
                    return(workStream.ToArray());
                }
            }
        }
예제 #24
0
        public IActionResult Create(string pdfHtmlString, string saveName = null)
        {
            #region Parameters
            // Global Config
            string fontFamily = Configuration["PdfConfig:GlobalConfig:FontFamily"];
            // Path Config
            string descPath = Configuration["PdfConfig:PathConfig:DescPath"];
            string logPath  = Configuration["PdfConfig:PathConfig:LogPath"];
            // MetaData Config
            string title    = Configuration["PdfConfig:MetaData:Title"];
            string author   = Configuration["PdfConfig:MetaData:Author"];
            string creator  = Configuration["PdfConfig:MetaData:Creator"];
            string keywords = Configuration["PdfConfig:MetaData:Keywords"];
            string subject  = Configuration["PdfConfig:MetaData:Subject"];
            // Header Config
            string headerText           = Configuration["PdfConfig:Header:Text"];
            float  headerFontSize       = Convert.ToSingle(Configuration["PdfConfig:Header:FontSize"]);
            string headerFontColor      = Configuration["PdfConfig:Header:FontColor"];
            string headerImageSource    = Configuration["PdfConfig:Header:Image:Source"];
            float  headerImageWidth     = Convert.ToSingle(Configuration["PdfConfig:Header:Image:Width"]);
            float  headerImagePositionX = Convert.ToSingle(Configuration["PdfConfig:Header:Image:Position:Left"]);
            float  headerImagePositionY = Convert.ToSingle(Configuration["PdfConfig:Header:Image:Position:Top"]);
            // Footer Config
            string footerText           = Configuration["PdfConfig:Footer:Text"];
            double footerFontSize       = Convert.ToDouble(Configuration["PdfConfig:Footer:FontSize"]);
            string footerFontColor      = Configuration["PdfConfig:Footer:FontColor"];
            string footerImageSource    = Configuration["PdfConfig:Footer:Image:Source"];
            float  footerImageWidth     = Convert.ToSingle(Configuration["PdfConfig:Footer:Image:Width"]);
            float  footerImagePositionX = Convert.ToSingle(Configuration["PdfConfig:Footer:Image:Position:Left"]);
            float  footerImagePositionY = Convert.ToSingle(Configuration["PdfConfig:Footer:Image:Position:Top"]);
            #endregion

            #region Properties & Setting
            // Configure properties for converter | 配置转换器
            ConverterProperties properties = new ConverterProperties();
            // Resources path, store images/fonts for example | 资源路径, 存放如图片/字体等资源
            string resources = Host.WebRootPath + (osInfo.Platform == PlatformID.Unix ? "/src/font/" : "\\src\\font\\");
            // PDF saved path | 生成的PDF文件存放路径
            string desc = string.Empty;
            if (osInfo.Platform == PlatformID.Unix)
            {
                if (!Directory.Exists(descPath))
                {
                    Directory.CreateDirectory(descPath);
                }
                desc = descPath + (saveName ?? DateTime.Now.ToString("yyyyMMdd-hhmmss-ffff")) + ".pdf";
            }
            else
            {
                descPath = "D:\\Pdf\\";
                if (!Directory.Exists(descPath))
                {
                    Directory.CreateDirectory(descPath);
                }
                desc = descPath + (saveName ?? DateTime.Now.ToString("yyyyMMdd-hhmmss-ffff")) + ".pdf";
            }

            FontProvider fp = new FontProvider();
            // Add Standard fonts libs without chinese support | 添加标准字体库
            // fp.AddStandardPdfFonts();
            fp.AddDirectory(resources);
            properties.SetFontProvider(fp);
            // Set base uri to resource folder | 设置基础uri
            properties.SetBaseUri(resources);

            PdfWriter   writer = new PdfWriter(desc);
            PdfDocument pdfDoc = new PdfDocument(writer);
            // Set PageSize | 设置页面大小
            pdfDoc.SetDefaultPageSize(PageSize.A4);
            // Set Encoding | 设置文本编码方式
            pdfDoc.GetCatalog().SetLang(new PdfString("UTF-8"));

            //Set the document to be tagged | 展示文档标签树
            pdfDoc.SetTagged();
            pdfDoc.GetCatalog().SetViewerPreferences(new PdfViewerPreferences().SetDisplayDocTitle(true));

            //https://developers.itextpdf.com/content/itext-7-examples/converting-html-pdf/pdfhtml-header-and-footer-example
            // create pdf font using custom resources | 自定义字体
            PdfFont sourcehansanscn = PdfFontFactory.CreateFont(resources + fontFamily, PdfEncodings.IDENTITY_H);

            Dictionary <string, object> header = new Dictionary <string, object>()
            {
                { "text", headerText },
                { "fontSize", headerFontSize },
                { "fontColor", headerFontColor },
                { "source", Host.WebRootPath + headerImageSource },
                { "width", headerImageWidth },
                { "left", headerImagePositionX },
                { "top", headerImagePositionY }
            };
            Dictionary <string, object> footer = new Dictionary <string, object>()
            {
                { "text", footerText },
                { "fontSize", footerFontSize },
                { "fontColor", footerFontColor },
                { "source", Host.WebRootPath + footerImageSource },
                { "width", footerImageWidth },
                { "left", footerImagePositionX },
                { "top", footerImagePositionY }
            };
            // Header handler | 页头处理
            PdfHeader headerHandler = new PdfHeader(header, sourcehansanscn);
            // Footer handler | 页脚处理
            PdfFooter footerHandler = new PdfFooter(footer, sourcehansanscn);

            // Assign event-handlers
            pdfDoc.AddEventHandler(PdfDocumentEvent.START_PAGE, headerHandler);
            pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, footerHandler);

            // Setup custom tagworker factory for better tagging of headers | 设置标签处理器
            DefaultTagWorkerFactory tagWorkerFactory = new DefaultTagWorkerFactory();
            properties.SetTagWorkerFactory(tagWorkerFactory);

            // Setup default outline(bookmark) handler | 设置默认大纲(书签)处理器
            // We used the createStandardHandler() method to create a standard handler.
            // This means that pdfHTML will look for <h1>, <h2>, <h3>, <h4>, <h5>, and <h6>.
            // The bookmarks will be created based on the hierarchy of those tags in the HTML file.
            // To enable other tags, read the folllowing article for more details.
            // https://developers.itextpdf.com/content/itext-7-converting-html-pdf-pdfhtml/chapter-4-creating-reports-using-pdfhtml
            OutlineHandler outlineHandler = OutlineHandler.CreateStandardHandler();
            properties.SetOutlineHandler(outlineHandler);

            // Bookmark | 书签
            // https://developers.itextpdf.com/content/itext-7-examples/itext-7-bookmarks-tocs/toc-first-page
            // https://developers.itextpdf.com/content/best-itext-questions-stackoverview/actions-and-annotations/itext7-how-create-hierarchical-bookmarks
            // https://developers.itextpdf.com/content/itext-7-building-blocks/chapter-6-creating-actions-destinations-and-bookmarks
            // https://developers.itextpdf.com/examples/actions-and-annotations/clone-named-destinations
            // PdfOutline outline = null;
            // outline = CreateOutline(outline, pdfDoc, "bookmark", "bookmark");

            // Meta tags | 文档属性标签
            PdfDocumentInfo pdfMetaData = pdfDoc.GetDocumentInfo();
            pdfMetaData.SetTitle(title);
            pdfMetaData.SetAuthor(author);
            pdfMetaData.AddCreationDate();
            pdfMetaData.GetProducer();
            pdfMetaData.SetCreator(creator);
            pdfMetaData.SetKeywords(keywords);
            pdfMetaData.SetSubject(subject);
            #endregion

            // Start convertion | 开始转化
            //Document document =
            //    HtmlConverter.ConvertToDocument(pdfHtmlString, pdfDoc, properties);

            IList <IElement>   elements        = HtmlConverter.ConvertToElements(pdfHtmlString, properties);
            Document           document        = new Document(pdfDoc);
            CJKSplitCharacters splitCharacters = new CJKSplitCharacters();
            document.SetFontProvider(fp);
            document.SetSplitCharacters(splitCharacters);
            document.SetProperty(Property.SPLIT_CHARACTERS, splitCharacters);
            foreach (IElement e in elements)
            {
                try
                {
                    document.Add((AreaBreak)e);
                }
                catch
                {
                    document.Add((IBlockElement)e);
                }
            }

            // Close and release document | 关闭并释放文档资源
            document.Close();

            return(Content("SUCCESS"));
        }