Delphi ile PDF okuma , ekleme , imzalama ve yazdırma programı (Açık Kodlar)

Delphi programlama dili üzerinden pdf ile ilgili okuma yazma imzalama ve yazdırma işlemlerini yapabileceğiniz tamamen açık ve erişilebilir kaynak kodlarını sizler için paylaşıyoruz. Sorun yaşayan arkadaşlar yorum kısmına destek mesajı atabilirler.

Kullanılan Bileşenler :

– OpenDialog
– StatusBar
– MainMenu
– PdfToolkit : https://www.gnostice.com/downloads/pdftoolkit_t_pp.exe

Açık kaynaktır. Üzerinde istediğiniz gibi geliştirme yapabilirsiniz.

Pas Dosyası :

unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.Menus,
Vcl.ExtCtrls, gtPDFSearchPanel, gtPDFPrinter, gtPDFOutlineViewer,
gtScrollingPanel, gtPDFViewer, gtPDFClasses, gtCstPDFDoc, gtExPDFDoc,
gtExProPDFDoc, gtPDFDoc, jpeg;
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
gtPDFDocument1: TgtPDFDocument;
gtPDFViewer1: TgtPDFViewer;
gtPDFOutlineViewer1: TgtPDFOutlineViewer;
gtPDFPrinter1: TgtPDFPrinter;
gtPDFSearchPanel1: TgtPDFSearchPanel;
MainMenu1: TMainMenu;
MenuSecenekleri: TMenuItem;
OpenDialog1: TOpenDialog;
N1: TMenuItem;
Pdf_Cagir_File: TMenuItem;
Pdf_Cagir_Stream: TMenuItem;
Pdf_Imzala: TMenuItem;
Pdf_BaziAyarlar: TMenuItem;
Pdf_ResimEkle: TMenuItem;
Pdf_Yazdir: TMenuItem;
Pdf_Kaydet: TMenuItem;
procedure Pdf_Cagir_FileClick(Sender: TObject);
procedure Pdf_BaziAyarlarClick(Sender: TObject);
procedure Pdf_KaydetClick(Sender: TObject);
procedure Pdf_YazdirClick(Sender: TObject);
procedure Pdf_ImzalaClick(Sender: TObject);
procedure Pdf_ResimEkleClick(Sender: TObject);
procedure Pdf_Cagir_StreamClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Pdf_Cagir_FileClick(Sender: TObject);
begin
gtPDFDocument1.Reset; //Belgeyi temizle
StatusBar1.Panels[0].Text:=''; //Sayfa Sayısı
StatusBar1.Panels[1].Text:=''; //Yazdırılacak yazıcı
StatusBar1.Panels[2].Text:=''; //unuttum <img src="https://www.delphican.com/images/smilies/smile.png" alt="Smile" title="Smile" class="smilie smilie_1">
If OpenDialog1.Execute=True then
begin
If gtPDFDocument1.LoadFromFile(OpenDialog1.FileName)=True Then
If gtPDFDocument1.IsLoaded=True Then
begin
gtPDFPrinter1.PDFDocument       := gtPDFDocument1; //Yzıcı nesnesine bağlıyoruz
gtPDFPrinter1.SelectPrinterByName(gtPDFPrinter1.GetInstalledPrinters[0]); //ilk yazıcımızı atıyoruz
StatusBar1.Panels[1].Text       :=  gtPDFPrinter1.GetInstalledPrinters[0];
gtPDFViewer1.PDFDocument        :=  gtPDFDocument1;
gtPDFViewer1.Active             :=  True; // Dökümanda görünmesi için.
StatusBar1.Panels[0].Text       :=  IntToStr(gtPDFDocument1.PageCount);
gtPDFOutlineViewer1.PDFDocument :=  gtPDFDocument1; //Belge içindeki değerlerin özel olarak listelenmesi
gtPDFOutlineViewer1.PDFViewer   :=  gtPDFViewer1;
gtPDFOutlineViewer1.Active      :=  True;
gtPDFSearchPanel1.PDFDocument   :=  gtPDFDocument1; //Arama kısmının aktifleşmesi
gtPDFSearchPanel1.PDFViewer     :=  gtPDFViewer1;
gtPDFSearchPanel1.Active        :=  True;
end;
end;
end;
procedure TForm1.Pdf_Cagir_StreamClick(Sender: TObject);
var
MemoryStream1: TMemoryStream;
begin
gtPDFDocument1.Reset; //Belgeyi temizle
If OpenDialog1.Execute=True then
begin
MemoryStream1 := TMemoryStream.Create;
try
MemoryStream1.LoadFromFile(OpenDialog1.FileName);
gtPDFDocument1.LoadFromStream(MemoryStream1);
finally
MemoryStream1.Free;
end;
end;
end;
procedure TForm1.Pdf_ImzalaClick(Sender: TObject);
begin
gtPDFDocument1.AddSignature(
'trabzon.pdf',              //PFXFileName: AnsiString;
'6161',                     //PFXPassword: AnsiString;
//    '20.06.2006 17:30',         //TimeStamp: TDateTime;
'ben imzami atarim arkadas',//Reason: AnsiString = '';
'trabzon',                  //Location: AnsiString = '';
'0 661 661 61 61',          //ContactInfo: AnsiString = '';
1,                          //PageNumber: Integer = 1;
'trabzon'                   //FieldName: AnsiString = ''
);
end;
procedure TForm1.Pdf_BaziAyarlarClick(Sender: TObject);
begin
gtPDFDocument1.MeasurementUnit :=  muInches;//Kullanılacak ölçü birimi
gtPDFDocument1.ShowSetupDialog :=  false;//Yazdırma ayarları penceresi açılmasın
gtPDFDocument1.OpenAfterSave   :=  false;//Dosyaya kaydedildikten sonra görüntülenecek belgeyi ayarlama
gtPDFViewer1.ZoomIn;//Büyüt
gtPDFViewer1.ZoomOut;//Küçült
gtPDFViewer1.Zoom:=100;//Eşitle
gtPDFPrinter1.IgnoreHardMargin := True; //Bir yazıcının sabit kenar boşluklarının göz ardı edilmesi gerekip gerekmediğini ve içeriği sabit kenar boşluklarının "üzerine" yazdırılmasının gerekip gerekmediğini belirtir.
{
IgnoreHardMargin := Boolean; Uyarıları
Fiziksel bir yazıcıda sert kenar boşlukları olduğunda, bu kenar boşluklarının kapladığı alanlara yazdırmaz. Yalnızca kalan alana yazdıracaktır.
Bu yazıcıları kullanarak yazdırdığınızda, PDFOne'ın yazıcı bileşeni, kağıdın dört kenarındaki bu sert kenar boşluklarını kaydırdıktan sonra yazdıracaktır. Bu, yazdırma içeriğinin her yönden küçülmesine veya sağ ve alt kenar boşluklarındaki bazı içeriğin kırpılmasına neden olabilir.
Bu sorunu önlemek için bu özelliği true olarak ayarlamanız gerekir. Bu, yazıcı bileşeninin fiziksel yazıcının sert kenar boşluklarını göz ardı etmesini sağlayacaktır. Yazıcı bileşeni, sanki sert kenar boşlukları yokmuş ve fiziksel yazıcıdaki sayfanın tamamı yazdırılmaya hazırmış gibi yazdırır. Fiziksel yazıcı sert kenar boşluklarına gerçekten yazdıramadığından, kenar boşluklarının üzerindeki PDF sayfası içeriği kırpılır veya yazdırılmaz.
PDF sayfaları genellikle dört kenar boyunca beyaz boşluk içerdiğinden, bu bir sorun değildir. (Kullanıcılar beyaz boşluğu kenar boşlukları olarak görme eğilimindedir, ancak PDF'nin dahili olarak herhangi bir kenar boşluğu kavramı yoktur.)
Bu özellik true değerine ayarlandığında, aşağıdaki durumlarda hiçbir görüntülenebilir içerik kaybolmaz:
PDF sayfa boyutu, yazıcı sayfa boyutundan küçük veya ona eşit ve
PDF sayfasında, yazıcının sert kenar boşluklarını aşan herhangi bir içerik yok
}
end;
procedure TForm1.Pdf_ResimEkleClick(Sender: TObject);
var
JPEGImage1: TJPEGImage;
begin
//Uses SysUtils, jpeg, gtPDFDoc;
JPEGImage1 := TJPEGImage.Create();
try
JPEGImage1.LoadFromFile('thumbnail.jpg');
gtPDFDocument1.AddThumbnail(1, JPEGImage1); //1. sayfasına jpg resmi ekle
finally
JPEGImage1.Free;
end;
end;
procedure TForm1.Pdf_YazdirClick(Sender: TObject);
begin
gtPDFPrinter1.ShowSetupDialog  :=  False;//Yazıcı ayarları seçimi
gtPDFPrinter1.Options          :=  [poPageNums];
gtPDFPrinter1.PrintRange       :=  prPageNums;
gtPDFPrinter1.FromPage         :=  1; //gtPDFDocument1.PageCount div 2;
gtPDFPrinter1.ToPage           :=  gtPDFDocument1.PageCount;
gtPDFPrinter1.PrintDoc; //Yazdır
end;
procedure TForm1.Pdf_KaydetClick(Sender: TObject);
begin
gtPDFDocument1.SaveToFile('delphican61.pdf');
end;
end.
DFM dosyası
object Form1: TForm1
Left = 0
Top = 0
Caption = 'DelphiCan.com Pdf Okuma / '#304'mzalama / Yazd'#305'rma'
ClientHeight = 524
ClientWidth = 937
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Menu = MainMenu1
OldCreateOrder = False
Position = poScreenCenter
PixelsPerInch = 96
TextHeight = 13
object StatusBar1: TStatusBar
Left = 0
Top = 505
Width = 937
Height = 19
Panels = <
item
Width = 150
end
item
Width = 150
end
item
Width = 150
end>
end
object gtPDFViewer1: TgtPDFViewer
Left = 262
Top = 0
Width = 554
Height = 505
Cursor = 1
Align = alClient
Color = clGray
DockOrientation = doNoOrient
ParentColor = False
TabOrder = 1
TabStop = True
About = 'Gnostice PDFtoolkit (http://www.gnostice.com)'
Status = 'PDF Viewer loaded Successfully.'
SearchHighlightColor = clGray
Version = '5.0.0.838'
ViewerMode = vmHand
AllowImageCopy = False
SelectedRegionColor = clSkyBlue
HighlightRegionColor = clYellow
HighlightRegionShape = stRectangle
BackgroundRendering = False
Caching.Enabled = True
Caching.DocumentCount = 10
HighlightFormFields = False
end
object gtPDFOutlineViewer1: TgtPDFOutlineViewer
Left = 816
Top = 0
Width = 121
Height = 505
About = 'Gnostice PDFtoolkit (http://www.gnostice.com)'
Align = alRight
BorderStyle = bsNone
Indent = 19
TabOrder = 2
Active = False
Version = '5.0.0.838'
end
object gtPDFSearchPanel1: TgtPDFSearchPanel
Left = 0
Top = 0
Width = 262
Height = 505
About = 'Gnostice PDFtoolkit (http://www.gnostice.com)'
Active = False
Align = alLeft
Constraints.MinHeight = 160
Constraints.MinWidth = 262
Color = clWhite
TabOrder = 3
Version = '5.0.0.838'
end
object gtPDFDocument1: TgtPDFDocument
About = 'Gnostice PDFtoolkit (http://www.gnostice.com)'
Version = '5.0.0.838'
OpenAfterSave = False
MergeOptions = []
EMailAfterSave = False
ShowSetupDialog = False
Left = 88
Top = 232
end
object gtPDFPrinter1: TgtPDFPrinter
Collate = True
Options = [poPageNums]
About = 'Gnostice PDFtoolkit (http://www.gnostice.com)'
Version = '5.0.0.838'
AutoRotate = False
IgnoreHardMargin = True
RenderingOptions = []
Left = 56
Top = 232
end
object MainMenu1: TMainMenu
Left = 24
Top = 232
object MenuSecenekleri: TMenuItem
Caption = 'Men'#252' Se'#231'enekleri'
object Pdf_Cagir_File: TMenuItem
Caption = 'Pdf '#231'a'#287#305'r (wiev)'
OnClick = Pdf_Cagir_FileClick
end
object Pdf_Cagir_Stream: TMenuItem
Caption = 'Pdf '#199'a'#287#305'r (Stream)'
OnClick = Pdf_Cagir_StreamClick
end
object N1: TMenuItem
Caption = '-'
end
object Pdf_Imzala: TMenuItem
Caption = 'Pdf imzala'
OnClick = Pdf_ImzalaClick
end
object Pdf_BaziAyarlar: TMenuItem
Caption = 'Pdf baz'#305' ayarlar'
OnClick = Pdf_BaziAyarlarClick
end
object Pdf_ResimEkle: TMenuItem
Caption = 'Pdf i'#231'ine JPG resim ekleme'
OnClick = Pdf_ResimEkleClick
end
object Pdf_Yazdir: TMenuItem
Caption = 'pdf yazd'#305'r'
OnClick = Pdf_YazdirClick
end
object Pdf_Kaydet: TMenuItem
Caption = 'pdf kaydet'
OnClick = Pdf_KaydetClick
end
end
end
object OpenDialog1: TOpenDialog
Left = 120
Top = 232
end
end
DPR dosyası
program DelphiCanPdfPrint;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir