Es funktioniert, wenn ich folgenden code benutze:
Code
w := MulDiv(richText.Memo._PaintPages[counter].WidthTw,WPScreenPixelsPerInch,1440);
h := MulDiv(richText.Memo._PaintPages[counter].HeightTw,WPScreenPixelsPerInch,1440);
if richText.Header.Landscape then
begin
w := MulDiv(richText.Memo._PaintPages[counter].HeightTw,WPScreenPixelsPerInch,1440);
h := MulDiv(richText.Memo._PaintPages[counter].WidthTw,WPScreenPixelsPerInch,1440);
end;
xres := richText.Memo.RTFData.RTFProps.FFontXPixelsPerInch;
yres := richText.Memo.RTFData.RTFProps.FFontYPixelsPerInch;
StartPage(MulDiv(w, xres, WPScreenPixelsPerInch), MulDiv(h, yres, WPScreenPixelsPerInch), xres, yres, 0);
try
// render the rtf page to the pdf printer
// note that without wppNoPageBackground the watermark would be
// overpainted!
richText.Memo.PaintRTFPage(counter, 0, 0, 0, 0, Canvas, [wppNoPageBackground, wppInPaintForwPDF], xRes, yRes,
-1, -1, [wpNoViewPortAPI]);
finally
EndPage;
end;
Alles anzeigen
Diesen Code habe ich quasi aus der Datei WPPDFWP.pas (ab zeile 269) kopiert. Dabei ist fSource.Memo._Paintpages[i].WidthTw immer gesetzt aber eben auch falsch herum, falls Landscape = True ist.
Mit dem obigen Code funktionierts mal - allerdings ist noch ein kleines Problem mit einem Bild, das falsch skaliert gezeichnet wird.
Im Originaldokument ist füllt das Bild ca 1/4 der Landscape Seite aus (2x2 Tabelle - eine Zelle wird vom Bild ausgefüllt) . Im PDF Ausdruck ist es aber viel kleiner skaliert.
Allerdings liegt das soweit ich gesehen habe nicht am pdf drucken selber sondern am Zwischenschritt - bei dem ich das RTF bearbeit und als WPT File speichere.