Nhập Form XObject SVG
THotPDF.ImportSVGFormXObject phân tích SVG một lần và đăng ký một Form XObject PDF tái sử dụng, còn THPDFPage.DrawSVGFormXObject đặt nó ở mọi kích thước và tùy chọn tạo chú thích liên kết trang
Khai báo
function ImportSVGFormXObject(const Input: TBytes): AnsiString; overload;
function ImportSVGFormXObject(
const Input: TBytes;
out Statistics: THPDFSVGImportStatistics
): AnsiString; overload;
procedure DrawSVGFormXObject(
const FormName: AnsiString;
X, Y, W, H: Single;
AddLinks: Boolean = True
);
Hồ sơ vector
- Hình học bao gồm đường dẫn có cung elip, hình chữ nhật, hình chữ nhật bo góc, hình tròn, hình elip, đường thẳng, đường gấp khúc, đa giác, phép biến đổi, nhóm, ký hiệu và tham chiếu
usechỉ đến phân đoạn - Màu sơn bao gồm màu RGB đặc, độ mờ tô và nét, quy tắc tô, đầu nét và nối nét, mảng dash và offset kế thừa, giới hạn miter, dải vector gradient tuyến tính và xuyên tâm, nét gradient dựa trên tiling pattern có màu, và clip path
- Độ mờ đối tượng và nhóm dùng các Form transparency vector isolated, nên các phần tử con chồng lấn được composite trước khi độ mờ bao ngoài được áp dụng
- Mask trở thành tài nguyên Form transparency-group với soft mask PDF Alpha hoặc Luminosity, bao gồm clip vùng mask,
maskUnits,maskContentUnits, và tham chiếu mask lồng nhau có giới hạn - CSS bao gồm bộ chọn kiểu, lớp, ID và bộ chọn kết hợp nhúng, thuộc tính trình bày, kiểu nội tuyến, độ đặc hiệu, thứ tự nguồn và
!important - Nhập tài liệu nhúng các subset font Unicode và bản đồ
ToUnicodequa engine viết gốc, dùng các chuỗi font fallback đã cấu hình, căn các run fallback theo baseline chữ cái chung, và tính neo văn bản từ advance glyph thực tế - Ảnh PNG và JPEG nhúng trở thành Image XObject tái sử dụng được, giữ alpha PNG dưới dạng soft mask, và hỗ trợ
preserveAspectRatio="none",meetcăn giữa, vàslicecăn giữa - Liên kết HTTP, HTTPS và mail được giữ lại dưới dạng chú thích liên kết PDF nhận biết vị trí mà không trở thành một phần của luồng Form tái sử dụng
Biên giới văn bản và màu sơn
Văn bản hỗ trợ tô đặc, biến thể đậm và nghiêng, cỡ chữ, phép biến đổi, neo, độ mờ, và clip hình học; sơn văn bản gradient fail closed, và mỗi node text hoặc tspan vẫn là một run định vị độc lập chứ không phải một engine bố cục luồng văn bản SVG hoàn chỉnh
Nhập văn bản tài liệu giữ nguyên face đậm và nghiêng đã chọn qua các kiểm tra glyph nhận biết style và bố cục fallback, bảo toàn ink bounds đã đo, và từ chối các glyph thực sự chưa giải quyết được
Văn bản UTF-8 và tham chiếu ký tự XML thập lục phân hoặc thập phân bảo toàn cùng các scalar Unicode trên Delphi lẫn FPC, bao gồm các scalar supplementary được biểu diễn bằng cặp surrogate UTF-16
Overload HPDFBuildSVGFormData đứng riêng không có text builder dùng advance đã đo của Helvetica, Times, và Courier Base 14 và từ chối ký tự ngoài WinAnsi thay vì thay bằng dấu hỏi; overload có THPDFSVGTextRunBuilder nhận các form văn bản nhúng và số liệu do bên gọi cung cấp
Gradient giữ nguyên phép xấp xỉ dải vector có giới hạn; tài nguyên trong suốt đòi hỏi PDF 1.4 và bị profile nghiêm ngặt PDF/A-1 từ chối
Style nét
stroke-dasharray, stroke-dashoffset, và stroke-miterlimit hoạt động qua thuộc tính trình bày, CSS nhúng, style nội tuyến, và kế thừa, bao gồm nhóm và các instance use chỉ đến phân đoạn
Mảng dash nhận các số phân tách bằng dấu phẩy hoặc khoảng trắng cùng các độ dài được hỗ trợ; phần trăm dùng đường chéo viewport đã chuẩn hóa, tính theo sqrt((viewWidth * viewWidth + viewHeight * viewHeight) / 2)
Mảng lẻ độ dài được lặp lại để tạo pattern chẵn độ dài, mỗi đường con khởi động lại pattern, và offset dương hoặc âm chạy vòng qua pattern trọn vẹn; none và mảng toàn số không cho ra nét đặc
Dash độ dài bằng không vẫn được sơn và giữ dấu cap tròn hoặc vuông; nét đặc thường, pattern nét gradient, clip, mask, và nhóm opacity isolated dùng chung các cài đặt nét đã chọn
Giới hạn miter mặc định là 4; các giá trị SVG 2 từ 0 đến 1 được chấp nhận và dùng nối bevel tại nơi miter sẽ vượt giới hạn, trong khi biên giới tài nguyên gradient và transparency giữ nối sắc trong giới hạn đã chọn
Dựng gốc dùng hình học dash có giới hạn để giữ offset, độ dài phân số, và mảng dài hơn giới hạn bút GDI, với flattening đường cong thích nghi và nối sơn liên tục xuyên qua biên giới đoạn
Hiệu chỉnh dash bằng pathLength vẫn nằm ngoài profile này; hình kết hợp mảng dash không đặc với pathLength fail closed thay vì lặng lẽ dùng độ dài chưa hiệu chỉnh
Ngữ nghĩa nét theo mô hình nét SVG 2 trong các ngân sách parser và renderer mô tả dưới đây
Cấu hình shaping văn bản
Văn bản SVG nhúng dùng các cài đặt ShapingFeatures, AutoShapeArabic, AutoShapeSyriac, AutoShapeNko, AutoShapeAdlam, và AutoShapeHanifiRohingya của tài liệu nhập, cùng các lựa chọn script và ngôn ngữ GSUB và chuỗi font fallback của tài liệu
Các cài đặt này áp dụng trong cả advance đã đo lẫn text appearance được tạo ra mà không đổi cấu hình của bên gọi; shaping vẫn là tùy chọn chủ động và đòi hỏi font cung cấp các glyph cùng bảng OpenType được yêu cầu
Mỗi text appearance được tạo nhận tối đa 256 lựa chọn font shaping phân biệt và 64 MiB dữ liệu font thô cộng dồn; dữ liệu font không được hỗ trợ hoặc vượt giới hạn sẽ làm import thất bại nguyên tử
Độ mờ đối tượng và nhóm
opacity áp dụng một lần lên kết quả sơn trọn vẹn của node của nó và không được kế thừa bởi phần tử con; fill-opacity và stroke-opacity giữ các giá trị sơn kế thừa riêng của chúng
Hai hình chữ nhật đỏ đặc chồng lấn bên trong <g opacity="0.5"> vẫn đồng đều trong suốt ở vùng chồng, trong khi hai hình chữ nhật độc lập trong suốt trở nên đậm hơn nơi chúng chồng nhau
Nhóm lồng nhau composite theo thứ tự: hai độ mờ bao ngoài 0.5 cho hiệu ứng thực tế 0.25 lên một phần tử con đặc, và opacity tường minh bằng 1 của phần tử con không ghi đè nhóm bao ngoài
Node SVG gốc, container, liên kết, tham chiếu phân đoạn, văn bản, ảnh, và hình dùng chung đường dẫn opacity đối tượng; tham chiếu use chỉ đến phân đoạn bảo toàn style của cả instance lẫn node được tham chiếu
Alpha tô và nét vẫn độc lập, kể cả tại vùng chồng của chúng bên trong một đối tượng trong suốt, và alpha stop gradient kết hợp với alpha sơn tương ứng trước khi composite đối tượng
Hiệu ứng clip và mask thuộc về node của chúng thay vì kế thừa như cài đặt sơn của phần tử con; hình học liên kết vẫn nhận biết vị trí, và biên giới Form isolated thận trọng giữ nét và cap đã biến đổi
Importer giữ toán tử vector, form văn bản nhúng, tài nguyên ảnh, pattern, và mask bên trong các nhóm isolated; nó không flatten toàn bộ SVG thành bitmap
Hành vi được hỗ trợ theo mô hình opacity đối tượng và nhóm của SVG; các giới hạn văn bản, gradient, và hình học khác trên trang này vẫn áp dụng
Bảo mật và ngân sách
Bộ nhập chấp nhận SVG thuần hoặc nén gzip tối đa 8 MiB, giới hạn đầu vào mở rộng ở 32 MiB, toán tử chính, pattern, mask, và nhóm gộp lại ở 16 MiB, nút ở 4.096, độ lồng ở 64 cấp, quy tắc CSS ở 256 và giá trị đường dẫn ở 100.000
Ảnh nhúng chỉ nhận payload Base64 nghiêm ngặt data:image/png;base64, và data:image/jpeg;base64,, với tối đa 128 ảnh, 16.384 pixel mỗi chiều, và 16.777.216 pixel đã giải mã trên toàn bộ ảnh; kích thước được kiểm tra trước khi giải mã gốc
Văn bản giới hạn 128 run và 65.536 đơn vị UTF-16 mỗi run, còn pattern nét gradient, mask, và nhóm opacity được giới hạn mỗi loại 128 tài nguyên; tham chiếu mask đệ quy fail closed
Mảng dash chứa tối đa 64 mục nguồn trước khi mở rộng mảng lẻ; mục dương phải ít nhất 0,000001 đơn vị người dùng, độ dài riêng lẻ và chu kỳ chuẩn hóa không được vượt 1.000.000.000, offset tuyệt đối không được vượt 1.000.000.000, và giới hạn miter phải nằm giữa 0 và 1.000.000
Hiệu ứng transparency lồng nhau thực tế giới hạn tám cấp để khớp renderer gốc, độc lập với giới hạn chiều sâu cây SVG; container lồng nhau thường không có hiệu ứng transparency không tốn hạn mức này
Biên giới hiệu ứng transparency phải hữu hạn và mỗi tọa độ phải nằm trong giá trị tuyệt đối 1.000.000.000; import ngoài profile tọa độ có giới hạn này thất bại trước khi đăng ký nhóm hoặc mask
Import thất bại rollback các đối tượng đã tạo, form văn bản nhúng, mục registry, và trạng thái phiên bản cùng màu thiết bị, nên bên gọi có thể tái sử dụng cùng tài liệu và bảo toàn một graph transaction bao ngoài
Script, trình xử lý sự kiện, DTD, foreignObject, kiểu media dữ liệu không được hỗ trợ, URL JavaScript, và URL sơn hoặc tài nguyên ảnh ngoài đều fail closed
Tham chiếu phân đoạn như url(#gradient), url(#clip) và href="#symbol" vẫn nằm trong tài liệu đã phân tích và không bao giờ kích hoạt truy cập tệp hoặc mạng
Thống kê
THPDFSVGImportStatistics báo cáo nút, quy tắc CSS, gradient, nét gradient, mask, ảnh, liên kết, run văn bản, nhóm opacity isolated qua GroupCount, và byte toán tử chính, pattern, mask, và nhóm tạo ra gộp lại
HPDFBuildSVGFormData phơi bày riêng trình phân tích có giới hạn qua THPDFSVGFormData và THPDFSVGLinkInfo cho bên gọi cần nội dung Form, kích thước nội tại, tài nguyên độ mờ, payload ảnh, stream pattern và mask, tên tài nguyên văn bản, hoặc siêu dữ liệu liên kết trước khi đăng ký; Groups cung cấp các stream toán tử nhóm isolated và biên giới Form thận trọng
Ví dụ
Document.BeginDoc;
FormName := Document.ImportSVGFormXObject(SVGBytes, Statistics);
if FormName = '' then
raise Exception.Create('SVG import failed');
Document.CurrentPage.DrawSVGFormXObject(
FormName,
36,
72,
240,
120,
True
);
Document.CurrentPage.DrawSVGFormXObject(
FormName,
320,
72,
120,
60,
False
);
Xem thêm: THotPDF.ImportSVGFormXObject, THPDFPage.DrawSVGFormXObject, Nhập Phương Tiện Phân Trang HTML5