矢量图写入 PDF (Vector Graphics)
从 12.0 版本开始,可通过 VectorGraphics 将 SVG、WMF/EMF 矢量图写入 PDF。模块在内部自行打开目标 PDF、写入内容并保存;业务代码只需传入 PDF 路径与矢量文件路径,不必先用 PDFDoc 打开同一份文档。
完整可运行示例见产品包 examples/simple_demo/vectorgraphics。类与方法细节见 API 文档。
系统要求
- 平台:Win32、Win64、Linux64、Mac(不支持 Linux x86 / Linux ARM、Mac ARM)
- 开发语言:C、C++、Java、C#、Python、Objective-C、Node.js、Go
- 授权许可:
Library::Initialize所用授权码需包含Conversion模块; - 运行依赖:矢量图引擎库
fxvectorgraphics(通过VectorGraphics::Initialize(library_path)按完整文件路径加载)
基本流程
Library::Initialize(sn, key)(授权含Conversion)VectorGraphics::Initialize(library_path)(library_path=fxvectorgraphics完整路径)- 调用
InsertSVGToPDF/InsertSVGToPage/InsertWMFToPDF/InsertWMFToPage VectorGraphics::Release,最后Library::Release
插入 SVG
InsertSVGToPDF:在指定位置插入新页并绘制 SVG;pdf_path为空或不存在时,按out_pdf_path新建 PDF。参数含页宽高(pt)与 DPI。InsertSVGToPage:将 SVG 绘制到已有页的矩形区域(左下角坐标x/y,宽高与 DPI)。源 PDF 路径不可为空。
c++
using namespace foxit;
using namespace foxit::common;
using namespace foxit::addon::vectorgraphics;
// 1) 初始化 PDF SDK(授权需含 Conversion 模块)。
Library::Initialize(sn, key);
// 2) 加载矢量图引擎:必须传入 fxvectorgraphics 的完整路径(不可为空)。
WString library_path = L"C:/path/to/fxvectorgraphics.dll"; // Linux: .../libfxvectorgraphics.so
VectorGraphics::Initialize(library_path);
// 新建 PDF,插入 SVG 为 A4 新页(595 x 842 pt),dpi = 96。
VectorGraphics::InsertSVGToPDF(L"", svg_path, out_pdf_new, 0, 595.f, 842.f, 96);
// 写入已有 PDF 第 0 页矩形区域。
VectorGraphics::InsertSVGToPage(pdf_path, svg_path, out_pdf_page, 0, 50.f, 50.f, 200.f, 200.f, 96);
VectorGraphics::Release();
Library::Release();
C
FSDK_Library_Initialize(sn, key);
const wchar_t* library_path = L"C:/path/to/fxvectorgraphics.dll";
FSDK_VectorGraphics_Initialize(library_path);
FSDK_VectorGraphics_InsertSVGToPDF(L"", svg_path, out_pdf_new, 0, 595.f, 842.f, 96);
FSDK_VectorGraphics_InsertSVGToPage(pdf_path, svg_path, out_pdf_page, 0, 50.f, 50.f, 200.f, 200.f, 96);
FSDK_VectorGraphics_Release();
FSDK_Library_Release();
java
Library.initialize(sn, key);
String libraryPath = "C:/path/to/fxvectorgraphics.dll";
VectorGraphics.initialize(libraryPath);
VectorGraphics.insertSVGToPDF("", svgPath, outPdfNew, 0, 595.f, 842.f, 96);
VectorGraphics.insertSVGToPage(pdfPath, svgPath, outPdfPage, 0, 50.f, 50.f, 200.f, 200.f, 96);
VectorGraphics.release();
Library.release();
py
Library.Initialize(sn, key)
library_path = "C:/path/to/fxvectorgraphics.dll"
VectorGraphics.Initialize(library_path)
VectorGraphics.InsertSVGToPDF("", svg_path, out_pdf_new, 0, 595.0, 842.0, 96)
VectorGraphics.InsertSVGToPage(pdf_path, svg_path, out_pdf_page, 0, 50.0, 50.0, 200.0, 200.0, 96)
VectorGraphics.Release()
Library.Release()
objc
[FSLibrary initialize:sn key:key];
NSString* libraryPath = @"/path/to/libfxvectorgraphics.dylib";
[FSVectorGraphics initialize:libraryPath];
[FSVectorGraphics insertSVGToPDF:@"" svg_path:svgPath out_pdf_path:outPdfNew
page_index:0 page_width_pt:595.0f page_height_pt:842.0f dpi:96];
[FSVectorGraphics insertSVGToPage:pdfPath svg_path:svgPath out_pdf_path:outPdfPage
page_index:0 x:50.0f y:50.0f width:200.0f height:200.0f dpi:96];
[FSVectorGraphics destroy];
[FSLibrary destroy];
js
const FSDK = require("@fuxinsoft/fuxin-pdf-sdk-node");
FSDK.Library.Initialize(sn, key);
let library_path = "C:/path/to/fxvectorgraphics.dll";
FSDK.VectorGraphics.Initialize(library_path);
FSDK.VectorGraphics.InsertSVGToPDF("", svg_path, out_pdf_new, 0, 595.0, 842.0, 96);
FSDK.VectorGraphics.InsertSVGToPage(pdf_path, svg_path, out_pdf_page, 0, 50.0, 50.0, 200.0, 200.0, 96);
FSDK.VectorGraphics.Release();
FSDK.Library.Release();
csharp
Library.Initialize(sn, key);
string library_path = @"C:\path\to\fxvectorgraphics.dll";
VectorGraphics.Initialize(library_path);
VectorGraphics.InsertSVGToPDF("", svg_path, out_pdf_new, 0, 595.0f, 842.0f, 96);
VectorGraphics.InsertSVGToPage(pdf_path, svg_path, out_pdf_page, 0, 50.0f, 50.0f, 200.0f, 200.0f, 96);
VectorGraphics.Release();
Library.Release();
go
fsdk.LibraryInitialize(sn, key)
libraryPath := "/path/to/libfxvectorgraphics.so"
fsdk.VectorGraphicsInitialize(libraryPath)
fsdk.VectorGraphicsInsertSVGToPDF("", svgPath, outPdfNew, 0, 595.0, 842.0, 96)
fsdk.VectorGraphicsInsertSVGToPage(pdfPath, svgPath, outPdfPage, 0, 50.0, 50.0, 200.0, 200.0, 96)
fsdk.VectorGraphicsRelease()
fsdk.LibraryRelease()
插入 WMF / EMF
InsertWMFToPDF / InsertWMFToPage 参数形态与 SVG 对应接口相同。示例中的 WMF 路径也可指向 EMF 文件。调用前须已完成上一节的 Library::Initialize 与 VectorGraphics::Initialize。
c++
VectorGraphics::InsertWMFToPDF(L"", wmf_path, out_pdf_new, 0, 595.f, 842.f, 96);
VectorGraphics::InsertWMFToPage(pdf_path, wmf_path, out_pdf_page, 0, 50.f, 50.f, 200.f, 200.f, 96);
C
FSDK_VectorGraphics_InsertWMFToPDF(L"", wmf_path, out_pdf_new, 0, 595.f, 842.f, 96);
FSDK_VectorGraphics_InsertWMFToPage(pdf_path, wmf_path, out_pdf_page, 0, 50.f, 50.f, 200.f, 200.f, 96);
java
VectorGraphics.insertWMFToPDF("", wmfPath, outPdfNew, 0, 595.f, 842.f, 96);
VectorGraphics.insertWMFToPage(pdfPath, wmfPath, outPdfPage, 0, 50.f, 50.f, 200.f, 200.f, 96);
py
VectorGraphics.InsertWMFToPDF("", wmf_path, out_pdf_new, 0, 595.0, 842.0, 96)
VectorGraphics.InsertWMFToPage(pdf_path, wmf_path, out_pdf_page, 0, 50.0, 50.0, 200.0, 200.0, 96)
objc
[FSVectorGraphics insertWMFToPDF:@"" wmf_path:wmfPath out_pdf_path:outPdfNew
page_index:0 page_width_pt:595.0f page_height_pt:842.0f dpi:96];
[FSVectorGraphics insertWMFToPage:pdfPath wmf_path:wmfPath out_pdf_path:outPdfPage
page_index:0 x:50.0f y:50.0f width:200.0f height:200.0f dpi:96];
js
FSDK.VectorGraphics.InsertWMFToPDF("", wmf_path, out_pdf_new, 0, 595.0, 842.0, 96);
FSDK.VectorGraphics.InsertWMFToPage(pdf_path, wmf_path, out_pdf_page, 0, 50.0, 50.0, 200.0, 200.0, 96);
csharp
VectorGraphics.InsertWMFToPDF("", wmf_path, out_pdf_new, 0, 595.0f, 842.0f, 96);
VectorGraphics.InsertWMFToPage(pdf_path, wmf_path, out_pdf_page, 0, 50.0f, 50.0f, 200.0f, 200.0f, 96);
go
fsdk.VectorGraphicsInsertWMFToPDF("", wmfPath, outPdfNew, 0, 595.0, 842.0, 96)
fsdk.VectorGraphicsInsertWMFToPage(pdfPath, wmfPath, outPdfPage, 0, 50.0, 50.0, 200.0, 200.0, 96)