Пример #1
0
        public void ManipulatePdf(string htmlSource, string pdfDest)
        {
            PdfWriter   writer = new PdfWriter(pdfDest);
            PdfDocument pdfDoc = new PdfDocument(writer);

            // Default provider will register standard fonts and free fonts shipped with iText, but not system fonts
            FontProvider provider = new DefaultFontProvider();

            // 1. Register all fonts in a directory
            provider.AddDirectory(FONT_FOLDER);

            // 2. Register a single font by specifying path
            provider.AddFont(FONT1);

            // 3. Use the raw bytes of the font file
            byte[] fontBytes = File.ReadAllBytes(FONT2);
            provider.AddFont(fontBytes);

            // Make sure the provider is used
            ConverterProperties converterProperties = new ConverterProperties()
                                                      // Base URI is required to resolve the path to source files
                                                      .SetBaseUri(SRC)
                                                      .SetFontProvider(provider);

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

            pdfDoc.Close();
        }
Пример #2
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();
            }
Пример #3
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);
        }
Пример #4
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);
        }
Пример #5
0
        public DefaultFontProvider[] GetAvailableFontProviders()
        {
            this.EnsureNotDisposed();

            DefaultFontProvider[] result;

            unsafe {
                NativeMethods.ass_get_available_font_providers(_nativePointer, out var providers, out var size);

                var s = size.ToUInt32();
                var typedProviders = (DefaultFontProvider *)providers;

                Trace.Assert(typedProviders != null);

                result = new DefaultFontProvider[s];

                for (var i = 0; i < s; i += 1)
                {
                    result[i] = typedProviders[i];
                }

                // AllocHGlobal/FreeHGlobal is just a wrapper for GlobalAlloc/GlobalFree (LocalAlloc/LocalFree),
                // which calls HeapAlloc/HeapFree in the end. malloc/free may not work like this; different CRTs
                // (e.g. Cygwin's and VC++'s) may be implemented in different ways. In short, this call does not
                // guarantee correct memory freeing.
                Marshal.FreeHGlobal(providers);
            }

            return(result);
        }
Пример #6
0
        public virtual void TestThatAddedFontIsReleasedAfterConversion()
        {
            // TODO unignore after DEVSIX-3199 is fixed
            String dirName        = "AddedFontIsReleased/";
            String htmlFileName   = "addedFontIsReleased.html";
            String fontFileName   = "NotoSans-Regular.ttf";
            String sourceHtmlFile = sourceFolder + dirName + htmlFileName;
            String sourceFontFile = sourceFolder + dirName + fontFileName;
            String workDir        = destinationFolder + dirName;

            CreateDestinationFolder(workDir);
            String targetPdfFile   = workDir + "target.pdf";
            String workDirFontFile = workDir + fontFileName;

            File.Copy(Path.Combine(sourceFontFile), Path.Combine(workDirFontFile));
            DefaultFontProvider fontProvider = new DefaultFontProvider(true, false, false);

            fontProvider.AddDirectory(workDir);
            ConverterProperties properties = new ConverterProperties().SetBaseUri(sourceFolder).SetFontProvider(fontProvider
                                                                                                                );

            HtmlConverter.ConvertToPdf(new FileInfo(sourceHtmlFile), new FileInfo(targetPdfFile), properties);
            FileInfo resourceToBeRemoved = new FileInfo(workDirFontFile);

            FileUtil.DeleteFile(resourceToBeRemoved);
            NUnit.Framework.Assert.IsFalse(resourceToBeRemoved.Exists);
        }
Пример #7
0
        protected internal override ConverterProperties GetConverterProperties()
        {
            DefaultFontProvider fontProvider = new DefaultFontProvider();

            fontProvider.AddFont(AHEM_FONT_PATH);
            return(new ConverterProperties().SetFontProvider(fontProvider));
        }
Пример #8
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();
        }
Пример #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 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);
        }
Пример #10
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);
        }
Пример #11
0
 public static extern void ass_set_fonts(
     IntPtr renderer,
     [MarshalAs(UnmanagedType.LPStr)][CanBeNull]
     string defaultFont,
     [MarshalAs(UnmanagedType.LPStr)][CanBeNull]
     string defaultFamily,
     DefaultFontProvider fontProvider,
     [MarshalAs(UnmanagedType.LPStr)][CanBeNull]
     string config,
     [MarshalAs(UnmanagedType.Bool)] bool update);
Пример #12
0
        public virtual void ComparatorErrorTest()
        {
            // TODO: DEVSIX-4017 (Combination of default and pdfCalligraph fonts with italic style and '"courier new", courier,
            // monospace' family reproduces comparator exception. Update test after fixing.)
            ConverterProperties properties = new ConverterProperties();
            FontProvider        pro        = new DefaultFontProvider();

            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSansArabic-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSansArabic-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSansGurmukhi-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSansGurmukhi-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSansMyanmar-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSansMyanmar-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSansOriya-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSansOriya-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifBengali-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifBengali-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifDevanagari-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifDevanagari-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifGujarati-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifGujarati-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifHebrew-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifHebrew-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifKannada-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifKannada-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifKhmer-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifKhmer-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifMalayalam-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifMalayalam-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifMyanmar-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifMyanmar-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifTamil-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifTamil-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifTelugu-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifTelugu-Bold.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifThai-Regular.ttf"));
            pro.AddFont(FontProgramFactory.CreateFont(SOURCE_FOLDER + "NotoSerifThai-Bold.ttf"));
            properties.SetFontProvider(pro);
            bool isExceptionThrown = false;

            try {
                HtmlConverter.ConvertToPdf(new FileInfo(SOURCE_FOLDER + "comparatorError.html"), new FileInfo(DESTINATION_FOLDER
                                                                                                              + "comparatorError.pdf"), properties);
            }
            catch (ArgumentException e) {
                NUnit.Framework.Assert.AreEqual("Comparison method violates its general contract!", e.Message);
                isExceptionThrown = true;
            }
            if (!isExceptionThrown)
            {
                NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(DESTINATION_FOLDER + "comparatorError.pdf"
                                                                                 , SOURCE_FOLDER + "cmp_comparatorError.pdf", DESTINATION_FOLDER));
            }
        }
Пример #13
0
        public virtual void TestArialWithHelveticaAsAnAlias()
        {
            String       fileName     = "testArialWithHelveticaAsAnAlias";
            FontProvider fontProvider = new DefaultFontProvider();

            fontProvider.GetFontSet().AddFont(sourceFolder + "FreeSans.ttf", null, "Arial");
            ConverterProperties converterProperties = new ConverterProperties().SetMediaDeviceDescription(new MediaDeviceDescription
                                                                                                              (MediaType.PRINT)).SetFontProvider(fontProvider);

            RunTest(fileName, converterProperties);
        }
Пример #14
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);
        }
Пример #15
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));
        }
Пример #16
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));
        }
Пример #17
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);
        }
Пример #18
0
        public async Task OutputsCorrectNumberFormats(string culture)
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);

            var fontProvider = new DefaultFontProvider();
            var generator    = new SvgAvatarGenerator(fontProvider);

            var bytes = await generator.GenerateAvatar("SX", 512, Rgba32.ParseHex("fff"), Rgba32.ParseHex("000"));

            var xml = Encoding.UTF8.GetString(bytes);

            var control = Input.FromString("<?xml version=\"1.0\" encoding=\"utf-8\"?><svg width=\"512\" height=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"100%\" height=\"100%\" fill=\"#000000\" /><path stroke=\"#FFFFFF\" fill=\"#FFFFFF\" d=\"M254.4875 266.8625L 254.4875 266.8625C 231.84583 260.3542 215.36874 252.35625 205.05624 242.86874L 205.05624 242.86874L 205.05624 242.86874C 194.74374 233.38124 189.5875 221.67084 189.5875 207.7375L 189.5875 207.7375L 189.5875 207.7375C 189.5875 191.97083 195.88957 178.93124 208.49374 168.61874L 208.49374 168.61874L 208.49374 168.61874C 221.09792 158.30624 237.48334 153.15 257.65 153.15L 257.65 153.15L 257.65 153.15C 271.4 153.15 283.66043 155.80832 294.43127 161.125L 294.43127 161.125L 294.43127 161.125C 305.2021 166.44165 313.54376 173.775 319.45624 183.125L 319.45624 183.125L 319.45624 183.125C 325.36877 192.47499 328.325 202.69583 328.325 213.78749L 328.325 213.78749L 301.7875 213.78749L 301.7875 213.78749C 301.7875 201.6875 297.9375 192.17708 290.2375 185.25624L 290.2375 185.25624L 290.2375 185.25624C 282.5375 178.3354 271.675 174.87498 257.65 174.87498L 257.65 174.87498L 257.65 174.87498C 244.63333 174.87498 234.48125 177.73956 227.19376 183.46875L 227.19376 183.46875L 227.19376 183.46875C 219.90625 189.1979 216.2625 197.15 216.2625 207.325L 216.2625 207.325L 216.2625 207.325C 216.2625 215.48334 219.72292 222.38126 226.64375 228.01874L 226.64375 228.01874L 226.64375 228.01874C 233.56459 233.65625 245.34375 238.81248 261.98126 243.48749L 261.98126 243.48749L 261.98126 243.48749C 278.61877 248.16249 291.63544 253.31876 301.03125 258.95624L 301.03125 258.95624L 301.03125 258.95624C 310.42706 264.59375 317.39374 271.17084 321.93127 278.6875L 321.93127 278.6875L 321.93127 278.6875C 326.46875 286.20416 328.7375 295.05 328.7375 305.225L 328.7375 305.225L 328.7375 305.225C 328.7375 321.45 322.4125 334.44376 309.7625 344.20624L 309.7625 344.20624L 309.7625 344.20624C 297.1125 353.96875 280.2 358.85 259.025 358.85L 259.025 358.85L 259.025 358.85C 245.275 358.85 232.44167 356.2146 220.525 350.94376L 220.525 350.94376L 220.525 350.94376C 208.60834 345.6729 199.41875 338.45416 192.95625 329.2875L 192.95625 329.2875L 192.95625 329.2875C 186.49374 320.12085 183.2625 309.71667 183.2625 298.075L 183.2625 298.075L 209.8 298.075L 209.8 298.075C 209.8 310.175 214.26875 319.73126 223.20625 326.74377L 223.20625 326.74377L 223.20625 326.74377C 232.14375 333.75626 244.08334 337.2625 259.025 337.2625L 259.025 337.2625L 259.025 337.2625C 272.95834 337.2625 283.6375 334.42084 291.0625 328.73752L 291.0625 328.73752L 291.0625 328.73752C 298.48752 323.0542 302.2 315.30835 302.2 305.5L 302.2 305.5L 302.2 305.5C 302.2 295.69165 298.7625 288.10626 291.8875 282.74377L 291.8875 282.74377L 291.8875 282.74377C 285.0125 277.38126 272.54584 272.08752 254.4875 266.8625\" /></svg>").Build();
            var test    = Input.FromByteArray(bytes).Build();
            var diff    = new DOMDifferenceEngine();

            diff.DifferenceListener += (comparison, outcome) => {
                Assert.True(false, "found a difference: " + comparison);
            };
            diff.Compare(control, test);
        }
Пример #19
0
        public virtual void BatchConversionTest()
        {
            ConverterProperties properties = new ConverterProperties().SetBaseUri(sourceFolder).SetMediaDeviceDescription
                                                 (new MediaDeviceDescription(MediaType.PRINT));
            FontProvider fontProvider = new DefaultFontProvider(true, false, false);

            fontProvider.AddDirectory(sourceFolder + "fonts/");
            properties.SetFontProvider(fontProvider);
            IHtmlProcessor processor   = new DefaultHtmlProcessor(properties);
            IXmlParser     parser      = new JsoupHtmlParser();
            String         outPdfPath  = destinationFolder + "smashing1.pdf";
            PdfDocument    pdfDocument = new PdfDocument(new PdfWriter(outPdfPath));
            IDocumentNode  doc         = parser.Parse(new FileStream(sourceFolder + "smashing01.html", FileMode.Open, FileAccess.Read
                                                                     ), properties.GetCharset());
            Document document = processor.ProcessDocument(doc, pdfDocument);

            document.Close();
            NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(outPdfPath, sourceFolder + "cmp_smashing1.pdf"
                                                                             , destinationFolder, "diff01_"));
        }
Пример #20
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);
                }
            }
        }
Пример #21
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("转化成功");
        }
Пример #22
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");
            }
        }
Пример #23
0
        public byte[] GenerateHTML(string html)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                PdfWriter   writer = new PdfWriter(ms);//@"D:\Docs\demp.pdf"
                PdfDocument pdfDoc = new PdfDocument(writer);

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

                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(html, pdfDoc, converterProperties);
                HtmlConverter.ConvertToPdf(html, pdfDoc, converterProperties);

                pdfDoc.Close();
                return(ms.ToArray());
            }
        }
Пример #24
0
        public void ManipulatePdf(String htmlSource, String pdfDest, String freeFontsDirectory)
        {
            // In pdfHTML the iText layouting mechanism now works in HTML rendering mode. In order
            // to switch to the iText default rendering mode, you should declare a custom ICssApplierFactory
            // in which to create a custom ICssApplier for the body node. Then set the default rendering mode
            // property for the property container.
            ICssApplierFactory customCssApplierFactory = new DefaultModeCssApplierFactory();

            // Starting from pdfHTML version 3.0.0 the GNU Free Fonts family (e.g. FreeSans) that were shipped together with the pdfHTML distribution
            // are now replaced by Noto fonts. If your HTML file contains characters which are not supported by standard PDF fonts (basically most of the
            // characters except latin script and some of the symbol characters, e.g. cyrillic characters like in this sample) and also if no other fonts
            // are specified explicitly by means of iText `FontProvider` class or CSS `@font-face` rule, then pdfHTML shipped fonts covering a wide range
            // of glyphs are used instead. In order to replicate old behavior, one needs to exclude from `FontProvider` the fonts shipped by default and
            // provide GNU Free Fonts instead. GNU Free Fonts can be found at https://www.gnu.org/software/freefont/.
            FontProvider fontProvider = new DefaultFontProvider(true, false, false);

            fontProvider.AddDirectory(freeFontsDirectory);

            ConverterProperties converterProperties = new ConverterProperties()
                                                      .SetBaseUri(freeFontsDirectory)
                                                      // Try removing registering of custom DefaultModeCssApplierFactory to compare legacy behavior
                                                      // with the newly introduced. You would notice that now lines spacing algorithm is changed:
                                                      // line spacing is considerably smaller and is closer compared to browsers rendering.
                                                      // You would also notice that now single image in a line behaves according to HTML's "noQuirks" mode:
                                                      // there's an additional "spacing" underneath the image which depends on element's `line-height` and
                                                      // `font-size` CSS properties.
                                                      .SetCssApplierFactory(customCssApplierFactory)
                                                      .SetFontProvider(fontProvider);

            // When converting using the method #convertToElements to change the rendering mode you must also
            // use the flag Property.RENDERING_MODE. However it must be added to the elements from the
            // resulting list before adding these elements to the document. Then the elements will be
            // placed in the specified mode.
            HtmlConverter.ConvertToPdf(new FileStream(htmlSource, FileMode.Open, FileAccess.Read),
                                       new FileStream(pdfDest, FileMode.Create), converterProperties);
        }
Пример #25
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);
        }
Пример #26
0
 public static void ass_set_fonts(IntPtr renderer, [CanBeNull] string defaultFont, [CanBeNull] string defaultFamily, DefaultFontProvider fontProvider, [CanBeNull] string config, bool update)
 {
     if (Is64Bit)
     {
         X64.ass_set_fonts(renderer, defaultFont, defaultFamily, fontProvider, config, update);
     }
     else
     {
         X86.ass_set_fonts(renderer, defaultFont, defaultFamily, fontProvider, config, update);
     }
 }