PDF belgeleri gömülü dosya ekleri içerebilir; bu, e-tablolar, resimler veya destekleyici belgeler gibi ilgili dosyaları bir araya getirmek için güçlü bir özelliktir. Eklenti demo, PDFium VCL kullanılarak PDF ekleriyle nasıl çalışılacağını gösterir.
Genel Bakış
Bu demo, PDF belgelerinden dosya eklerinin listelenmesi, çıkarılması, eklenmesi ve silinmesi de dahil olmak üzere eksiksiz bir ek yönetimi sağlar. Karmaşık PDF dosyalarını işlemesi gereken belge yönetimi sistemleri için gereklidir.
Temel Özellikler
- Ekleri Listele – PDF'deki tüm gömülü dosyaları görüntüleyin
- Ekleri Çıkart – Ekleri diske kaydet
- Ek Ekle – Yeni dosyaları PDF'lere gömün
- Ekleri Sil – PDF'lerden ekleri kaldırın
- Ayrıntıları Görüntüle – Ek adlarına ve boyutlarına bakın
PDFium DLL Gereksinimleri
Herhangi bir PDFium VCL uygulamasını çalıştırmadan önce PDFium DLL dosyalarının kurulu olduğundan emin olun:
pdfium32.dll/pdfium64.dll– Standart sürümler (~5-6 MB)pdfium32v8.dll/pdfium64v8.dll– V8 JavaScript motoruyla (~23-27 MB)
Kurulum: Çalıştır
DLL'leri otomatik olarak Windows sistem dizinlerine kopyalamak için Yönetici olarak PDFiumVCL\DLLs\CopyDlls.bat .
Ekleri Listeleme
Urvanov Sözdizimi Vurgulayıcı v2.9.1|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
procedure TFormMain.RefreshAttachmentList; var I: Integer; AttachmentName: string; AttachmentData: TBytes; SizeStr: string; begin ListBoxAttachments.Items.Clear; if not Pdf.Active then Exit; for I := 0 to Pdf.AttachmentCount - 1 do begin AttachmentName := Pdf.AttachmentName[I]; AttachmentData := Pdf.Attachment[I]; // Format size if Length(AttachmentData) >= 1024 * 1024 then SizeStr := Format('%.2f MB', [Length(AttachmentData) / (1024 * 1024)]) else if Length(AttachmentData) >= 1024 then SizeStr := Format('%.2f KB', [Length(AttachmentData) / 1024]) else SizeStr := Format('%d bytes', [Length(AttachmentData)]); ListBoxAttachments.Items.Add(Format('%s (%s)', [AttachmentName, SizeStr])); end; LogStatus(Format('Found %d attachment(s)', [Pdf.AttachmentCount])); end; |
Ekler Çıkarılıyor
Urvanov Sözdizimi Vurgulayıcı v2.9.1|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
procedure TFormMain.ButtonExtractAttachmentClick(Sender: TObject); var Index: Integer; AttachmentName: string; AttachmentData: TBytes; FileStream: TFileStream; begin Index := GetSelectedAttachmentIndex; if Index < 0 then begin LogStatus('Please select an attachment to extract.'); Exit; end; try AttachmentName := Pdf.AttachmentName[Index]; AttachmentData := Pdf.Attachment[Index]; SaveDialog.FileName := AttachmentName; if SaveDialog.Execute then begin FileStream := TFileStream.Create(SaveDialog.FileName, fmCreate); try if Length(AttachmentData) > 0 then FileStream.WriteBuffer(AttachmentData[0], Length(AttachmentData)); LogStatus('Extracted: ' + SaveDialog.FileName); finally FileStream.Free; end; end; except on E: Exception do LogStatus('Error extracting attachment: ' + E.Message); end; end; |
Ekler Ekleme
Urvanov Sözdizimi Vurgulayıcı v2.9.1|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
procedure TFormMain.ButtonAddAttachmentClick(Sender: TObject); var AttachmentName: string; FileData: TBytes; FileStream: TFileStream; begin if not Pdf.Active then begin LogStatus('Please load or create a PDF document first.'); Exit; end; OpenDialog.Filter := 'All Files|*.*'; if OpenDialog.Execute then begin try // Read file into byte array FileStream := TFileStream.Create(OpenDialog.FileName, fmOpenRead); try SetLength(FileData, FileStream.Size); if FileStream.Size > 0 then FileStream.ReadBuffer(FileData[0], FileStream.Size); finally FileStream.Free; end; // Use filename as attachment name AttachmentName := ExtractFileName(OpenDialog.FileName); // Create attachment slot if Pdf.CreateAttachment(AttachmentName) then begin // Find the new attachment and set its data Pdf.Attachment[Pdf.AttachmentCount - 1] := FileData; LogStatus('Added attachment: ' + AttachmentName); RefreshAttachmentList; end else LogStatus('Failed to create attachment: ' + AttachmentName); except on E: Exception do LogStatus('Error adding attachment: ' + E.Message); end; end; end; |
Ekleri Silme
Urvanov Sözdizimi Vurgulayıcı v2.9.1|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
procedure TFormMain.ButtonDeleteAttachmentClick(Sender: TObject); var Index: Integer; AttachmentName: string; begin Index := GetSelectedAttachmentIndex; if Index < 0 then begin LogStatus('Please select an attachment to delete.'); Exit; end; try AttachmentName := Pdf.AttachmentName[Index]; if MessageDlg(Format('Delete attachment "%s"?', [AttachmentName]), mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin if Pdf.DeleteAttachment(Index) then begin LogStatus('Deleted attachment: ' + AttachmentName); RefreshAttachmentList; end else LogStatus('Failed to delete attachment.'); end; except on E: Exception do LogStatus('Error deleting attachment: ' + E.Message); end; end; |
Ek Özelliklerine Erişim
Urvanov Sözdizimi Vurgulayıcı v2.9.1|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Number of attachments Count := Pdf.AttachmentCount; // Attachment name at index Name := Pdf.AttachmentName[Index]; // Attachment data as byte array Data := Pdf.Attachment[Index]; // Set attachment data Pdf.Attachment[Index] := NewData; // Create new attachment Success := Pdf.CreateAttachment('filename.txt'); // Delete attachment Success := Pdf.DeleteAttachment(Index); |
Eklerle Yeni Bir Belge Oluşturma
Urvanov Sözdizimi Vurgulayıcı v2.9.1|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
procedure CreatePdfWithAttachments; var Pdf: TPdf; FileData: TBytes; FileStream: TFileStream; begin Pdf := TPdf.Create(nil); try // Create new document Pdf.CreateDocument; Pdf.Active := True; // Add a page Pdf.AddPage(1, 595, 842); Pdf.PageNumber := 1; Pdf.AddText('Document with Attachments', 'Arial', 18, 50, 750, clBlack, $FF, 0.0); // Add first attachment FileStream := TFileStream.Create('data.csv', fmOpenRead); try SetLength(FileData, FileStream.Size); FileStream.ReadBuffer(FileData[0], FileStream.Size); finally FileStream.Free; end; if Pdf.CreateAttachment('data.csv') then Pdf.Attachment[0] := FileData; // Add second attachment FileStream := TFileStream.Create('readme.txt', fmOpenRead); try SetLength(FileData, FileStream.Size); FileStream.ReadBuffer(FileData[0], FileStream.Size); finally FileStream.Free; end; if Pdf.CreateAttachment('readme.txt') then Pdf.Attachment[1] := FileData; // Save Pdf.SaveAs('document_with_attachments.pdf'); finally Pdf.Active := False; Pdf.Free; end; end; |
Değişikliklerden Sonra Belgeyi Kaydetme
Urvanov Sözdizimi Vurgulayıcı v2.9.1|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
procedure TFormMain.ButtonSaveDocumentClick(Sender: TObject); var CurrentFileName, TempFileName: string; WasActive: Boolean; begin SaveDialog.Filter := 'PDF Files|*.pdf|All Files|*.*'; SaveDialog.DefaultExt := 'pdf'; if SaveDialog.Execute then begin try CurrentFileName := Pdf.FileName; WasActive := Pdf.Active; // If saving to the same file, use temporary file if WasActive and SameText(CurrentFileName, SaveDialog.FileName) then begin TempFileName := SaveDialog.FileName + '.tmp'; if Pdf.SaveAs(TempFileName) then begin // Close, delete old, rename new Pdf.Active := False; if DeleteFile(CurrentFileName) then begin if RenameFile(TempFileName, SaveDialog.FileName) then begin // Reload Pdf.FileName := SaveDialog.FileName; Pdf.Active := True; LogStatus('Document saved successfully.'); end; end; end; end else begin // Save to different file if Pdf.SaveAs(SaveDialog.FileName) then LogStatus('Document saved: ' + ExtractFileName(SaveDialog.FileName)) else LogStatus('Failed to save document.'); end; except on E: Exception do LogStatus('Error saving document: ' + E.Message); end; end; end; |
Ek Ayrıntılarını Görüntüleme
Urvanov Sözdizimi Vurgulayıcı v2.9.1|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
procedure TFormMain.ListBoxAttachmentsClick(Sender: TObject); var Index: Integer; AttachmentName: string; AttachmentData: TBytes; begin Index := GetSelectedAttachmentIndex; if Index >= 0 then begin AttachmentName := Pdf.AttachmentName[Index]; AttachmentData := Pdf.Attachment[Index]; MemoDetails.Lines.Clear; MemoDetails.Lines.Add('Name: ' + AttachmentName); MemoDetails.Lines.Add('Size: ' + IntToStr(Length(AttachmentData)) + ' bytes'); MemoDetails.Lines.Add('Index: ' + IntToStr(Index)); // Try to detect file type from extension if EndsText('.txt', AttachmentName) or EndsText('.csv', AttachmentName) then MemoDetails.Lines.Add('Type: Text file') else if EndsText('.pdf', AttachmentName) then MemoDetails.Lines.Add('Type: PDF document') else if EndsText('.jpg', AttachmentName) or EndsText('.png', AttachmentName) then MemoDetails.Lines.Add('Type: Image file') else MemoDetails.Lines.Add('Type: Binary file'); end; end; |
Kullanım Durumları
- Belge Paketleri – Ana belgeyi destekleyici dosyalarla paketleyin
- Form Gönderimleri – Formlara kanıt veya destekleyici belgeler ekleyin
- Teknik Kılavuzlar – CAD dosyalarını, elektronik tabloları veya kaynak kodunu ekleyin
- Yasal Belgeler – Sergileri ve ekleri ekleyin
- Arşiv Yönetimi – İşlenmek üzere ekleri çıkarın
Sonuç
Ek demosu, PDFium VCL'nin PDF dosya ekleri üzerinde nasıl tam kontrol sağladığını gösterir. İster bir belge yönetim sistemi oluşturuyor olun ister gömülü dosyalar içeren PDF formlarını işliyor olun, bu API'ler bunu kolaylaştırır.
Ekleri programlı olarak ekleme, çıkarma ve silme yeteneği, belge otomasyonu ve işleme iş akışları için birçok olasılığın önünü açar.
PDF eklerini yönet kolaylıkla kullanarak Delphi PDFium VCL.