打印本文 打印本文 关闭窗口 关闭窗口
Fastreport3.14的中文PDF输出
作者:武汉SEO闵涛  文章来源:敏韬网  点击数3533  更新时间:2009/4/23 18:26:28  文章录入:mintao  责任编辑:mintao
        WriteLn(Stream, ''''/FirstChar '''' + IntToStr(FirstChar));
        WriteLn(Stream, ''''/LastChar '''' + IntToStr(LastChar));
        GetMem(pwidths, SizeOf(ABCArray));
        Write(Stream, ''''/Widths ['''');
        GetCharABCWidths(b.Canvas.Handle, FirstChar, LastChar, pwidths^);
        for i := 0 to (LastChar - FirstChar) do
          Write(Stream, IntToStr(pwidths^[i].abcA + Integer(pwidths^[i].abcB) + pwidths^[i].abcC) + '''' '''');
        WriteLn(Stream, '''']'''');
        FreeMem(pwidths);
        WriteLn(Stream, ''''>>'''');
        WriteLn(Stream, ''''endobj'''');
        Parent.XRefAdd(Stream);
        WriteLn(Stream, IntToStr(Index + 1 + Parent.FStartFonts) + '''' 0 obj'''');
        WriteLn(Stream, ''''<<'''');
        WriteLn(Stream, ''''/Type /FontDescriptor'''');
        WriteLn(Stream, ''''/FontName /'''' + FontName);
        WriteLn(Stream, ''''/Flags 32'''');
        WriteLn(Stream, ''''/FontBBox ['''' + IntToStr(pm^.otmrcFontBox.Left) + '''' '''' + IntToStr(pm^.otmrcFontBox.Bottom) + '''' '''' + IntToStr(pm^.otmrcFontBox.Right) + '''' '''' + IntToStr(pm^.otmrcFontBox.Top) + '''' ]'''');
        WriteLn(Stream, ''''/ItalicAngle '''' + IntToStr(pm^.otmItalicAngle));
        WriteLn(Stream, ''''/Ascent '''' + IntToStr(pm^.otmAscent));
        WriteLn(Stream, ''''/Descent '''' + IntToStr(pm^.otmDescent));
        WriteLn(Stream, ''''/Leading '''' + IntToStr(pm^.otmTextMetrics.tmInternalLeading)); //NEW
        WriteLn(Stream, ''''/CapHeight '''' + IntToStr(pm^.otmTextMetrics.tmHeight));
        WriteLn(Stream, ''''/XHeight '''' + IntToStr(pm^.otmsXHeight)); //NEW
        WriteLn(Stream, ''''/StemV '''' + IntToStr(50 + Round(sqr(pm^.otmTextMetrics.tmWeight / 65))));
        WriteLn(Stream, ''''/AvgWidth '''' + IntToStr(pm^.otmTextMetrics.tmAveCharWidth)); //NEW
        WriteLn(Stream, ''''/MaxWidth '''' + IntToStr(pm^.otmTextMetrics.tmMaxCharWidth)); //NEW
        WriteLn(Stream, ''''/MissingWidth '''' + IntToStr(pm^.otmTextMetrics.tmAveCharWidth)); //NEW
        if Parent.FEmbedded then
          WriteLn(Stream, ''''/FontFile2 '''' + IntToStr(Index + 2 + Parent.FStartFonts) + '''' 0 R'''');

        WriteLn(Stream, ''''>>'''');
        WriteLn(Stream, ''''endobj'''');
      end;

      if Parent.FEmbedded then
      begin
        Parent.XRefAdd(Stream);
        WriteLn(Stream, IntToStr(Index + 2 + Parent.FStartFonts) + '''' 0 obj'''');
        i := GetFontData(b.Canvas.Handle, 0, 0, nil, 1);
        GetMem(pfont, i);
        i := GetFontData(b.Canvas.Handle, 0, 0, pfont, i);
        MemStream := TMemoryStream.Create;
        MemStream.Write(pfont^, i);
        MemStream1 := TMemoryStream.Create;
        frxDeflateStream(MemStream, MemStream1, gzMax);
        WriteLn(Stream, ''''<< /Length '''' + IntToStr(MemStream1.Size) + '''' /Filter /FlateDecode /Length1 '''' + IntToStr(MemStream.Size) + '''' >>'''');
        WriteLn(Stream, ''''stream'''');
        Stream.CopyFrom(MemStream1, 0);
        MemStream1.Free;
        MemStream.Free;
        FreeMem(pfont);
        WriteLn(Stream, '''''''');
        WriteLn(Stream, ''''endstream'''');
        WriteLn(Stream, ''''endobj'''');
      end;
    except
    end;
  finally
    FreeMem(pm);
    b.Free;
  end;
end;

上一页  [1] [2] [3] [4] 

打印本文 打印本文 关闭窗口 关闭窗口