Size seçenek sundum o kadar. Karar sizindir. PDF reader farklı writer farklı beceri istiyor. Attachment, style vs. bir sürü bilinmesi gereken detay var. Bunu içeren bir yapı ticari bir hal alıyor olmalı ki henüz sağlam bir direkt kod kaynağı göremedim.
- Bu verdiğim örnek içerik de açık bir kaynak ve Google tarafından destekleniyor. ARM versiyonu da var. DLL'lerin dağıtım iznini açık gördüğüm için paylaştım.
* Byte Array ise aşağıdaki örnek size yeni bir seçenek sunacaktır.
* FileToBytes ile bir PDF dosyayı TBytes olarak array haline dönüştürür.
* Sizde her bir pdf içerik zaten TBytes array halinde ise bu kısmı yapılı varsayabilir direkt bir alttaki kısımdan yani
LPdf.LoadFromBytes( xxx
); şeklinde kullanabilirsiniz. Örnek için her bir dosyayı TBytes array dönüştüren bir function ekledim.
function FileToBytes(const aFile: string ):TBytes;
var
Ms: TMemoryStream;
begin
Finalize(Result);
if not FileExists(aFile) then
Exit;
Ms := TMemoryStream.Create;
try
Ms.LoadFromFile(aFile);
SetLength(Result, Ms.Size);
if Ms.Size > 0 then
begin
Ms.Position := 0;
Ms.ReadBuffer(Pointer(result)^, Ms.Size);
end;
finally
Ms.Free;
end;
end;
function MergePdfFiles( aList: TStrings ):TPdfControl;
var
LPdf : TPdfDocument;
begin
{$IFDEF CPUX64}
PDFiumDllDir := ExtractFilePath(ParamStr(0)) + 'x64';
{$ELSE}
PDFiumDllDir := ExtractFilePath(ParamStr(0)) + 'x86';
{$ENDIF CPUX64}
result := TPdfControl.Create(nil);
result.Align := alClient;
result.Color := clGray;
result.ScaleMode := smFitWidth;
result.PageColor := RGB(255, 255, 200);
result.LoadFromFile(aList[0]); // Referans
aList.Delete(0);
LPdf := TPdfDocument.Create;
try
while aList.Count > 0 do
begin
LPdf.Close;
//LPdf.LoadFromFile(aList[0]);
LPdf.LoadFromBytes( FileToBytes(aList[0]) );
result.Document.ImportAllPages(LPdf);
aList.Delete(0);
end;
finally
freeAndNil(LPdf);
end;
end;
Bir ekleme yapayım, eğer dll dosya eksikliği ihtimali projenizin çalışamaz hale geleceği şüphesi yaşıyorsanız, kaygınızı giderecek yöntem DLL'leri resource olarak exe'de gömülü taşıyın. Dinamik yükleyin veya temp klasörüne açıp oradan kullanın.
Örnekleri forumda paylaşmışım diye hatırlıyorum. SSL kütüphane konularında vardı.
bkz. bu link