⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 paragraphdemomain.pas

📁 一个后成PDF文件的控件
💻 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 + -