Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Hazır pdf okuma, ekleme, imzalama ve yazdırma projesi (kaynak kod)
#1
Merhaba, 

Pdf üzerinde bir türlü ralı yazdırma yapamamdan dolayı, başkaları da sıkıntı yaşamasın diye, Size Allah rızası için güzel bir kaynak hazırladım. 

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 Smile

       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ı

           Kaynak : https://www.gnostice.com/nl_article.asp?...ting_A_PDF

           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.

Hayırlı olsun.


Ek Dosyalar
.zip   DelphiCanPdfPrint.zip (Dosya Boyutu: 57,05 KB / İndirme Sayısı: 23)
Cevapla
#2
Teşekkürler elinize sağlık.
Cevapla
#3
Güzel bir çalışma ve kodlar. elinize sağlık
// Bilgi paylaştıkça çoğalır.. 

Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi'de Veritabanı İle Kullanıcı Ekleme Halil Han BADEM 6 1.931 28-08-2020, Saat: 13:47
Son Yorum: akuyumcu63
  Transaction Log (İşlem Günlüğü) Dosyasını Okuma csunguray 9 3.254 30-12-2018, Saat: 09:07
Son Yorum: csunguray
  Windows registry çoklu dize (multi string) değeri okuma ve yazma sabanakman 0 901 21-11-2018, Saat: 13:27
Son Yorum: sabanakman
  Hazır Emoji Paketi yhackup 2 2.086 25-02-2017, Saat: 23:20
Son Yorum: odemir01



Konuyu Okuyanlar: 1 Ziyaretçi