1. 修复段落字体不一致问题

2. 修复图片(印章为例)的位置不正确
3. 修复其他报错问题
4. 项目符号用可中文能识别的符号替代
This commit is contained in:
csh
2024-10-11 10:52:10 +08:00
parent 68ce759668
commit 2a7027476a
3 changed files with 108 additions and 43 deletions
+54 -6
View File
@@ -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;