Markdown and PDF Conversion
Starting in 12.0, Foxit PDF SDK supports bidirectional conversion between Markdown and PDF: Md2PDF::ConvertFromMarkdown (Markdown → PDF) and PDF2Md::ConvertToMarkdown (PDF → Markdown). Before use, load the Foxit PDF Conversion SDK dynamic library and ensure you have the corresponding module license.
For complete runnable samples, see examples/simple_demo/md2pdf and examples/simple_demo/pdf2md in the product package. See the API Reference for class and method details.
System requirements
- Platforms: Windows, Linux (Mac / Android headers are not currently exposed)
- Languages: C, C++, Java, C#, Python, Node.js, Go
- License: Markdown → PDF requires the
Md2PDFmodule; PDF → Markdown requires thePDF2Mdmodule - Dependencies: Foxit PDF Conversion SDK dynamic library (for example,
fpdfconversionsdk_win64.dllon Windows,libfpdfconversionsdk.soon Linux)
Markdown to PDF
Typical flow: Library::Initialize → Md2PDF::Initialize(library_path) → configure Md2PDFSettingData → ConvertFromMarkdown → Md2PDF::Release.
Common Md2PDFSettingData fields include page width/height, margins, body font size (base_font_size), custom font path, style JSON path, and whether to embed fonts. When unset, defaults apply (approximately Letter paper size, 72 pt margins, and so on).
c++
using namespace foxit::addon::conversion::md2pdf;
// Assume Library::Initialize has already been called; library_path points to the Conversion SDK dynamic library.
Md2PDF::Initialize(library_path);
Md2PDFSettingData setting_data;
bool ok = Md2PDF::ConvertFromMarkdown(src_md_path, L"", saved_pdf_path, setting_data);
Md2PDF::Release();C
FSDK_Md2PDF_Initialize(library_path);
FSMd2PDFSettingData setting_data;
setting_data.page_width = 612.0f;
setting_data.page_height = 792.0f;
setting_data.margin_top = 72.0f;
setting_data.margin_bottom = 72.0f;
setting_data.margin_left = 72.0f;
setting_data.margin_right = 72.0f;
setting_data.base_font_size = 10.0f;
setting_data.custom_font_path.str = L"";
setting_data.custom_font_path.len = 0;
setting_data.style_config_path.str = L"";
setting_data.style_config_path.len = 0;
setting_data.is_embed_font = FALSE;
FS_BOOL return_value = FALSE;
FSDK_Md2PDF_ConvertFromMarkdown(src_md_path, L"", saved_pdf_path, setting_data, &return_value);
FSDK_Md2PDF_Release();java
Md2PDF.initialize(library_path);
Md2PDFSettingData settingData = new Md2PDFSettingData();
boolean ok = Md2PDF.convertFromMarkdown(srcMdPath, "", savedPdfPath, settingData);
Md2PDF.release();py
Md2PDF.Initialize(library_path)
setting_data = Md2PDFSettingData()
setting_data.page_width = 612.0
setting_data.page_height = 792.0
setting_data.margin_top = 72.0
setting_data.margin_bottom = 72.0
setting_data.margin_left = 72.0
setting_data.margin_right = 72.0
setting_data.base_font_size = 10.0
setting_data.custom_font_path = ""
setting_data.style_config_path = ""
setting_data.is_embed_font = False
ok = Md2PDF.ConvertFromMarkdown(src_md_path, "", saved_pdf_path, setting_data)
Md2PDF.Release()js
const FSDK = require("@foxitsoftware/foxit-pdf-sdk-node");
FSDK.Md2PDF.Initialize(library_path);
let setting_data = new FSDK.Md2PDFSettingData();
setting_data.page_width = 612.0;
setting_data.page_height = 792.0;
setting_data.margin_top = 72.0;
setting_data.margin_bottom = 72.0;
setting_data.margin_left = 72.0;
setting_data.margin_right = 72.0;
setting_data.base_font_size = 10.0;
setting_data.custom_font_path = "";
setting_data.style_config_path = "";
setting_data.is_embed_font = false;
let ok = FSDK.Md2PDF.ConvertFromMarkdown(src_md_path, "", saved_pdf_path, setting_data);
FSDK.Md2PDF.Release();csharp
Md2PDF.Initialize(library_path);
Md2PDFSettingData setting_data = new Md2PDFSettingData();
setting_data.page_width = 612.0f;
setting_data.page_height = 792.0f;
setting_data.margin_top = 72.0f;
setting_data.margin_bottom = 72.0f;
setting_data.margin_left = 72.0f;
setting_data.margin_right = 72.0f;
setting_data.base_font_size = 10.0f;
setting_data.custom_font_path = "";
setting_data.style_config_path = "";
setting_data.is_embed_font = false;
bool ok = Md2PDF.ConvertFromMarkdown(src_md_path, "", saved_pdf_path, setting_data);
Md2PDF.Release();go
fsdk.Md2PDFInitialize(libraryPath)
settingData := fsdk.NewMd2PDFSettingData()
settingData.SetPage_width(612)
settingData.SetPage_height(792)
settingData.SetMargin_top(72)
settingData.SetMargin_bottom(72)
settingData.SetMargin_left(72)
settingData.SetMargin_right(72)
settingData.SetBase_font_size(10)
settingData.SetCustom_font_path("")
settingData.SetStyle_config_path("")
settingData.SetIs_embed_font(false)
ok := fsdk.Md2PDFConvertFromMarkdown(srcMdPath, "", savedPdfPath, settingData)
fsdk.Md2PDFRelease()PDF to Markdown
Typical flow: Library::Initialize → PDF2Md::Initialize(library_path) → configure PDF2MdSettingData → ConvertToMarkdown → PDF2Md::Release.
ConvertToMarkdown can specify an image export subdirectory name (directory name only, without path separators). When empty, the default is <md_basename>_images next to the output Markdown file.
Common PDF2MdSettingData fields:
table_format: export tables as Markdown pipe tables (e_TableFormatMarkdown) or HTML tables (e_TableFormatHTML)include_header_footer: whether to include headers and footersenable_italic/enable_bold: whether to preserve italic / bold markupskip_ocr_pages: whether to skip scanned pages that contain only paths/images (whenfalse, such pages may raise errors)
c++
using namespace foxit::addon::conversion::pdf2md;
PDF2Md::Initialize(library_path);
PDF2MdSettingData setting_data;
bool ok = PDF2Md::ConvertToMarkdown(src_pdf_path, NULL, saved_md_path, NULL, setting_data);
PDF2Md::Release();C
FSDK_PDF2Md_Initialize(library_path);
FSPDF2MdSettingData setting_data;
setting_data.table_format = e_FSTableFormatMarkdown;
setting_data.include_header_footer = FALSE;
setting_data.enable_italic = TRUE;
setting_data.enable_bold = TRUE;
setting_data.skip_ocr_pages = FALSE;
FS_BOOL return_value = FALSE;
FSDK_PDF2Md_ConvertToMarkdown(src_pdf_path, L"", saved_md_path, L"images", setting_data, &return_value);
FSDK_PDF2Md_Release();java
PDF2Md.initialize(library_path);
PDF2MdSettingData settingData = new PDF2MdSettingData();
boolean ok = PDF2Md.convertToMarkdown(srcPdfPath, null, savedMdPath, null, settingData);
PDF2Md.release();py
PDF2Md.Initialize(library_path)
setting_data = PDF2MdSettingData()
setting_data.table_format = PDF2MdSettingData.e_TableFormatMarkdown
setting_data.include_header_footer = False
setting_data.enable_italic = True
setting_data.enable_bold = True
setting_data.skip_ocr_pages = False
ok = PDF2Md.ConvertToMarkdown(src_pdf_path, "", saved_md_path, "images", setting_data)
PDF2Md.Release()js
const FSDK = require("@foxitsoftware/foxit-pdf-sdk-node");
FSDK.PDF2Md.Initialize(library_path);
let setting_data = new FSDK.PDF2MdSettingData();
setting_data.table_format = FSDK.PDF2MdSettingData.e_TableFormatMarkdown;
setting_data.include_header_footer = false;
setting_data.enable_italic = true;
setting_data.enable_bold = true;
setting_data.skip_ocr_pages = false;
let ok = FSDK.PDF2Md.ConvertToMarkdown(src_pdf_path, "", saved_md_path, "images", setting_data);
FSDK.PDF2Md.Release();csharp
PDF2Md.Initialize(library_path);
PDF2MdSettingData setting_data = new PDF2MdSettingData();
setting_data.table_format = PDF2MdSettingData.TableFormat.e_TableFormatMarkdown;
setting_data.include_header_footer = false;
setting_data.enable_italic = true;
setting_data.enable_bold = true;
setting_data.skip_ocr_pages = false;
bool ok = PDF2Md.ConvertToMarkdown(src_pdf_path, "", saved_md_path, "images", setting_data);
PDF2Md.Release();go
fsdk.PDF2MdInitialize(libraryPath)
settingData := fsdk.NewPDF2MdSettingData()
settingData.SetTable_format(fsdk.PDF2MdSettingDataE_TableFormatMarkdown)
settingData.SetInclude_header_footer(false)
settingData.SetEnable_italic(true)
settingData.SetEnable_bold(true)
settingData.SetSkip_ocr_pages(false)
ok := fsdk.PDF2MdConvertToMarkdown(srcPdfPath, "", savedMdPath, "images", settingData)
fsdk.PDF2MdRelease()