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); }
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(); }
/// <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); }
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); }
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(); }
/// <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); }
/// <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); }
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); }
/// <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); }
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)); }
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)); }
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); }
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(); }
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); }
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); }
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(); }
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); } } }
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("转化成功"); }
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(); }
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"); } }
/// <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); }
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); }
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()); } } }
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")); }