При сборке под Linux с CrossVCL ругается на отсутствие CreateFontPackageProc в PdfFontsEh.pas Вылечилось дополнительным ветвлением условной компиляции с дефайном CROSSVCL.
Код:
{$IFDEF FPC_LINUX}
// There is no CreateFontPackage on Linux.
function CreateFontPackageProc(SrcBuffer: Pointer;
SrcBufferSize: Cardinal;
UsedUniCodeChars: TWordDynArray): TBytes;
begin
Result := nil;
end;
{$ELSE}
{$IFDEF CROSSVCL}
function CreateFontPackageProc(SrcBuffer: Pointer;
SrcBufferSize: Cardinal;
UsedUniCodeChars: TWordDynArray): TBytes;
begin
Result := nil;
end;
{$ELSE}
function CreateFontPackageProc(SrcBuffer: Pointer;
SrcBufferSize: Cardinal;
UsedUniCodeChars: TWordDynArray): TBytes;
const
TTFMFP_SUBSET = 0;
TTFCFP_MS_PLATFORMID = 3;
TTFCFP_UNICODE_CHAR_SET = 1;
TTFCFP_FLAGS_SUBSET = 1;
var
SubSetData: Pointer;
SubSetMem: Cardinal;
SubSetSize: Cardinal;
usFlags: Word;
ttcIndex: Word;
begin
SubSetData := nil;
SubSetMem := 0;
SubSetSize := 0;
usFlags := TTFCFP_FLAGS_SUBSET;
ttcIndex := 0;
if CreateFontPackage(SrcBuffer, SrcBufferSize,
@SubSetData, @SubSetMem, @SubSetSize,
usFlags, ttcIndex, TTFMFP_SUBSET, 0,
TTFCFP_MS_PLATFORMID, TTFCFP_UNICODE_CHAR_SET,
Pointer(UsedUniCodeChars), Length(UsedUniCodeChars),
@lpfnAllocate, @lpfnReAllocate, @lpfnFree, nil) = 0 then
begin
SetLength(Result, Integer(SubSetSize));
Move(SubSetData^, Result[0], SubSetSize);
FreeMem(SubSetData);
end;
end;
{$ENDIF CROSSVCL}
{$ENDIF FPC_LINUX}
Offtop: А никто не в курсе, что сейчас с CrossVCL/FMXLinux происходит? Разработчик перестал реагировать на внешние раздражители.