for each multi page i export to jpg file :
Function Tdm_ImageEn.ExportSpecificPageToJpg(SrcFileName : String;
PageIndex : Integer;
JpgFileName : String): Boolean;
var
ImageEnIO: TImageEnIO;
Bitmap: TIEBitmap;
begin
Result := False;
try
// Validate input file
if not FileExists(SrcFileName) then
begin
JustWriteToLog('Source file not found: ' + SrcFileName);
Exit;
end;
Bitmap := TIEBitmap.Create;
ImageEnIO := TImageEnIO.Create(nil);
try
ImageEnIO.AttachedIEBitmap := Bitmap;
// Load first page (0-based indexing)
ImageEnIO.Params.ImageIndex := PageIndex;
ImageEnIO.LoadFromFile(SrcFileName);
// Save as JPG
ImageEnIO.Params.JPEG_Quality := 90;
ImageEnIO.SaveToFile(JpgFileName);
Result := True;
finally
ImageEnIO.Free;
Bitmap.Free;
end;
except
on E: Exception do
begin
JustWriteToLog('Error exporting One Page From Multi File to JPG: ' + E.Message);
Result := False;
end;
end;
end;
then : create new PDF file with the property i want.
function Tdm_ImageEn.AddImageToNewPDF(SrcFileName : String;
PDFFileName : String;
UseA4Size : Boolean;
UseColored : Boolean;
FitToPage : Boolean;
PdfWidth : Integer;
PdfHeight : Integer) : Boolean;
var
ImageEnView: TImageEnView;
begin
Result := False;
// Delete existing PDF file
WinApi.Windows.DeleteFile(PWideChar(PDFFileName));
if not FileExists(SrcFileName) then
Exit;
ImageEnView := TImageEnView.Create(nil);
try
if UseA4Size Then
begin
ImageEnView.IO.Params.PDF_PaperSize := iepA4;
end
else
begin
ImageEnView.IO.Params.PDF_PaperSize := iepUnknown;
ImageEnView.IO.Params.PDF_PaperWidth := PdfWidth;
ImageEnView.IO.Params.PDF_PaperHeight := PdfHeight;
end;
if FitToPage then
ImageEnView.IO.Params.PDF_ImageOptions := [iepioShrinkOnly, iepioCentered];
if UseColored then
begin
ImageEnView.IO.Params.SamplesPerPixel := 3;
ImageEnView.IO.Params.BitsPerSample := 8;
ImageEnView.IO.Params.PDF_Compression := ioPDF_JPEG;
end
else
begin
ImageEnView.IO.Params.BitsPerSample := 1;
ImageEnView.IO.Params.SamplesPerPixel := 1;
ImageEnView.IO.Params.PDF_Compression := ioPDF_G4FAX;
end;
ImageEnView.IO.Params.PDF_PageMargin := Round( 0.25 * 72 ); // 1/4 inch
ImageEnView.IO.LoadFromFile(SrcFileName);
ImageEnView.IO.SaveToFilePDF(PDFFileName);
finally
ImageEnView.Free;
end;
Result := FileExists(PDFFileName);
end;
function Tdm_ImageEn.AddMultiImageToNewPDF(SrcFileName : String;
PDFFileName : String;
UseA4Size : Boolean;
UseColored : Boolean;
FitToPage : Boolean;
PdfWidth : Integer;
PdfHeight : Integer) : Boolean;
Var
SrcEnMView : TImageEnMView;
DstEnView : TImageEnView;
JpgFileName: String;
TmpFileName: String;
CurPage : Integer;
PageCount : Integer;
//MS : TMemoryStream;
begin
Result := False;
// Delete existing PDF file
WinApi.Windows.DeleteFile(PWideChar(PDFFileName));
if not FileExists(SrcFileName) then
Exit;
SrcEnMView := TImageEnMView.Create(nil);
try
PageCount := dm_ImageEn.GetImagePageCount(SrcFileName);
Try
JpgFileName := GetJpgTempFileName;
TmpFileName := GetPdfTempFileName;
for CurPage := 0 to PageCount - 1 do
begin
WinApi.Windows.DeleteFile(PWideChar(JpgFileName));
WinApi.Windows.DeleteFile(PWideChar(TmpFileName));
ExportSpecificPageToJpg(SrcFileName,
CurPage,
JpgFileName);
AddImageToNewPDF(JpgFileName,
TmpFileName,
UseA4Size,
UseColored,
FitToPage,
PdfWidth,
PdfHeight);
DstEnView := TImageEnView.Create(nil);
Try
// Merge two PDF documents
DstEnView.PdfViewer.Enabled := True;
if CurPage > 0 then
DstEnView.IO.LoadFromFilePDF(PDFFileName);
DstEnView.PdfViewer.ImportPages(TmpFileName);
DstEnView.IO.SaveToFilePDF(PDFFileName);
Finally
DstEnView.Free;
End;
end;
Finally
End;
finally
SrcEnMView.Free;
end;
Result := FileExists(PDFFileName);
end;
this work.
but i dont know if it is the best way...
Yossi Mazal-Tov