Technical Article

§І§С§Щ§Х§Ц§Э§с§Я§Ц §Я§С PDF §Х§а§Ь§е§Ю§Ц§Я§д§Ъ §г PDFium VCL §У Delphi

PDFium VCL §б§в§Ц§Х§а§г§д§С§У§с §Ц§Х§Ъ§Я §Ю§Ц§д§а§Х §Щ§С §в§С§Щ§Х§Ц§Э§с§Я§Ц §Я§С PDF: ImportPages. §Ј§г§Ъ§й§Ь§а §а§г§д§С§Я§С§Э§а, §Я§Ц§Щ§С§У§Ъ§г§Ъ§Ю§а §Х§С§Э§Ъ §Ъ§Щ§а§Э§Ъ§в§С§д§Ц §Ц§Х§Я§С §г§д§в§С§Я§Ъ§и§С, §Ъ§Щ§в§с§Щ§У§С§д§Ц §б§а §б§в§а§Ъ§Щ§У§а§Э§Я§Ъ §Ф§в§С§Я§Ъ§и§Ъ §Ъ§Э§Ъ §г§Э§Ц§Х§У§С§д§Ц §г§д§в§е§Ь§д§е§в§С§д§С §Я§С §а§д§Ю§Ц§д§Ь§Ъ§д§Ц §Я§С §г§С§Ю§Ъ§с §Х§а§Ь§е§Ю§Ц§Я§д, §Ц §б§в§а§г§д§а §в§С§Щ§Э§Ъ§й§Я§Ъ §Я§С§й§Ъ§Я§Ъ §Щ§С §в§Ц§к§С§У§С§Я§Ц §Ь§а§Ъ §Я§а§Ю§Ц§в§С §Я§С §г§д§в§С§Я§Ъ§и§Ъ §Х§С §а§д§Ъ§Х§С§д §У§м§У §У§г§Ц§Ь§Ъ §Ъ§Щ§з§а§Х§Ц§Я §ж§С§Ы§Э. §®§Ц§з§С§Я§Ъ§Ь§С§д§С §а§г§д§С§У§С §г§м§л§С§д§С. §І§С§Я§Я§а§д§а §в§С§Щ§Т§Ъ§в§С§Я§Ц §Я§С §д§а§У§С §г§б§Ц§г§д§с§У§С §Ю§Я§а§Ф§а §б§а§Ф§в§Ц§к§Я§Ъ §г§д§м§б§Ь§Ъ.

§¬§С§Ь §в§С§Т§а§д§Ъ §и§Ъ§Ь§м§Э§м§д §Щ§С §в§С§Щ§Х§Ц§Э§с§Я§Ц

§є§С§Т§Э§а§Я§м§д §Ц §г§м§л§Ъ§с§д, §Я§Ц§Щ§С§У§Ъ§г§Ъ§Ю§а §Ь§С§Ь §в§С§Щ§Х§Ц§Э§с§д§Ц §Ъ§Щ§з§а§Х§Я§Ъ§с §Х§а§Ь§е§Ю§Ц§Я§д. §і§м§Щ§Х§С§Ы§д§Ц §Я§а§У§С §Ъ§Я§г§д§С§Я§и§Ъ§с §Я§С TPdf, §Ъ§Щ§У§Ъ§Ь§С§Ы§д§Ц CreateDocument §Щ§С §Ъ§Я§Ъ§и§Ъ§С§Э§Ъ§Щ§Ъ§в§С§Я§Ц §Я§С §б§в§С§Щ§Ц§Я PDF §У §б§С§Ю§Ц§д§д§С, §Ъ§Ю§б§а§в§д§Ъ§в§С§Ы§д§Ц §Ш§Ц§Э§С§Я§Ъ§д§Ц §г§д§в§С§Я§Ъ§и§Ъ §г ImportPages, §Щ§С§б§С§Щ§Ц§д§Ц §в§Ц§Щ§е§Э§д§С§д§С §Ъ §г§Э§Ц§Х §д§а§У§С §Я§е§Э§Ъ§в§С§Ы§д§Ц Active §Я§С False §б§в§Ц§Х§Ъ §г§Э§Ц§Х§У§С§л§С§д§С §Ъ§д§Ц§в§С§и§Ъ§с. §ґ§С§Щ§Ъ §б§а§г§Э§Ц§Х§Я§С §г§д§м§б§Ь§С §й§Ц§г§д§а §г§Ц §б§в§а§б§е§г§Ь§С: §Т§Ц§Щ §Я§е§Э§Ъ§в§С§Я§Ц §г§Э§Ц§Х§У§С§л§а§д§а §Ъ§Щ§У§Ъ§Ь§У§С§Я§Ц §Я§С CreateDocument §Х§а§Т§С§У§с §Ь§м§Ю §Х§а§Ь§е§Ю§Ц§Я§д§С, §Ь§а§Ы§д§а §У§г§Ц §а§л§Ц §Ц §У §б§С§Ю§Ц§д§д§С, §У§Ю§Ц§г§д§а §Х§С §Щ§С§б§а§й§Я§Ц §Я§С§й§Ъ§г§д§а. §Ј§м§Я§к§Я§С§д§С §Ъ§Я§г§д§С§Я§и§Ъ§с §Я§С TPdf §г§Ц §б§в§Ц§Ъ§Щ§б§а§Э§Щ§У§С §У§м§У §У§г§Ъ§й§Ь§Ъ §Ъ§д§Ц§в§С§и§Ъ§Ъ, §Ь§а§Ц§д§а §б§а§Х§Х§м§в§Ш§С §Я§Ъ§г§Ь§а §Я§С§д§а§У§С§в§У§С§Я§Ц §Я§С §б§С§Ю§Ц§д§д§С §б§в§Ъ §Ф§а§Э§Ц§Ю§Ъ §Щ§С§Х§С§й§Ъ.

§¦§д§а §Ь§С§Ь §Ъ§Щ§Ф§Э§Ц§Ш§Х§С §в§С§Щ§Х§Ц§Э§с§Я§Ц§д§а §г§д§в§С§Я§Ъ§и§С §б§а §г§д§в§С§Я§Ъ§и§С §У §Я§С§Ы-§а§б§в§а§г§д§Ц§Я §У§Ъ§Х:

procedure SplitIntoPages(Source: TPdf; const OutputDir: string);

var

  I: Integer;

  PdfOut: TPdf;

  OutFile: string;

begin

  PdfOut := TPdf.Create(nil);

  try

    for I := 1 to Source.PageCount do

    begin

      PdfOut.CreateDocument;



      // Range is a 1-based page number string; insertion point 1 = first position

      PdfOut.ImportPages(Source, IntToStr(I), 1);



      OutFile := OutputDir + '\page_' + Format('%.4d', [I]) + '.pdf';

      PdfOut.SaveAs(OutFile);



      PdfOut.Active := False;   // reset before next CreateDocument

    end;

  finally

    PdfOut.Free;

  end;

end;

§±§С§в§С§Ю§Ц§д§м§в§м§д Range §Я§С ImportPages §Ц §У §г§м§л§Ъ§с §д§Ц§Ь§г§д§а§У §ж§а§в§Ю§С§д, §Ь§а§Ы§д§а PDFium §Ъ§Щ§б§а§Э§Щ§У§С §У§м§д§в§Ц§к§Я§а: §г§б§Ъ§г§м§Ь §г §Я§а§Ю§Ц§в§С §Я§С §г§д§в§С§Я§Ъ§и§Ъ, §в§С§Щ§Х§Ц§Э§Ц§Я§Ъ §г§м§г §Щ§С§б§Ц§д§С§с, §Ъ§Э§Ъ §Х§Ъ§С§б§С§Щ§а§Я§Ъ, §в§С§Щ§Х§Ц§Э§Ц§Я§Ъ §г §д§Ъ§в§Ц, §У§г§Ъ§й§Ь§Ъ §Т§С§Щ§Ъ§в§С§Я§Ъ §Я§С 1. '3' §Ъ§Ю§б§а§в§д§Ъ§в§С §г§д§в§С§Я§Ъ§и§С 3. '1-5' §Ъ§Ю§б§а§в§д§Ъ§в§С §г§д§в§С§Я§Ъ§и§Ъ §а§д 1 §Х§а 5 §б§а§Х§в§Ц§Х. '2,5,8' §Ъ§Ю§б§а§в§д§Ъ§в§С §д§Ц§Щ§Ъ §д§в§Ъ §г§д§в§С§Я§Ъ§и§Ъ. §ґ§в§Ц§д§Ъ§с§д §б§С§в§С§Ю§Ц§д§м§в §Ц §б§а§Щ§Ъ§и§Ъ§с§д§С §Щ§С §У§Ю§м§Ь§У§С§Я§Ц (§Т§С§Щ§Ъ§в§С§Я§С §Я§С 1) §У §и§Ц§Э§Ц§У§Ъ§с §Х§а§Ь§е§Ю§Ц§Я§д; §б§а§Х§С§У§С§Я§Ц§д§а §Я§С 1 §У§Ъ§Я§С§Ф§Ъ §б§а§г§д§С§У§с §Ъ§Ю§б§а§в§д§Ъ§в§С§Я§Ъ§д§Ц §г§д§в§С§Я§Ъ§и§Ъ §У §Я§С§й§С§Э§а§д§а §Я§С §б§в§С§Щ§Ц§Я §ж§С§Ы§Э, §Ь§а§Ц§д§а §Ц §и§Ц§Э§д§С §У §г§Э§е§й§С§с.

§І§С§Щ§Х§Ц§Э§с§Я§Ц §б§а §Х§Ъ§С§б§С§Щ§а§Я§Ъ §а§д §г§д§в§С§Я§Ъ§и§Ъ

§¬§а§Ф§С§д§а §Ъ§Щ§У§Ъ§Ь§У§С§л§Ъ§с§д §Ь§а§Х §б§в§Ц§Х§а§г§д§С§У§Ъ §г§б§Ъ§г§м§Ь §Ь§С§д§а 1-12,13-24,25-36, §У§Ъ§Ц §Ф§а §в§С§Щ§Х§Ц§Э§с§д§Ц §Я§С §Х§У§а§Ы§Ь§Ъ §Я§С§й§С§Э§а/§Ь§в§С§Ы §Ъ §Ъ§Щ§б§м§Э§Я§с§У§С§д§Ц §г§м§л§Ъ§с §и§Ъ§Ь§м§Э, §Ь§С§д§а §г§м§г§д§С§У§с§д§Ц §Я§Ъ§Щ §Щ§С §Х§Ъ§С§б§С§Щ§а§Я§С §а§д §У§г§с§Ь§С §Х§У§а§Ы§Ь§С:

procedure SplitByRanges(Source: TPdf; const RangeList: array of string;

  const OutputDir: string);

var

  I: Integer;

  PdfOut: TPdf;

  OutFile: string;

begin

  PdfOut := TPdf.Create(nil);

  try

    for I := 0 to High(RangeList) do

    begin

      PdfOut.CreateDocument;

      PdfOut.ImportPages(Source, RangeList[I], 1);

      OutFile := Format('%s\section_%d.pdf', [OutputDir, I + 1]);

      PdfOut.SaveAs(OutFile);

      PdfOut.Active := False;

    end;

  finally

    PdfOut.Free;

  end;

end;

§Ј§С§Э§Ъ§Х§Ъ§в§С§Я§Ц§д§а §б§в§Ц§Х§Ъ §Х§а§г§д§Ъ§Ф§С§Я§Ц §Х§а ImportPages §Ц §У§С§Ш§Я§а §д§е§Ь. ImportPages §У§в§м§л§С False, §Ь§а§Ф§С§д§а §Я§а§Ю§Ц§в §Я§С §г§д§в§С§Я§Ъ§и§С §У §Я§Ъ§Щ§С §г §Х§Ъ§С§б§С§Щ§а§Я§С §Я§С§Х§У§Ъ§к§С§У§С Source.PageCount, §Я§а §Я§Ц §б§в§Ц§Х§Ъ§Щ§У§Ъ§Ь§У§С §Ъ§Щ§Ь§Э§р§й§Ц§Я§Ъ§Ц §Ъ §Я§Ц §Ф§Ц§Я§Ц§в§Ъ§в§С §й§С§г§д§Ъ§й§Ц§Я §Ъ§Щ§з§а§Х§Ц§Я §ж§С§Ы§Э, §Ь§а§Ы§д§а §Ю§а§Ш§Ц§д§Ц §Х§С §а§д§Ь§в§Ъ§Ц§д§Ц §г§С§Ю§а §б§а §Ъ§Ю§Ц. §±§в§а§У§Ц§в§с§У§С§Ы§д§Ц §У§м§в§Я§С§д§С§д§С §г§д§а§Ы§Я§а§г§д §а§д SaveAs §Ъ §Щ§С§б§Ъ§г§У§С§Ы§д§Ц §Я§Ц§е§г§б§Ц§з§Ъ§д§Ц §а§д§Х§Ц§Э§Я§а; §Х§Ъ§С§б§С§Щ§а§Я, §Ь§а§Ы§д§а §г§м§Щ§Х§С§У§С §б§в§С§Щ§Ц§Я §Ъ§Щ§з§а§Х§Ц§Я §ж§С§Ы§Э, §Я§Ц §Ц §а§й§Ц§У§Ъ§Х§Я§а §Ф§в§Ц§к§Ц§Я, §Х§а§Ь§С§д§а §Я§с§Ь§а§Ы §Я§Ц §Ф§а §а§д§У§а§в§Ъ.

§І§С§Щ§Х§Ц§Э§с§Я§Ц §б§а §Ф§в§С§Я§Ъ§и§Ъ §Я§С §а§д§Ю§Ц§д§Ь§Ъ

§ґ§в§Ц§д§Ъ§с§д §б§а§Х§з§а§Х §Ъ§Щ§б§а§Э§Щ§У§С §г§а§Т§г§д§У§Ц§Я§С§д§С §г§д§в§е§Ь§д§е§в§С §Я§С §Х§а§Ь§е§Ю§Ц§Я§д§С §У§Ю§Ц§г§д§а §У§м§Я§к§Я§а §б§а§Х§С§Х§Ц§Я §г§б§Ъ§г§м§Ь. §Ј§г§с§Ь§С §а§д§Ю§Ц§д§Ь§С §а§д §Я§С§Ы-§У§Ъ§г§а§Ь§а §Я§Ъ§У§а §г§м§Х§м§в§Ш§С §и§Ц§Э§Ц§У§Ъ §Я§а§Ю§Ц§в §Я§С §г§д§в§С§Я§Ъ§и§С; §г§Ц§Ь§и§Ъ§с§д§С, §Ь§а§с§д§а §д§с §Х§Ц§ж§Ъ§Я§Ъ§в§С, §а§Т§з§У§С§л§С §г§д§в§С§Я§Ъ§и§Ъ§д§Ц §а§д §д§С§Щ§Ъ §г§д§в§С§Я§Ъ§и§С §Х§а §б§в§Ц§Х§з§а§Х§Я§С§д§С §Я§С §г§Э§Ц§Х§У§С§л§С§д§С §а§д§Ю§Ц§д§Ь§С, §Ъ§Э§Ъ §Х§а §Ь§в§С§с §Я§С §Х§а§Ь§е§Ю§Ц§Я§д§С §Щ§С §б§а§г§Э§Ц§Х§Я§Ъ§с §Щ§С§б§Ъ§г.

procedure SplitByBookmarks(Source: TPdf; const OutputDir: string);

var

  Bm: TBookmarks;

  I, StartPage, EndPage: Integer;

  PdfOut: TPdf;

  RangeStr, OutFile, SafeTitle: string;

begin

  Bm := Source.Bookmarks;

  if Length(Bm) = 0 then

    Exit;



  PdfOut := TPdf.Create(nil);

  try

    for I := 0 to High(Bm) do

    begin

      StartPage := Bm[I].PageNumber;

      if I < High(Bm) then

        EndPage := Bm[I + 1].PageNumber - 1

      else

        EndPage := Source.PageCount;



      if (StartPage < 1) or (EndPage < StartPage) then

        Continue;



      RangeStr := Format('%d-%d', [StartPage, EndPage]);



      PdfOut.CreateDocument;

      PdfOut.ImportPages(Source, RangeStr, 1);



      SafeTitle := StringReplace(Bm[I].Title, '/', '_', [rfReplaceAll]);

      SafeTitle := StringReplace(SafeTitle, ':', '_', [rfReplaceAll]);

      OutFile := Format('%s\%02d_%s.pdf', [OutputDir, I + 1, SafeTitle]);

      PdfOut.SaveAs(OutFile);



      PdfOut.Active := False;

    end;

  finally

    PdfOut.Free;

  end;

end;

§Ґ§а§Ь§е§Ю§Ц§Я§д §Т§Ц§Щ §а§д§Ю§Ц§д§Ь§Ъ §Я§Ц §Ц §г§м§г§д§а§с§Я§Ъ§Ц §Я§С §Ф§в§Ц§к§Ь§С, §Ь§а§Ц§д§а §д§в§с§Т§У§С §Х§С §г§Ц §б§а§Ь§С§Щ§У§С §Я§С §б§а§д§в§Ц§Т§Ъ§д§Ц§Э§с §Ь§С§д§а §д§С§Ь§а§У§С; §д§а§У§С §б§в§а§г§д§а §а§Щ§Я§С§й§С§У§С, §й§Ц §д§а§Щ§Ъ §в§Ц§Ш§Ъ§Ю §Я§С §в§С§Щ§Х§Ц§Э§с§Я§Ц §Я§с§Ю§С §Х§С§Я§Я§Ъ §Щ§С §в§С§Т§а§д§С. §©§С§л§Ъ§д§С§д§С Length(Bm) = 0 §г§Ц §г§б§в§С§У§с §г §д§а§У§С §Т§Ц§Щ§к§е§Ю§Я§а. §ґ§а§У§С, §Ь§а§Ц§д§а §г§Ъ §г§д§в§е§У§С §Х§С §г§Ц §б§а§Ь§С§Ш§Ц, §Ц §Ь§а§Ф§С§д§а §Я§а§Ю§Ц§в§м§д §Я§С §г§д§в§С§Я§Ъ§и§С§д§С §Я§С §Х§С§Х§Ц§Я§С §а§д§Ю§Ц§д§Ь§С §Ц §Ъ§Щ§У§м§Я §Х§Ъ§С§б§С§Щ§а§Я§С §Я§С §Х§а§Ь§е§Ю§Ц§Я§д§С, §Ь§а§Ц§д§а §г§Ц §г§Э§е§й§У§С §б§в§Ъ §б§а§У§в§Ц§Х§Ц§Я§Ъ §ж§С§Ы§Э§а§У§Ц, §Ь§м§Х§Ц§д§а §г§д§в§е§Ь§д§е§в§С§д§С §Я§С §а§д§Ю§Ц§д§Ь§Ъ§д§Ц §Я§Ц §Ц §Т§Ъ§Э§С §С§Ь§д§е§С§Э§Ъ§Щ§Ъ§в§С§Я§С §г§Э§Ц§Х §Ъ§Щ§д§в§Ъ§У§С§Я§Ц §Я§С §г§д§в§С§Я§Ъ§и§Ъ. §±§в§а§У§Ц§в§Ь§С§д§С §Я§С §Ф§в§С§Я§Ъ§и§Ъ§д§Ц §Щ§С StartPage §Ъ EndPage §б§в§а§б§е§г§Ь§С §д§Ц§Щ§Ъ §Щ§С§б§Ъ§г§Ъ, §У§Ю§Ц§г§д§а §Х§С §б§в§Ц§Х§С§У§С §Я§Ц§У§С§Э§Ъ§Х§Ц§Я §Х§Ъ§С§б§С§Щ§а§Я §Я§С ImportPages.

§Є§Ю§Ц§Я§е§У§С§Я§Ц §Я§С §Ъ§Щ§з§а§Х§Я§Ъ§д§Ц §ж§С§Ы§Э§а§У§Ц §Ъ §Я§е§Э§Ъ§в§С§Я§Ц §Я§С Active

§ў§Ц§Щ§а§б§С§г§Я§а§г§д§д§С §Я§С §Ъ§Ю§Ц§Я§С§д§С §Я§С §ж§С§Ы§Э§а§У§Ц§д§Ц, §Т§С§Щ§Ъ§в§С§Я§Ъ §Я§С §а§д§Ю§Ц§д§Ь§Ъ, §Ъ§Щ§Ъ§г§Ь§У§С §Ъ§Щ§в§Ъ§й§Я§а §У§Я§Ъ§Ю§С§Я§Ъ§Ц. §©§С§Ф§Э§С§У§Ъ§с§д§С §Я§С §а§д§Ю§Ц§д§Ь§Ъ§д§Ц §Ю§а§Ф§С§д §Х§С §г§м§Х§м§в§Ш§С§д §Щ§Я§С§и§Ъ, §Ь§а§Ъ§д§а §г§С §У§С§Э§Ъ§Х§Я§Ъ §У PDF §Я§Ъ§Щ, §Я§а §Я§Ц §Ъ §У §б§м§д §Ь§м§Ю §ж§С§Ы§Э§а§У§С§д§С §г§Ъ§г§д§Ц§Ю§С. §¬§С§д§а §Ю§Ъ§Я§Ъ§Ю§е§Ю §Щ§С§Ю§Ц§Я§Ц§д§Ц §Я§С§Ь§Э§а§Я§Ц§Я§С §й§Ц§в§д§С, §а§Т§в§С§д§Я§С §Я§С§Ь§Э§а§Я§Ц§Я§С §й§Ц§в§д§С §Ъ §Х§У§а§Ц§д§а§й§Ъ§Ц, §б§в§Ц§Х§Ъ §Х§С §Ъ§Щ§Ф§в§С§Х§Ъ§д§Ц §Ъ§Щ§з§а§Х§Я§Ъ§с §б§м§д. §Ј Windows §Щ§Я§С§и§Ъ §Ь§С§д§а *, ?, ", <, > §Ъ | §г§м§л§а §г§С §Щ§С§Т§в§С§Я§Ц§Я§Ъ; §б§в§а§г§д §и§Ъ§Ь§м§Э §У§м§в§з§е §ж§Ъ§Ь§г§Ъ§в§С§Я §Я§С§Т§а§в §Ф§Ъ §б§а§Ь§в§Ъ§У§С, §Т§Ц§Щ §Х§С §г§Ц §Я§С§Э§С§Ф§С §Ъ§Щ§б§а§Э§Щ§У§С§Я§Ц§д§а §Я§С §в§Ц§Ф§е§Э§с§в§Ц§Я §Ъ§Щ§в§С§Щ.

§І§Ц§Х§м§д Active := False §У §Ь§в§С§с §Я§С §У§г§с§Ь§С §Ъ§д§Ц§в§С§и§Ъ§с §Щ§С§г§Э§е§Ш§С§У§С §г§б§Ц§и§Ъ§С§Э§Я§а §У§Я§Ъ§Ю§С§Я§Ъ§Ц, §д§м§Ы §Ь§С§д§а §Ц §Ц§Х§Ъ§Я§г§д§У§Ц§Я§а§д§а §Я§Ц§а§й§Ц§У§Ъ§Х§Я§а §Ъ§Щ§Ъ§г§Ь§У§С§Я§Ц §У §д§а§Щ§Ъ §к§С§Т§Э§а§Я. CreateDocument §Я§Ц §Щ§С§д§У§С§в§с §С§У§д§а§Ю§С§д§Ъ§й§Я§а §д§а§У§С, §Ь§а§Ц§д§а §Ц §а§д§У§а§в§Ц§Я§а. §Ў§Ь§а Active §У§г§Ц §а§л§Ц §Ц True §б§в§Ъ §г§Э§Ц§Х§У§С§л§а§д§а §Ъ§Щ§У§Ъ§Ь§У§С§Я§Ц §Я§С CreateDocument, PDFium §а§д§з§У§м§в§Э§с §д§Ц§Ь§е§л§Ъ§с §Х§а§Ь§е§Ю§Ц§Я§д §Ъ §г§д§С§в§д§Ъ§в§С §Я§а§У §Т§Ц§Щ §Ф§в§Ц§к§Ь§С, §Я§а §б§а§У§Ц§Х§Ц§Я§Ъ§Ц§д§а §У §Ф§в§С§Я§Ъ§й§Я§Ъ §г§Э§е§й§С§Ъ §Щ§С§У§Ъ§г§Ъ §а§д §Ъ§Ю§б§Э§Ц§Ю§Ц§Я§д§С§и§Ъ§с§д§С §Ъ §Я§С§Ю§Ц§в§Ц§Я§Ъ§Ц§д§а §Ц §б§а-§с§г§Я§а, §Ь§а§Ф§С§д§а §Я§е§Э§Ъ§в§С§д§Ц §Ъ§Щ§в§Ъ§й§Я§а. §®§Ъ§г§Э§Ц§д§Ц §Щ§С §д§а§У§С §Ь§С§д§а §Х§У§а§Ы§Ь§С §Ь§м§Ю try/finally: §Т§Э§а§Ь§м§д finally §а§г§У§а§Т§а§Ш§Х§С§У§С §У§м§Я§к§Я§Ъ§с §а§Т§Ц§Ь§д, §Х§а§Ь§С§д§а Active := False §Я§е§Э§Ъ§в§С §г§м§г§д§а§с§Я§Ъ§Ц§д§а §Я§С §У§м§д§в§Ц§к§Я§Ъ§с §Х§а§Ь§е§Ю§Ц§Я§д §Ю§Ц§Ш§Х§е §Ъ§д§Ц§в§С§и§Ъ§Ъ§д§Ц §Я§С §и§Ъ§Ь§м§Э§С.

§Є§Щ§б§а§Э§Щ§У§С§Я§Ц§д§а §Я§С §б§С§Ю§Ц§д §б§в§Ъ §Ф§а§Э§с§Ю§С §Щ§С§Х§С§й§С §Щ§С §в§С§Щ§Х§Ц§Э§с§Я§Ц §а§г§д§С§У§С §г§д§С§Т§Ъ§Э§Я§а §г §д§а§Щ§Ъ §б§а§Х§з§а§Х, §д§м§Ы §Ь§С§д§а §Я§Ъ§Ь§а§Ф§С §Я§Ц §Х§м§в§Ш§Ъ§д§Ц §б§а§У§Ц§й§Ц §а§д §а§Х§Ъ§Я §Ъ§Щ§з§а§Х§Ц§Я §Х§а§Ь§е§Ю§Ц§Я§д §У §б§С§Ю§Ц§д§д§С §Ц§Х§Я§а§У§в§Ц§Ю§Ц§Я§Я§а. §Є§Щ§з§а§Х§Я§Ъ§с§д §Х§а§Ь§е§Ю§Ц§Я§д §а§г§д§С§У§С §а§д§У§а§в§Ц§Я §Ъ §Х§а§г§д§м§б§Ц§Я §г§С§Ю§а §Щ§С §й§Ц§д§Ц§Я§Ц §б§в§Ц§Щ §и§с§Э§а§д§а §У§в§Ц§Ю§Ц; ImportPages §Ь§а§б§Ъ§в§С §Х§С§Я§Я§Ъ§д§Ц §Я§С §г§д§в§С§Я§Ъ§и§Ъ§д§Ц §У §Я§а§У§Ъ§с §Х§а§Ь§е§Ю§Ц§Я§д, §Т§Ц§Щ §Х§С §б§в§а§Ю§Ц§Я§с §Ъ§Щ§д§а§й§Я§Ъ§Ь§С. §Ў§Ь§а §Ъ§Щ§д§а§й§Я§Ъ§Ь§м§д §Ц §к§Ъ§ж§в§Ъ§в§С§Я, §а§д§У§а§в§Ц§д§Ц §Ф§а §г §Я§Ц§Ф§а§У§С§д§С §б§С§в§а§Э§С §б§в§Ц§Х§Ъ §и§Ъ§Ь§м§Э§С §Ъ §Ь§а§б§Ъ§в§С§Я§Ъ§д§Ц §г§д§в§С§Я§Ъ§и§Ъ §У§м§У §У§г§Ц§Ь§Ъ §Ъ§Щ§з§а§Х§Ц§Я §ж§С§Ы§Э §л§Ц §Т§м§Х§С§д §Я§Ц§к§Ъ§ж§в§Ъ§в§С§Я§Ъ, §Ь§а§Ц§д§а §а§Т§Ъ§Ь§Я§а§У§Ц§Я§а §Ц §б§в§С§У§Ъ§Э§Я§а§д§а §б§а§У§Ц§Х§Ц§Я§Ъ§Ц §б§в§Ъ §в§С§Щ§б§в§а§г§д§в§С§Я§Ц§Я§Ъ§Ц §Я§С §в§С§Щ§Х§Ц§Э§Ц§Я§Ъ§с §в§Ц§Щ§е§Э§д§С§д §Х§а §в§С§Щ§Э§Ъ§й§Я§Ъ §б§а§Э§е§й§С§д§Ц§Э§Ъ.

§°§л§Ц §Я§Ц§л§а §Щ§С SaveAs: §д§а§Ы §У§в§м§л§С Boolean. §Ї§Ц§г§м§л§Ц§г§д§У§е§У§С§л§С §Ъ§Щ§з§а§Х§Я§С §Х§Ъ§в§Ц§Ь§д§а§в§Ъ§с, §б§м§д §г§м§г §Щ§Я§С§и§Ъ, §Ь§а§Ъ§д§а §а§б§Ц§в§С§и§Ъ§а§Я§Я§С§д§С §г§Ъ§г§д§Ц§Ю§С §а§д§з§У§м§в§Э§с, §Ъ§Э§Ъ §б§м§Э§Я§С §Х§Ъ§г§Ь§а§У§С §б§С§Ю§Ц§д §л§Ц §Я§С§Ь§С§в§С§д SaveAs §Х§С §У§м§в§Я§Ц False, §Т§Ц§Щ §Х§С §б§в§Ц§Х§Ъ§Щ§У§Ъ§Ь§С §Ъ§Щ§Ь§Э§р§й§Ц§Я§Ъ§Ц. §±§в§Ъ §б§С§Ь§Ц§д§Я§С §Щ§С§Х§С§й§С, §Ь§а§с§д§а §в§С§Щ§Х§Ц§Э§с §Х§а§Ь§е§Ю§Ц§Я§д §а§д 200 §г§д§в§С§Я§Ъ§и§Ъ §Я§С 200 §а§д§Х§Ц§Э§Я§Ъ §ж§С§Ы§Э§С, §Т§Ц§Щ§к§е§Ю§Ц§Я §Я§Ц§е§г§б§Ц§з §Я§С §г§д§в§С§Я§Ъ§и§С 147 §Ю§а§Ш§Ц §Э§Ц§г§Я§а §Х§С §Т§м§Х§Ц §б§в§а§б§е§г§Я§С§д. §±§в§а§У§Ц§в§с§У§С§Ы§д§Ц §У§м§в§Я§С§д§С§д§С §г§д§а§Ы§Я§а§г§д §б§в§Ъ §У§г§с§Ь§а §Ъ§Щ§У§Ъ§Ь§У§С§Я§Ц §Ъ §г§в§С§У§Я§с§У§С§Ы§д§Ц §Т§в§а§с §е§г§б§Ц§к§Я§Ъ §а§б§Ъ§д§Ъ §г §а§й§С§Ь§У§С§Я§Ъ§с §а§Т§л §Т§в§а§Ы, §Ь§а§Ф§С§д§а §и§Ъ§Ь§м§Э§м§д §б§в§Ъ§Ь§Э§р§й§Ъ.

§®§Ц§д§а§Х§Ъ§д§Ц ImportPages §Ъ CreateDocument, §б§а§Ь§С§Щ§С§Я§Ъ §д§е§Ь, §г§С §й§С§г§д §а§д PDFium VCL §Щ§С Delphi §Ъ C++Builder.