Skip to content

HTML 转 PDF 功能指南

在数字化工作流程中,直接打印或存档内容丰富的 HTML 网页或大型 HTML 文件往往效率低下且效果不佳。福昕 PDF SDK 提供了强大的 API 接口,旨在解决这一难题,支持将在线网页或本地 HTML 文件高效、精准地转换为 PDF 文档,广泛应用于发票、报告等场景,从而简化打印和长期存档流程。更重要的是,转换过程中,福昕 PDF SDK 能够基于 HTML 结构智能创建并添加 PDF 标签,显著提升 PDF 文档的语义化和可访问性。

核心优势:

  • 卓越的兼容性: 全面支持 HTML5、CSS3 和 JavaScript,确保转换结果的精确度和完整性,最大程度还原原始网页的视觉效果和数据结构。
  • 跨平台支持: 自 7.6 版本起,支持在 Linux 平台上进行 HTML 到 PDF 的转换,满足跨平台开发需求。请注意,Linux 环境下,HTML 转 PDF 引擎依赖于 libnss 3.22 版本。
  • 灵活的数据处理: 自 8.1 版本起,支持以文件流的形式输出 HTML2PDF 转换后的文件,便于开发者集成到各类实时数据处理应用中。

快速上手:

开发者可通过查阅详细的 HTML 转 PDF 示例配置与运行指南 ,快速了解配置步骤和运行示例,轻松掌握该功能的使用方法。

代码示例:

以下代码演示如何调用相关接口实现 HTML 转 PDF 功能。

使用 Html2PDF API

c++
#include "include/addon/conversion/fs_convert.h"

foxit::addon::conversion::HTML2PDFSettingData pdf_setting_data;
pdf_setting_data.is_convert_link = true;
pdf_setting_data.is_generate_tag = true;
pdf_setting_data.to_generate_bookmarks = true;
pdf_setting_data.rotate_degrees = foxit::common::e_Rotation0;
pdf_setting_data.page_height = 640;
pdf_setting_data.page_width = 900;
pdf_setting_data.page_mode = foxit::addon::conversion::HTML2PDFSettingData::e_PageModeSinglePage;
pdf_setting_data.scaling_mode = foxit::addon::conversion::HTML2PDFSettingData::e_ScalingModeScale;
pdf_setting_data.to_print_background = true;
pdf_setting_data.to_optimize_tag_tree = false;
pdf_setting_data.media_style = foxit::addon::conversion::HTML2PDFSettingData::e_MediaStyleScreen;
...

foxit::addon::conversion::Convert::FromHTML(url_or_html, engine_path, cookies_path, pdf_setting_data, output_path, time_out);
C
#include "include/fs_basictypes_c.h"
#include "include/fs_convert_c.h"

FSHTML2PDFSettingData pdf_setting_data;
pdf_setting_data.is_convert_link = true;
pdf_setting_data.is_generate_tag = true;
pdf_setting_data.to_generate_bookmarks = true;
pdf_setting_data.rotate_degrees = 0;
pdf_setting_data.page_height = 640;
pdf_setting_data.page_width = 900;
pdf_setting_data.page_mode = e_FSPageModeSinglePage;
pdf_setting_data.scaling_mode = e_FSScalingModeScale;
pdf_setting_data.to_print_background = true;
pdf_setting_data.to_optimize_tag_tree = false;
pdf_setting_data.media_style = e_FSMediaStyleScreen;
...

FSDK_Convert_FromHTML(url_or_html, engine_path, cookies_path, pdf_setting_data, output_path, time_out);
java
import com.foxit.sdk.addon.conversion.HTML2PDFSettingData;

com.foxit.sdk.addon.conversion.HTML2PDFSettingData pdf_setting_data = new com.foxit.sdk.addon.conversion.HTML2PDFSettingData();              
pdf_setting_data.setIs_convert_link(true);
pdf_setting_data.setIs_generate_tag(true);
pdf_setting_data.setTo_generate_bookmarks(true);
pdf_setting_data.setRotate_degrees(0);   
pdf_setting_data.setPage_width(900);
pdf_setting_data.setPage_height(640);  
pdf_setting_data.setPage_mode(HTML2PDFSettingData.e_PageModeSinglePage);
pdf_setting_data.setScaling_mode(HTML2PDFSettingData.e_ScalingModeScale);      
pdf_setting_data.setTo_print_background(true);
pdf_setting_data.setTo_optimize_tag_tree(false);
pdf_setting_data.setMedia_style(HTML2PDFSettingData.e_MediaStyleScreen);  
...

com.foxit.sdk.addon.conversion.Convert.fromHTML(url_or_html, engine_path, cookies_path, pdf_setting_data, output_pdf_path, timeout);
py
import sys
import site

if sys.version_info.major == 2:
    _PYTHON2_ = True
else:
    _PYTHON2_ = False

if _PYTHON2_:
    # replace with the python2 lib path
    site.addsitedir(‘../../../’)
    from FoxitPDFSDKPython2 import *
else:
    from FoxitPDFSDKPython3 import *

...
pdf_setting_data = HTML2PDFSettingData()
pdf_setting_data.is_convert_link = True
pdf_setting_data.is_generate_tag = True
pdf_setting_data.to_generate_bookmarks = True
pdf_setting_data.rotate_degrees = e_Rotation0
pdf_setting_data.page_height = 640
pdf_setting_data.page_width = 900
pdf_setting_data.page_mode = HTML2PDFSettingData.e_PageModeSinglePage
pdf_setting_data.scaling_mode = HTML2PDFSettingData.e_ScalingModeScale
pdf_setting_data.to_print_background = True
pdf_setting_data.to_optimize_tag_tree = False
pdf_setting_data.media_style = HTML2PDFSettingData.e_MediaStyleScreen
...

Convert.FromHTML(url_or_html, engine_path, cookies_path, pdf_setting_data, output_path, time_out)
objc
#include "FSPDFObjC.h"

FSHTML2PDFSettingData *pdf_setting_data=[FSHTML2PDFSettingData new];
pdf_setting_data.is_convert_link = true;
pdf_setting_data.is_generate_tag = true;
pdf_setting_data.to_generate_bookmarks = true;
pdf_setting_data.rotate_degrees = 0;
pdf_setting_data.page_height = 640;
pdf_setting_data.page_width = 900;
pdf_setting_data.page_mode = FSHTML2PDFSettingDataPageModeSinglePage;
pdf_setting_data.scaling_mode = FSHTML2PDFSettingDataScalingModeScale;
pdf_setting_data.to_print_background = true;
pdf_setting_data.to_optimize_tag_tree = false;
pdf_setting_data.media_style = FSHTML2PDFSettingDataMediaStyleScreen;
...
    
[FSConvert fromHTML:url_or_html engine_path:engine_path cookies_path:cookies_path setting_data:pdf_setting_data saved_pdf_path:output_file_path timeout:time_out];
js
const FSDK = require("@foxitsoftware/foxit-pdf-sdk-node");

...
let pdf_setting_data = new FSDK.HTML2PDFSettingData();
pdf_setting_data.is_convert_link = true;
pdf_setting_data.is_generate_tag = true;
pdf_setting_data.to_generate_bookmarks = true;
pdf_setting_data.rotate_degrees = FSDK.e_Rotation0;
pdf_setting_data.page_height = 640;
pdf_setting_data.page_width = 900;
pdf_setting_data.page_mode = FSDK.HTML2PDFSettingData.e_PageModeSinglePage;
pdf_setting_data.scaling_mode = FSDK.HTML2PDFSettingData.e_ScalingModeScale;
pdf_setting_data.to_print_background = true;
pdf_setting_data.to_optimize_tag_tree = false;
pdf_setting_data.media_style = FSDK.HTML2PDFSettingData.e_MediaStyleScreen;
...

FSDK.Convert.FromHTML(url_or_html, engine_path, cookies_path, pdf_setting_data, output_file_path, time_out);
csharp
using foxit;

foxit.addon.conversion.HTML2PDFSettingData pdf_setting_data = new foxit.addon.conversion.HTML2PDFSettingData();
pdf_setting_data.is_convert_link = true;
pdf_setting_data.is_generate_tag = true;
pdf_setting_data.to_generate_bookmarks = true;
pdf_setting_data.rotate_degrees = 0;
pdf_setting_data.page_height = 640;
pdf_setting_data.page_width = 900;
pdf_setting_data.page_mode = foxit.addon.conversion.HTML2PDFSettingData.HTML2PDFPageMode.e_PageModeSinglePage;
pdf_setting_data.scaling_mode = foxit.addon.conversion.HTML2PDFSettingData.HTML2PDFScaleMode.e_ScalingModeScale;
pdf_setting_data.to_print_background = true;
pdf_setting_data.to_optimize_tag_tree = false;
pdf_setting_data.media_style = foxit.addon.conversion.HTML2PDFSettingData.HTML2PDFMediaStyle.e_MediaStyleScreen;
...

foxit.addon.conversion.Convert.FromHTML(url_or_html, engine_path, cookies_path, pdf_setting_data, output_path, time_out);

从 stream 中获取 HTML 数据并将其转换为 PDF 文件

以 Java 开发语言为例进行说明:

  1. 定义一个继承自 FileReaderCallback 的 FileRead 类,用于从 stream 或内存中获取 html 数据。并定义一个继承自 FileWriterCallback 的 FileWriter 类,用于文件写入。关于 FileRead 和 FileWriter 类的实现,请参考 \examples\simple_demo\html2pdf 文件夹中的 html2pdf demo。
  2. 从 stream 中获取 html 数据并设置与源 html 相关的资源。
  3. 调用 com.foxit.sdk.addon.conversion.Convert.fromHTML 函数将其转换为 PDF 文件。
c++
#include "include/common/fs_common.h"
#include "include/pdf/fs_pdfdoc.h"
#include "include/addon/conversion/fs_convert.h"


// get HTML data from stream
if (isfilestreamload) {
   try {
     foxit::addon::conversion::HTML2PDFSettingData pdf_setting_data;
     pdf_setting_data.page_height = 650;
     pdf_setting_data.page_width = 950;
     pdf_setting_data.is_to_page_scale = false;
     pdf_setting_data.page_margin = RectF(18, 18, 18, 18);
     pdf_setting_data.is_convert_link = true;
     pdf_setting_data.rotate_degrees = foxit::common::e_Rotation0;
     pdf_setting_data.is_generate_tag = true;

     foxit::addon::conversion::HTML2PDFSettingData::HTML2PDFPageMode mode =
     foxit::addon::conversion::HTML2PDFSettingData::e_PageModeSinglePage;
     pdf_setting_data.to_generate_bookmarks = true;
     foxit::addon::conversion::HTML2PDFSettingData::HTML2PDFScalingMode scale =
     foxit::addon::conversion::HTML2PDFSettingData::e_ScalingModeNone;
     pdf_setting_data.encoding_format =            
     foxit::addon::conversion::HTML2PDFSettingData::e_EncodingFormatDefault;
     pdf_setting_data.to_render_images = true;
     pdf_setting_data.to_remove_underline_for_link = false;
     pdf_setting_data.to_set_headerfooter = false;
     pdf_setting_data.headerfooter_title = L"";
     pdf_setting_data.headerfooter_url = L"";
     pdf_setting_data.bookmark_root_name = L"abcde";
     pdf_setting_data.to_resize_objects = true;
     pdf_setting_data.to_print_background = false;
     pdf_setting_data.to_optimize_tag_tree = false;
     pdf_setting_data.media_style = foxit::addon::conversion::HTML2PDFSettingData::e_MediaStyleScreen;
     pdf_setting_data.to_load_active_content = false;
     WString cookies = L"";
     WString output_path = output_directory + L"html2pdf_filestream_result.pdf";
     FileWriter* filewrite = new FileWriter();
     filewrite->LoadFile(String::FromUnicode(output_path));
     // "htmlfile" is the path of the html file to be loaded. For example: "C:/aaa.html". The method of "FromHTML" will load this file as a stream.
     WString htmlfile = L"";
     FileReader* filereader = new FileReader();
     filereader->LoadFile(htmlfile);

     foxit::addon::conversion::HTML2PDFRelatedResourceArray html2PDFRelatedResourceArray;
     foxit::addon::conversion::HTML2PDFRelatedResource html2PDFRelatedResource;

     //"htmlfilepng" is the path of the png resource file to be loaded. For example: "C:/aaa.png". set "htmlfilepng" in the related_resource_file of HTML2PDFRelatedResource.
     WString htmlfilepng = L"";
     FileReader* filereader1 = new FileReader();
     filereader1->LoadFile(htmlfilepng);
     html2PDFRelatedResource.related_resource_file = filereader1;
     //"relativefilepath" is  the resource file's relative path. For example: "./aaa.png".
     WString relativefilepath = L"";
     html2PDFRelatedResource.resource_file_relative_path = relativefilepath;
     html2PDFRelatedResourceArray.Add(html2PDFRelatedResource);

     foxit::addon::conversion::Convert::FromHTML(filereader, html2PDFRelatedResourceArray, engine_path,       
     NULL, pdf_setting_data, filewrite, 30);
     cout << "Convert HTML to PDF successfully by filestream." << endl;
   } catch (const Exception& e) {
     cout << e.GetMessage() << endl;
     err_ret = 1;
   } catch (...) {
      cout << "Unknown Exception" << endl;
      err_ret = 1;
   }
C
# include "include/fs_basictypes_c.h"
# include "include/fs_common_c.h"
# include "include/fs_pdfdoc_c.h"
# include "include/fs_convert_c.h"

....
// Get HTML data from stream
if (isfilestreamload)
{
    FSHTML2PDFSettingData pdf_setting_data;
    pdf_setting_data.page_height = 650;
    pdf_setting_data.page_width = 950;
    pdf_setting_data.is_to_page_scale = false;
    FSRectF rectf;
    rectf.left = 18;
    rectf.bottom = 18;
    rectf.right = 18;
    rectf.top = 18;
    pdf_setting_data.page_margin = rectf;
    pdf_setting_data.is_convert_link = true;
    pdf_setting_data.rotate_degrees = e_FSRotation0;
    pdf_setting_data.is_generate_tag = true;
    pdf_setting_data.page_mode = e_FSPageModeSinglePage;
    pdf_setting_data.to_generate_bookmarks = true;
    pdf_setting_data.scaling_mode = e_FSScalingModeNone;
    pdf_setting_data.encoding_format = e_FSEncodingFormatDefault;
    pdf_setting_data.to_render_images = true;
    pdf_setting_data.to_remove_underline_for_link = false;
    pdf_setting_data.to_set_headerfooter = false;
    pdf_setting_data.headerfooter_title.str = L"";
    pdf_setting_data.headerfooter_title.len = 0;
    pdf_setting_data.headerfooter_url.str = L"";
    pdf_setting_data.bookmark_root_name.str = L"abcde";
    pdf_setting_data.bookmark_root_name.len = wcslen(L"abcde");
    pdf_setting_data.to_resize_objects = true;
    pdf_setting_data.to_print_background = false;
    pdf_setting_data.to_optimize_tag_tree = false;
    pdf_setting_data.media_style = e_FSMediaStyleScreen;
    pdf_setting_data.to_load_active_content = false;
const wchar_t* cookies = L"";
FILE* filepng = NULL;
FILE* file = NULL;
FILE* file_writer = NULL;
wchar_t output_file[MAX_FILE_PATH];
    swprintf_s(output_file, MAX_FILE_PATH, L"%lshtml2pdf_filestream_result.pdf", output_directory); 
    _wfopen_s(&file_writer, output_file, L"w+b");
    filewritercallback->user_data = filewritercallback;
    filewritercallback->Flush = gFlushWriter;
    filewritercallback->GetSize = gGetSizeWriter;
    filewritercallback->WriteBlock = gWriteBlockWriter;
    filewritercallback->Release = gReleaseWriter;
    // "htmlfile" is the path of the html file to be loaded. For example: "C:/aaa.html". The method of "FromHTML" will load this file as a stream.
    const wchar_t* htmlfile = L"";
    _wfopen_s(&file, htmlfile, L"rb");
    filereadercallback->user_data = filereadercallback;
    filereadercallback->GetSize = gGetSize;
    filereadercallback->ReadBlock = gReadBlock;
filereadercallback->Release = gRelease;
FSHTML2PDFRelatedResource html2PDFRelatedResource[1];

// “htmlfilepng” is the path of the png resource file to be loaded. For example: “C:/aaa.png”. set it in the related_resource_file of HTML2PDFRelatedResource.
const wchar_t* htmlfilepng = L””;
    filereadercallbackpng->user_data = filereadercallbackpng;
filereadercallbackpng->GetSize = gGetSizePng;
filereadercallbackpng->ReadBlock = gReadBlockPng;
filereadercallbackpng->Release = gReleasePng;
    _wfopen_s(&filepng, htmlfilepng, L”rb”); 
    html2PDFRelatedResource[0].related_resource_file = (FSReaderCallback*)filereader1;

    //"relativefilepath" is the resource file's relative path. For example: "./aaa.png".
    const char_t* relativefilepath = "";
    size_t convertedChars = 0;
    const char_t* curLocale = setlocale(LC_ALL, NULL);
    setlocale(LC_ALL, "chs");
    const char* source = relativefilepath;
    char_num = sizeof(char)* strlen(relativefilepath) + 1;
    desthtmlfilepng = malloc(sizeof(wchar_t) * char_num);
    mbstowcs_s(&converted_chars, desthtmlfilepng, char_num, source, _TRUNCATE);

    html2PDFRelatedResource[0].resource_file_relative_path.str = desthtmlfilepng;
    html2PDFRelatedResource[0].resource_file_relative_path.len = wcslen(desthtmlfilepng);
    FSErrorCode error_code = FSDK_Convert_FromHTML2(filereader, html2PDFRelatedResource, 1, engine_path, NULL, pdf_setting_data, filewrite, 15);
    free(desthtmlfilepng);
java
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.addon.conversion.HTML2PDFSettingData;
import com.foxit.sdk.common.fxcrt.FileReaderCallback;
import com.foxit.sdk.common.fxcrt.FileWriterCallback;
import com.foxit.sdk.addon.conversion.HTML2PDFRelatedResourceArray;
import com.foxit.sdk.addon.conversion.HTML2PDFRelatedResource;
 
com.foxit.sdk.addon.conversion.HTML2PDFSettingData pdf_setting_data=new com.foxit.sdk.addon.conversion.HTML2PDFSettingData();  
pdf_setting_data.setPage_height(650);
pdf_setting_data.setPage_width(950);
pdf_setting_data.setIs_to_page_scale(false);
pdf_setting_data.setPage_margin(new RectF(18, 18, 18, 18));
pdf_setting_data.setIs_convert_link(true);
pdf_setting_data.setRotate_degrees(0);
pdf_setting_data.setIs_generate_tag(true);
pdf_setting_data.setPage_mode(HTML2PDFSettingData.e_PageModeSinglePage);
pdf_setting_data.setScaling_mode(HTML2PDFSettingData.e_ScalingModeScale);
pdf_setting_data.setTo_generate_bookmarks(true);
pdf_setting_data.setEncoding_format(0);
pdf_setting_data.setTo_render_images(true);
pdf_setting_data.setTo_remove_underline_for_link(false);
pdf_setting_data.setTo_set_headerfooter(false);
pdf_setting_data.setHeaderfooter_title("");
pdf_setting_data.setHeaderfooter_url("");
pdf_setting_data.setBookmark_root_name("abcde");
pdf_setting_data.setTo_resize_objects(true);
pdf_setting_data.setTo_print_background(false);
pdf_setting_data.setTo_optimize_tag_tree(false);
pdf_setting_data.setMedia_style(0);
pdf_setting_data.getTo_load_active_content();
String output_path = output_directory + "html2pdf_filestream_result.pdf";
FoxitFileWriter filewrite = new FoxitFileWriter();
filewrite.LoadFile(output_path);
// "htmlfile" is the path of the html file to be loaded. For example: "C:/aaa.html". The method of "FromHTML" will load this file as a stream.
String htmlfile = "";
FileRead filereader = new FileRead();
filereader.loadFile(htmlfile,false);
 
//"htmlfilepng" is the path of the png resource file to be loaded. For example: "C:/aaa.png". set "htmlfilepng" in the related_resource_file of HTML2PDFRelatedResource.
String htmlfilepng ="";
FileRead filereader1 = new FileRead();
filereader1.loadFile(htmlfilepng,false);
//"relativefilepath" is  the resource file's relative path. For example: "./aaa.png".
String relativefilepath = "";
com.foxit.sdk.addon.conversion.HTML2PDFRelatedResourceArray html2PDFRelatedResourceArray = new com.foxit.sdk.addon.conversion.HTML2PDFRelatedResourceArray();
com.foxit.sdk.addon.conversion.HTML2PDFRelatedResource html2PDFRelatedResource = new com.foxit.sdk.addon.conversion.HTML2PDFRelatedResource(filereader1,relativefilepath);
 
html2PDFRelatedResourceArray.add(html2PDFRelatedResource);
com.foxit.sdk.addon.conversion.Convert.fromHTML(filereader, html2PDFRelatedResourceArray, engine_path, null,
                                            pdf_setting_data, filewrite, 30);
System.out.println("Convert HTML to PDF successfully by filestream!");
py
import sys
import site

if sys.version_info.major == 2:
    _PYTHON2_ = True
else:
    _PYTHON2_ = False
 
if _PYTHON2_:
    site.addsitedir('../../../')
    from FoxitPDFSDKPython2 import *
else:
    from FoxitPDFSDKPython3 import *
 
pdf_setting_data = HTML2PDFSettingData()
pdf_setting_data.is_convert_link = True
pdf_setting_data.is_generate_tag = True
pdf_setting_data.to_generate_bookmarks = True
pdf_setting_data.rotate_degrees = e_Rotation0
pdf_setting_data.page_height = 640
pdf_setting_data.page_width = 900
pdf_setting_data.page_mode = HTML2PDFSettingData.e_PageModeSinglePage
pdf_setting_data.scaling_mode = HTML2PDFSettingData.e_ScalingModeScale
 
pdf_setting_data = HTML2PDFSettingData()
pdf_setting_data.page_height = 650
pdf_setting_data.page_width = 950
pdf_setting_data.is_to_page_scale = False
pdf_setting_data.page_margin = RectF(18, 18, 18, 18)
pdf_setting_data.is_convert_link = True
pdf_setting_data.rotate_degrees = e_Rotation0
pdf_setting_data.is_generate_tag = True
pdf_setting_data.page_mode = HTML2PDFSettingData.e_PageModeSinglePage
pdf_setting_data.scaling_mode = HTML2PDFSettingData.e_ScalingModeScale
pdf_setting_data.to_generate_bookmarks = True
pdf_setting_data.encoding_format = 0
pdf_setting_data.to_render_images = True
pdf_setting_data.to_remove_underline_for_link = False
pdf_setting_data.to_set_headerfooter = False
pdf_setting_data.headerfooter_title = ""
pdf_setting_data.headerfooter_url = ""
pdf_setting_data.bookmark_root_name = "abcde"
pdf_setting_data.to_resize_objects = True
pdf_setting_data.to_print_background = False
pdf_setting_data.to_optimize_tag_tree = False
pdf_setting_data.media_style = 0
pdf_setting_data.to_load_active_content = False
 
output_path = output_directory + "html2pdf_filestream_result.pdf"
filewrite =  FileWriter()
filewrite.LoadFile(output_path)
#"htmlfile" is the path of the html file to be loaded. For example: "C:/aaa.html". The method of "FromHTML" will load this file as a stream.
htmlfile = ""
filereader =  FileReader()
filereader.LoadFile(htmlfile, False)
 
#"htmlfilepng" is the path of the png resource file to be loaded. For example: "C:/aaa.png". set "htmlfilepng" in the related_resource_file of HTML2PDFRelatedResource.
htmlfilepng = ""
filereader1 =  FileReader()
filereader1.LoadFile(htmlfilepng, False)
#"relativefilepath" is the resource file's relative path. For example: "./aaa.png".
relativefilepath = "";
html2PDFRelatedResourceArray =  HTML2PDFRelatedResourceArray()
html2PDFRelatedResource =  HTML2PDFRelatedResource(filereader1, relativefilepath)
html2PDFRelatedResourceArray.Add(html2PDFRelatedResource)
Convert.FromHTML(filereader, html2PDFRelatedResourceArray, engine_path, None,pdf_setting_data, filewrite, 30)
print("Convert HTML to PDF successfully by filestream.")
objc
#include "FSPDFObjC.h"
 
FSHTML2PDFSettingData *pdf_setting_data=[FSHTML2PDFSettingData new];
pdf_setting_data.page_height = 650;
pdf_setting_data.page_width = 950;
pdf_setting_data.is_to_page_scale = false;
FSRectF* page_margin=[[FSRectF alloc]init];
page_margin.left = 18;
page_margin.bottom = 18;
page_margin.right = 18;
page_margin.top = 18;
pdf_setting_data.page_margin = page_margin;
pdf_setting_data.is_convert_link = true;
pdf_setting_data.rotate_degrees = 0;
pdf_setting_data.is_generate_tag = true;
pdf_setting_data.page_mode = FSHTML2PDFSettingDataPageModeSinglePage;
pdf_setting_data.scaling_mode = FSHTML2PDFSettingDataScalingModeScale;
pdf_setting_data.to_generate_bookmarks = true;
pdf_setting_data.encoding_format = 0;
pdf_setting_data.to_render_images = true;
pdf_setting_data.to_remove_underline_for_link = false;
pdf_setting_data.to_set_headerfooter = false;
pdf_setting_data.headerfooter_title = @"";
pdf_setting_data.headerfooter_url = @"";
pdf_setting_data.bookmark_root_name = @"abcde";
pdf_setting_data.to_resize_objects = true;
pdf_setting_data.to_print_background = false;
pdf_setting_data.to_optimize_tag_tree = false;
pdf_setting_data.media_style = 0;
pdf_setting_data.to_load_active_content = false;
NSString * cookies = @"";
 
NSString *output_path = [output_directory stringByAppendingString:@"html2pdf_filestream_result.pdf"];
FSFileWriterCallbackImpl *filewriter = [[FSFileWriterCallbackImpl alloc] init];
[filewriter LoadFile:output_path];
// "htmlfile" is the path of the html file to be loaded. For example: "C:/aaa.html". The method of "FromHTML" will load this file as a stream.              
NSString *htmlfile = @"";    // NSString *htmlfile = @"html2pdf_filestream.html";
FSFileReader *filereader = [[FSFileReader alloc] init];
[filereader LoadFile:htmlfile];
// "htmlfilepng" is the path of the png resource file to be loaded. For example: "C:/aaa.png". set "htmlfilepng" in the related_resource_file of HTML2PDFRelatedResource.
NSString * htmlfilepng = @"";
FSFileReader *filereader1 = [[FSFileReader alloc] init];
[filereader1 LoadFile:htmlfilepng];
// "relativefilepath" is  the resource file's relative path. For example: "./aaa.png".
NSString *relativefilepath = @"";
 
FSHTML2PDFRelatedResourceArray *html2PDFRelatedResourceArray = [[FSHTML2PDFRelatedResourceArray alloc] init];
FSHTML2PDFRelatedResource *html2PDFRelatedResource = [[FSHTML2PDFRelatedResource alloc] init];
html2PDFRelatedResource.related_resource_file = filereader1;
html2PDFRelatedResource.resource_file_relative_path = relativefilepath;
[html2PDFRelatedResourceArray add:html2PDFRelatedResource];
 
[FSConvert fromHTMLWithReaderCallbackHTML:filereader  html2pdf_related_resource_array:html2PDFRelatedResourceArray engine_path:engine_path cookies_reader:nil setting_data:pdf_setting_data saved_pdf_filestream:filewriter timeout:30];
 
NSLog(@"Convert HTML to PDF successfully by filestream!");
js
const FSDK = require("@foxitsoftware/foxit-pdf-sdk-node");

let pdf_setting_data = new FSDK.HTML2PDFSettingData();
pdf_setting_data.page_height = 650;
pdf_setting_data.page_width = 950;
pdf_setting_data.is_to_page_scale = false;
pdf_setting_data.page_margin = new FSDK.RectF(18, 18, 18, 18);
pdf_setting_data.is_convert_link = true;
pdf_setting_data.rotate_degrees = FSDK.e_Rotation0;
pdf_setting_data.is_generate_tag = true;

let mode = FSDK.HTML2PDFSettingData.e_PageModeSinglePage;
pdf_setting_data.to_generate_bookmarks = true;
let scale = FSDK.HTML2PDFSettingData.e_ScalingModeNone;
pdf_setting_data.encoding_format = FSDK.HTML2PDFSettingData.e_EncodingFormatDefault;
pdf_setting_data.to_render_images = true;
pdf_setting_data.to_remove_underline_for_link = false;
pdf_setting_data.to_set_headerfooter = false;
pdf_setting_data.headerfooter_title = "";
pdf_setting_data.headerfooter_url = "";
pdf_setting_data.bookmark_root_name = "abcde";
pdf_setting_data.to_resize_objects = true;
pdf_setting_data.to_print_background = false;
pdf_setting_data.to_optimize_tag_tree = false;
pdf_setting_data.media_style = FSDK.HTML2PDFSettingData.e_MediaStyleScreen;
pdf_setting_data.to_load_active_content = false;
let output_path = output_directory + "html2pdf_filestream_result.pdf";
filewrite = new FileWriter();
let write_callback = new FSDK.FileWriterCallback(filewrite);
filewrite.LoadFile(output_path);
// "htmlfile" is the path of the html file to be loaded. For example: "C:/aaa.html". The method of "FromHTML" will load this file as a stream.
let htmlfile = "";
filereader = new FileRead();
filereader.LoadFile(htmlfile);
let read_callback = new FSDK.FileReaderCallback(filereader);

let html2PDFRelatedResourceArray = new FSDK.HTML2PDFRelatedResourceArray;
let html2PDFRelatedResource = new FSDK.HTML2PDFRelatedResource;

// "htmlfilepng" is the path of the png resource file to be loaded. For example: "C:/aaa.png". set "htmlfilepng" in the related_resource_file of HTML2PDFRelatedResource.
let htmlfilepng = "";
let filereader1 = new FileRead();
filereader1.LoadFile(htmlfilepng);
let read_callback1 = new FSDK.FileReaderCallback(filereader1);
html2PDFRelatedResource.related_resource_file = read_callback1;
//"relativefilepath" is  the resource file's relative path. For example: "./aaa.png".
let relativefilepath = "";
html2PDFRelatedResource.resource_file_relative_path = relativefilepath;
html2PDFRelatedResourceArray.Add(html2PDFRelatedResource);

FSDK.Convert.FromHTML(read_callback, html2PDFRelatedResourceArray, engine_path, null, pdf_setting_data, write_callback, 30);
csharp
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
using System.IO;
 
foxit.addon.conversion.HTML2PDFSettingData pdf_setting_data = new foxit.addon.conversion.HTML2PDFSettingData();
pdf_setting_data.page_height = 650;
pdf_setting_data.page_width = 950;
pdf_setting_data.is_to_page_scale = false;
pdf_setting_data.page_margin = new RectF(18, 18, 18, 18);
pdf_setting_data.is_convert_link = true;
pdf_setting_data.rotate_degrees = 0;
pdf_setting_data.is_generate_tag = true;
pdf_setting_data.page_mode = foxit.addon.conversion.HTML2PDFSettingData.HTML2PDFPageMode.e_PageModeSinglePage;
pdf_setting_data.scaling_mode = foxit.addon.conversion.HTML2PDFSettingData.HTML2PDFScalingMode.e_ScalingModeScale;
pdf_setting_data.to_generate_bookmarks = true;
pdf_setting_data.encoding_format = 0;
pdf_setting_data.to_render_images = true;
pdf_setting_data.to_remove_underline_for_link = false;
pdf_setting_data.to_set_headerfooter = false;
pdf_setting_data.headerfooter_title = "";
pdf_setting_data.headerfooter_url = "";
pdf_setting_data.bookmark_root_name = "abcde";
pdf_setting_data.to_resize_objects = true;
pdf_setting_data.to_print_background = false;
pdf_setting_data.to_optimize_tag_tree = false;
pdf_setting_data.media_style = 0;
pdf_setting_data.to_load_active_content = false;

String output_path = output_directory + "html2pdf_filestream_result.pdf";
FileWriter filewrite = new FileWriter();
filewrite.LoadFile(output_path);
// "htmlfile" is the path of the html file to be loaded. For example: "C:/aaa.html". The method of "FromHTML" will load this file as a stream.
String htmlfile = "";
FileRead filereader = new FileRead();
filereader.loadFile(htmlfile, false);

// "htmlfilepng" is the path of the png resource file to be loaded. For example: "C:/aaa.png". set "htmlfilepng" in the related_resource_file of HTML2PDFRelatedResource.
String htmlfilepng = "";
FileRead filereader1 = new FileRead();
filereader1.loadFile(htmlfilepng, false);
//"relativefilepath" is the resource file's relative path. For example: "./aaa.png".
String relativefilepath = "";
foxit.addon.conversion.HTML2PDFRelatedResourceArray html2PDFRelatedResourceArray = new foxit.addon.conversion.HTML2PDFRelatedResourceArray();
foxit.addon.conversion.HTML2PDFRelatedResource html2PDFRelatedResource = new foxit.addon.conversion.HTML2PDFRelatedResource(filereader1, relativefilepath);

html2PDFRelatedResourceArray.Add(html2PDFRelatedResource);
foxit.addon.conversion.Convert.FromHTML(filereader, html2PDFRelatedResourceArray, engine_path, null,
                                            pdf_setting_data, filewrite, 30);
Console.WriteLine("Convert HTML to PDF successfully by filestream!");