17-10-2020, Saat: 02:24
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ı :
Dfm Dosyası :
Dpr Dosyası :
Hayırlı olsun.
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
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.

