Hallo Delphianer,
ich bastele gerade an einer Druckvorschau-Komponente. Zum Erzeugen der einzelnen Druckseiten nutze ich TMetafile, Druckvorschau und Ausdruck funktioniert so wie es sein soll.
Nun möchte ich als Sahnehäubchen noch eine direkte PDF-Ausgabe dabei haben - also flugs SynPDf eingebunden.
Mit folgendem Code gebe ich den Inhalt des Metafiles seitenweise als PDF-Dokument aus:
Delphi-Quellcode:
procedure TSDPrintPreview.Document2PDF(FN: string;);
var lPdf : TPdfDocumentGDI;
i : integer;
TempMetaFile : TMetafile;
Stream : TFileStream;
begin
lPdf := TPdfDocumentGDI.Create;
lPdf.ScreenLogPixels := CurrentPrinterRes.X;
lPdf.DefaultPaperSize := psA4; //das reicht für meine Zwecke erst mal
lPdf.DefaultPageLandscape := FPHeightMM < FPWidthMM;
lPdf.ForceNoBitmapReuse := false;
lPdf.EmbeddedTTF := true;
lPdf.GeneratePDF15File := true;
lPdf.ForceJPEGCompression := 90; //Wert vlt. noch skalierbar machen
try
Stream := TFileStream.Create(FN, fmCreate);
try
lPdf.SaveToStreamDirectBegin(Stream);
//FMFList ist eine TObjectList<TMetaFile>;
for I := 0 to FMFList.Count-1 do
begin
lPdf.AddPage;
TempMetaFile := FMFList.Items[I];
TempMetafile.SetSize(FPWidthPrintPxUnscaled,FPHeightPrintPxUnscaled);
lPdf.VCLCanvas.StretchDraw(Rect(0,0,TempMetaFile.Width,TempMetaFile.Height),TempMetaFile);
lPdf.SaveToStreamDirectPageFlush; // direct writing
end;
lPdf.SaveToStreamDirectEnd;
finally
Stream.Free;
end;
finally
lPdf.Free;
end;
end;
Mein Problem ist die Ausgabe von Bildern (JPG, PNG ...).
Alle im Testdokument enthaltenen Bilder werden korrekt in der Druckvorschau angezeigt oder ausgedruckt.
Im erzeugten PDF jedoch fehlen Grafiken
vollständig die
- vertikal mehr als 1446px vom oberen Seitenrand positioniert sind
- horizontal mehr als 2566px vom linken Seitenrand entfernt sind
Befinden sich Grafiken innerhalb der genannten Grenzen, werden sie vollständig ausgegeben, egal wie breit oder hoch die Grafik ist. Auch über die genannten Pixelgrenzen hinaus.
Auch Text oder grafische Elemente (Linien, Rechtecke) werden komplett über die gesamte Seitenbreite und -höhe ausgegeben.
Es ist also nicht so, dass das Druckbild irgendwie abgeschnitten wird, sondern es fehlen ausschließlich Bilder unter den oben genannten Bedingungen.
Hab ich bei der Initialisierung des lPdf-Objektes irgendwas übersehen?
Vielen Dank schon mal für eure Mithilfe