📄 paragraphdemomain.pas
字号:
unit ParagraphDemoMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, QuickPdf, ShellAPI, QPDFRender, ExtCtrls;
type
TMainForm = class(TForm)
QuickPdf1: TQuickPdf;
Panel1: TPanel;
Button1: TButton;
MainText: TMemo;
SaveDialog1: TSaveDialog;
procedure FormCreate(Sender: TObject);
procedure GeneratePDF(Sender: TObject);
private
TextFont: TFont;
HeaderFont: TFont;
DocumentHeaderFont: TFont;
LinkFont: TFont;
procedure CreateFonts;
procedure DestroyFonts;
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
const
ParagraphStyles: Array[0..12] of byte =
(1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2);
procedure TMainForm.CreateFonts;
begin
TextFont := TFont.Create();
with TextFont do
begin
Color := clBlack;
Size := 10;
Name := 'Times New Roman';
end;
LinkFont := TFont.Create();
with LinkFont do
begin
Color := clBlue;
Size := 10;
Name := 'Times New Roman';
end;
HeaderFont := TFont.Create();
with HeaderFont do
begin
Color := clNavy;
Style := Style + [fsBold];
Size := 11;
Name := 'Times New Roman';
end;
DocumentHeaderFont := TFont.Create();
with DocumentHeaderFont do
begin
Color := clBlack;
Size := 12;
Style := Style + [fsBold];
Name := 'Times New Roman';
end;
end;
procedure TMainForm.DestroyFonts;
begin
TextFont.Free;
HeaderFont.Free;
DocumentHeaderFont.Free;
LinkFont.Free;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
MainText.Lines.LoadFromFile('lines.rtf');
end;
procedure TMainForm.GeneratePDF(Sender: TObject);
var
AParagraph,
ATableOfContents: TRenderCell;
Text,
AString: String;
i,
ParaNumber: Integer;
begin
// Receiving a file name
if SaveDialog1.Execute then
QuickPDF1.FileName := SaveDialog1.FileName
else exit;
// Creating fonts
CreateFonts;
try
// Removing line breaks inserted by the TMemo component
Text := MainText.Lines.Text + #13#10#13#10;
Text := StringReplace(Text, #13#10#13#10, #1, [rfReplaceAll]);
Text := StringReplace(Text, #13#10, ' ', [rfReplaceAll]);
// Adding a document header
QuickPDF1.Document.Header.AddText('EMS QuickPDF Paragraph Demo',
DocumentHeaderFont, rtaCenter);
// Creating a table of contents in the first section of the document
ATableOfContents := QuickPDF1.Document.Section[0].AddParagraph;
AParagraph := ATableOfContents.AddParagraph;
AParagraph.Indent := 28;
AParagraph.AddText('Table Of Contents'#10#10, HeaderFont, rtaLeft);
// Assigning a name of the link to a paragraph. Now it can be linked by
// the assigned name from any par of the document.
AParagraph.LinkName := 'TableOfContents';
// Adding a bookmark to the table of contents
QuickPDF1.Contents.Add('Table Of Contents', AParagraph.LinkName);
// Adding a paragraph to the second section of the document
AParagraph := QuickPDF1.Document.Section[1].AddParagraph;
ParaNumber := 0;
for i := 1 to Length(Text) do
begin
AString := AString + Text[i];
If Text[i] = #1 then
begin
AString[Length(AString)] := #13;
AString := AString + #10;
case ParagraphStyles[ParaNumber] of
1: begin
AParagraph.Indent := 28;
AParagraph.LinkName := IntToStr(ParaNumber);
AParagraph.AddText(AString, HeaderFont, rtaLeft);
// Adding a bookmark to the current paragraph
QuickPDF1.Contents.Add(TrimRight(AString), AParagraph.LinkName);
// Adding a link to the current paragraph to the table of
// contents
ATableOfContents.AddParagraph;
ATableOfContents.AddText(TrimRight(AString), LinkFont, rtaLeft, AParagraph.LinkName);
end;
2: AParagraph.AddText(AString, TextFont, rtaLeft);
end;
// Adding a new paragraph to the section
AParagraph := QuickPDF1.Document.Section[1].AddParagraph;
AString := '';
Inc(ParaNumber);
end;
end;
// Generating a document
QuickPDF1.GenerateToFile;
// Opening the result document
ShellExecute(0, 'open', PChar(QuickPDF1.FileName), '', '', SW_SHOWNORMAL);
finally
DestroyFonts;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -