1. 修复段落字体不一致问题
2. 修复图片(印章为例)的位置不正确 3. 修复其他报错问题 4. 项目符号用可中文能识别的符号替代
This commit is contained in:
+54
-6
@@ -1,7 +1,9 @@
|
||||
type TSFontWare = class
|
||||
public
|
||||
function Create(pdf: PdfFile);
|
||||
function GetFont(name: string; bold: boolean; italic: boolean);
|
||||
function GetFontByText(text: string; name: string; bold: boolean; italic: boolean);
|
||||
function GetAsciiFont(name: string; bold: boolean; italic: boolean);
|
||||
function GetCNSFont(name: string; bold: boolean; italic: boolean);
|
||||
function UseExternalFont();
|
||||
function SetSubstitutionRules(source: string; target: string);
|
||||
function SetDefaultSz(value: real);
|
||||
@@ -9,7 +11,8 @@ public
|
||||
|
||||
private
|
||||
function GetExternalFont(name:string; bold: boolean; italic: boolean);
|
||||
function GetBuiltInFont(name:string; bold: boolean; italic: boolean);
|
||||
function GetBuiltInCNSFont(name:string; bold: boolean; italic: boolean);
|
||||
function GetBuiltInAsciiFont(name:string; bold: boolean; italic: boolean);
|
||||
|
||||
private
|
||||
[weakref]pdf_: PdfFile;
|
||||
@@ -25,7 +28,12 @@ function TSFontWare.Create(pdf: PdfFile);
|
||||
begin
|
||||
pdf_ := pdf;
|
||||
use_built_in_font_ := true;
|
||||
substitution_rules_ := array("宋体": "SimSun", "黑体": "SimHei");
|
||||
substitution_rules_ := array("宋体": "SimSun",
|
||||
"黑体": "SimHei",
|
||||
"Courier New": "Courier",
|
||||
"Helvetica": "Helvetica",
|
||||
"Times New Roman": "Times-Roman",
|
||||
);
|
||||
external_reference_ := array();
|
||||
default_sz_ := 10.5;
|
||||
end;
|
||||
@@ -63,12 +71,21 @@ begin
|
||||
return font;
|
||||
end;
|
||||
|
||||
function TSFontWare.GetFont(name: string; bold: boolean; italic: boolean);
|
||||
function TSFontWare.GetFontByText(text: string; name: string; bold: boolean; italic: boolean);
|
||||
begin
|
||||
return use_built_in_font_ ? {self.}GetBuiltInFont(name, bold, italic) : {self.}GetExternalFont(name, bold, italic);
|
||||
len := length(text);
|
||||
if len > 1 then
|
||||
return {self.}GetCNSFont(name, bold, italic);
|
||||
else
|
||||
return {self.}GetAsciiFont(name, bold, italic);
|
||||
end;
|
||||
|
||||
function TSFontWare.GetBuiltInFont(name: string; bold: boolean; italic: boolean);
|
||||
function TSFontWare.GetCNSFont(name: string; bold: boolean; italic: boolean);
|
||||
begin
|
||||
return use_built_in_font_ ? {self.}GetBuiltInCNSFont(name, bold, italic) : {self.}GetExternalFont(name, bold, italic);
|
||||
end;
|
||||
|
||||
function TSFontWare.GetBuiltInCNSFont(name: string; bold: boolean; italic: boolean);
|
||||
begin
|
||||
font_name := substitution_rules_[name];
|
||||
if ifnil(font_name) then font_name := "SimSun";
|
||||
@@ -82,6 +99,37 @@ begin
|
||||
return font;
|
||||
end;
|
||||
|
||||
function TSFontWare.GetAsciiFont(name: string; bold: boolean; italic: boolean);
|
||||
begin
|
||||
return use_built_in_font_ ? {self.}GetBuiltInAsciiFont(name, bold, italic) : {self.}GetExternalFont(name, bold, italic);
|
||||
end;
|
||||
|
||||
function TSFontWare.GetBuiltInAsciiFont(name:string; bold: boolean; italic: boolean);
|
||||
begin
|
||||
font_name := substitution_rules_[name];
|
||||
if ifnil(font_name) then font_name := "Times-Roman";
|
||||
if font_name = "Courier" or font_name = "Helvetica" then
|
||||
begin
|
||||
if bold and italic then
|
||||
font_name += "-BoldOblique";
|
||||
else if bold then
|
||||
font_name += "-Bold";
|
||||
else if italic then
|
||||
font_name += "-Oblique";
|
||||
end
|
||||
else if font_name = "Times-Roman" then
|
||||
begin
|
||||
if bold and italic then
|
||||
font_name := "Times-BoldItalic";
|
||||
else if bold then
|
||||
font_name += "Times-Bold";
|
||||
else if italic then
|
||||
font_name += "Times-Italic";
|
||||
end
|
||||
font := pdf_.GetFont(font_name, "");
|
||||
return font;
|
||||
end;
|
||||
|
||||
function TSFontWare.SetSubstitutionRules(source: string; target: string);
|
||||
begin
|
||||
substitution_rules_[source] := target;
|
||||
|
||||
Reference in New Issue
Block a user