public static byte[] ConvertHtmltoPdf(ClientContext context, Microsoft.SharePoint.Client.List documentLibrary, string result, string nameOfTheFile) { using (var msOutput = new MemoryStream()) { using (var stringReader = new StringReader(result)) { using (Document document = new Document()) { var pdfWriter = PdfWriter.GetInstance(document, msOutput); pdfWriter.InitialLeading = 12.5f; document.Open(); var xmlWorkerHelper = XMLWorkerHelper.GetInstance(); var cssResolver = new StyleAttrCSSResolver(); var xmlWorkerFontProvider = new XMLWorkerFontProvider(); //foreach (string font in fonts) //{ // xmlWorkerFontProvider.Register(font); //} var cssAppliers = new CssAppliersImpl(xmlWorkerFontProvider); var htmlContext = new HtmlPipelineContext(cssAppliers); htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); PdfWriterPipeline pdfWriterPipeline = new PdfWriterPipeline(document, pdfWriter); HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, pdfWriterPipeline); CssResolverPipeline cssResolverPipeline = new CssResolverPipeline(cssResolver, htmlPipeline); XMLWorker xmlWorker = new XMLWorker(cssResolverPipeline, true); XMLParser xmlParser = new XMLParser(xmlWorker); xmlParser.Parse(stringReader); } } return(msOutput.ToArray()); } }
private void htmlToPDF(string generatedHTML) { byte[] bytes; StringReader stringReader = new StringReader(generatedHTML); String FONT = "assets/fonts/arial.ttf"; XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); fontImp.Register(FONT); Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); using (MemoryStream memoryStream = new MemoryStream()) { PdfWriter writer = PdfWriter.GetInstance(pdfDoc, memoryStream); pdfDoc.Open(); XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, stringReader); pdfDoc.Close(); bytes = memoryStream.ToArray(); memoryStream.Close(); } var testFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.pdf"); System.IO.File.WriteAllBytes(testFile, bytes); }
protected byte[] RenderHtmlToPDF(string Html) { // http://stackoverflow.com/questions/36180131/using-itextsharp-xmlworker-to-convert-html-to-pdf-and-write-text-vertically // http://stackoverflow.com/questions/20488045/change-default-font-and-fontsize-in-pdf-using-itextsharp Document document = new Document(PageSize.A4, 50f, 30f, 40f, 90f); if (Html.Contains("class=\"landscape\"")) { document.SetPageSize(iTextSharp.text.PageSize.A4.Rotate()); } MemoryStream stream = new MemoryStream(); TextReader reader = new StringReader(Html); PdfWriter writer = PdfWriter.GetInstance(document, stream); document.AddTitle("muster ag"); XMLWorkerFontProvider fonts = new XMLWorkerFontProvider(); CssAppliers appliers = new CssAppliersImpl(fonts); HtmlPipelineContext context = new HtmlPipelineContext(appliers); context.SetAcceptUnknown(true); context.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); PdfWriterPipeline pdfpipeline = new PdfWriterPipeline(document, writer); HtmlPipeline htmlpipeline = new HtmlPipeline(context, pdfpipeline); var resolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false); resolver.AddCssFile(Server.MapPath("~/Content/inv.pdf.css"), true); CssResolverPipeline csspipeline = new CssResolverPipeline(resolver, htmlpipeline); XMLWorker worker = new XMLWorker(csspipeline, true); XMLParser parser = new XMLParser(worker); document.Open(); parser.Parse(reader); worker.Close(); document.Close(); return(stream.ToArray()); }
private void CreatePdfFromHtmlString(string HtmlTemplate, string DestinationPath) { Document doc = new Document(); var fontFile = Server.MapPath("~/fonts/ARIALUNI.ttf"); try { var FS = new System.IO.FileStream(DestinationPath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); var document = new Document(); var writer = PdfWriter.GetInstance(document, FS); document.Open(); var cssResolver = new StyleAttrCSSResolver(); var fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); fontProvider.Register(fontFile); var cssAppliers = new CssAppliersImpl(fontProvider); var htmlContext = new HtmlPipelineContext(cssAppliers); htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); var pdf = new PdfWriterPipeline(document, writer); var html = new HtmlPipeline(htmlContext, pdf); var css = new CssResolverPipeline(cssResolver, html); var worker = new XMLWorker(css, true); var p = new XMLParser(worker); var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(HtmlTemplate)); var sr = new StreamReader(ms); p.Parse(sr); document.Close(); } catch (Exception e) { throw; } }
/// <summary> /// Creates a <see cref="PdfTable"/> object from specified <b>HTML</b> code. /// </summary> /// <param name="html">A reference to input html code to convert.</param> /// <param name="css">A reference to css styles to apply.</param> /// <param name="config">Table configuration reference.</param> /// <returns> /// A new <see cref="PdfPTable"/> that contains a /// </returns> public static PdfTable CreateFromHtml(string html, string css = default, PdfTableConfig config = null) { var hasCss = !string.IsNullOrEmpty(css); if (!hasCss) { css = " "; } // css StyleAttrCSSResolver cssResolver = new StyleAttrCSSResolver(); ICssFile cssFile = XMLWorkerHelper.GetCSS(css.AsStream()); cssResolver.AddCss(cssFile); // html XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts))); CssAppliers cssAppliers = new CssAppliersImpl(fontProvider); HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers); htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); // pipelines ElementList elements = new ElementList(); ElementHandlerPipeline pdf = new ElementHandlerPipeline(elements, null); HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, pdf); CssResolverPipeline cssPipeline = new CssResolverPipeline(cssResolver, htmlPipeline); // XML Worker XMLWorker worker = new XMLWorker(cssPipeline, true); XMLParser parser = new XMLParser(worker, Encoding.UTF8); parser.Parse(html.AsStream(Encoding.UTF8)); PdfPTable nativeTable = (PdfPTable)elements[0]; return(new PdfTable(nativeTable, config)); }
public async Task <Guid> SubmitWorkItem(HTMLtoPDFJob job) { iTextSharp.text.Rectangle pageSize = PageSize.A4; if (job == null) { throw new Exception("html to pdf job is null"); } switch (job.paperSize) { case PaperSize.a1: pageSize = PageSize.A1; break; case PaperSize.a2: pageSize = PageSize.A2; break; case PaperSize.a3: pageSize = PageSize.A3; break; case PaperSize.a4: pageSize = PageSize.A4; break; case PaperSize.a5: pageSize = PageSize.A5; break; case PaperSize.a6: pageSize = PageSize.A6; break; case PaperSize.a7: pageSize = PageSize.A7; break; case PaperSize.a8: pageSize = PageSize.A8; break; case PaperSize.a9: pageSize = PageSize.A9; break; case PaperSize.letter: pageSize = PageSize.LETTER; break; default: pageSize = PageSize.A4; break; } try { _context.Jobs.Add(job); _context.SaveChanges(); } catch (DbEntityValidationException ex) { string errorMessages = string.Join("; ", ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.ErrorMessage)); throw new DbEntityValidationException(errorMessages); } var task = Task.Factory.StartNew(t => { HTMLtoPDFJob ebJob = (HTMLtoPDFJob)t; string htmlStream = ""; string outputFileName = Guid.NewGuid().ToString("N") + ".pdf"; string tempfile = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); try { File.WriteAllBytes(tempfile + ".html", job.FileContent); htmlStream = new StreamReader(tempfile + ".html").ReadToEnd(); if (!string.IsNullOrEmpty(htmlStream)) { var fsOut = new MemoryStream(); var stringReader = new StringReader(htmlStream); Document document = new Document(pageSize, 5, 5, 5, 5); //Document setup var pdfWriter = PdfAWriter.GetInstance(document, fsOut); pdfWriter.SetTagged(); pdfWriter.SetPdfVersion(PdfWriter.PDF_VERSION_1_7); pdfWriter.CreateXmpMetadata(); pdfWriter.AddViewerPreference(PdfName.DISPLAYDOCTITLE, PdfBoolean.PDFTRUE); pdfWriter.Info.Put(new PdfName("Producer"), new PdfString("©" + DateTime.Now.Year.ToString() + " Robobraille.org")); //PDF/A-1A Conformance //pdfWriter = PdfAWriter.GetInstance(document, fsOut, PdfAConformanceLevel.PDF_A_1A); document.Open(); document.AddCreationDate(); //Custom tag processor var tagProcessors = (DefaultTagProcessorFactory)Tags.GetHtmlTagProcessorFactory(); tagProcessors.AddProcessor(HTML.Tag.HTML, new HTMLTagProcessor(document)); tagProcessors.AddProcessor(HTML.Tag.TITLE, new HTMLTagProcessor(document)); tagProcessors.AddProcessor(HTML.Tag.TABLE, new TableTagProcessor()); tagProcessors.AddProcessor(HTML.Tag.TH, new THTagProcessor()); string colorProfilePath = null; string defaultCSSPath = null; try { colorProfilePath = Path.Combine(HttpRuntime.AppDomainAppPath, "App_Data/colors/sRGB.profile"); defaultCSSPath = Path.Combine(HttpRuntime.AppDomainAppPath, "App_Data/css/default.css"); } catch (Exception e) { colorProfilePath = Path.Combine(ConfigurationManager.AppSettings.Get("ProjectDirectory"), "App_Data/colors/sRGB.profile"); defaultCSSPath = Path.Combine(ConfigurationManager.AppSettings.Get("ProjectDirectory"), "App_Data/css/default.css"); } //Setup color profile var cssResolver = new StyleAttrCSSResolver(); if (colorProfilePath != null && defaultCSSPath != null) { ICC_Profile icc = ICC_Profile.GetInstance(new FileStream(colorProfilePath, FileMode.Open, FileAccess.Read)); pdfWriter.SetOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); var xmlWorkerHelper = XMLWorkerHelper.GetInstance(); cssResolver.AddCssFile(defaultCSSPath, true);// CSS with default style for all converted docs } //Register system fonts var xmlWorkerFontProvider = new XMLWorkerFontProvider(); Environment.SpecialFolder specialFolder = Environment.SpecialFolder.Fonts; string path = Environment.GetFolderPath(specialFolder); DirectoryInfo directoryInfo = new DirectoryInfo(path); FileInfo[] fontFiles = directoryInfo.GetFiles(); foreach (var fontFile in fontFiles) { if (fontFile.Extension == ".ttf") { xmlWorkerFontProvider.Register(fontFile.FullName); } } //HTML & CSS parsing var cssAppliers = new CssAppliersImpl(xmlWorkerFontProvider); var htmlContext = new HtmlPipelineContext(cssAppliers); htmlContext.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(tagProcessors); PdfWriterPipeline pdfWriterPipeline = new PdfWriterPipeline(document, pdfWriter); HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, pdfWriterPipeline); CssResolverPipeline cssResolverPipeline = new CssResolverPipeline(cssResolver, htmlPipeline); XMLWorker xmlWorker = new XMLWorker(cssResolverPipeline, true); XMLParser xmlParser = new XMLParser(xmlWorker); xmlParser.Parse(stringReader); document.Close(); //Data as byte array byte[] fileData = fsOut.ToArray(); try { string mime = "application/pdf"; string fileExtension = ".pdf"; ebJob.DownloadCounter = 0; ebJob.ResultFileExtension = fileExtension; ebJob.ResultMimeType = mime; ebJob.ResultContent = fileData; ebJob.Status = JobStatus.Done; ebJob.FinishTime = DateTime.Now; _context.Jobs.Attach(ebJob); _context.Entry(job).State = EntityState.Modified; _context.SaveChanges(); } catch (Exception ex) { RoboBrailleProcessor.SetJobFaulted(job, _context); throw ex; } } else { RoboBrailleProcessor.SetJobFaulted(job, _context); //Error No HTML file to convert throw new Exception("Error No HTML file to convert"); } } catch (Exception e) { RoboBrailleProcessor.SetJobFaulted(job, _context); //ignore throw e; } }, job); return(job.Id); }
public static void Convert(HtmlToPdfModel model) { try { if (model == null) { return; } Byte[] bytes; //Boilerplate iTextSharp setup here //Create a stream that we can write to, in this case a MemoryStream using (var stream = new MemoryStream()) { //Create an iTextSharp Document which is an abstraction of a PDF but **NOT** a PDF using (var doc = new Document()) { //Create a writer that's bound to our PDF abstraction and our stream using (var writer = PdfWriter.GetInstance(doc, stream)) { //Open the document for writing doc.Open(); //In order to read CSS as a string we need to switch to a different constructor //that takes Streams instead of TextReaders. //Below we convert the strings into UTF8 byte array and wrap those in MemoryStreams using (var cssStream = new MemoryStream(Encoding.UTF8.GetBytes(model.CSS))) { using (var htmlStream = new MemoryStream(Encoding.UTF8.GetBytes(model.HTML))) { var fontProvider = new XMLWorkerFontProvider(); if (!string.IsNullOrEmpty(model.FontPath) && !string.IsNullOrEmpty(model.FontName)) { fontProvider.Register(model.FontPath, model.FontName); //Parse the HTML with css font-family XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, htmlStream, cssStream, Encoding.UTF8, fontProvider); } else { //Parse the HTML without css font-family XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, htmlStream, cssStream); } } } doc.Close(); } } //After all of the PDF "stuff" above is done and closed but **before** we //close the MemoryStream, grab all of the active bytes from the stream bytes = stream.ToArray(); } //Now we just need to do something with those bytes. //Here I'm writing them to disk but if you were in ASP.Net you might Response.BinaryWrite() them. //You could also write the bytes to a database in a varbinary() column (but please don't) or you //could pass them to another function for further PDF processing. // use this line on Windows version //File.WriteAllBytes(model.OutputPath, bytes); // use these lines on Mac version string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "data"); path = Path.Combine(path, "test.pdf"); File.WriteAllBytes(path, bytes); } catch (Exception e) { throw e; } }