2010-11-12 2 views
0

Je rencontre un problème sur FastReports, il ne sera pas imprimer correctement sur les pages qui contiennent des caractères coréens. Il ne se passe que sur l'imprimante HP K5300 jet, T le tester en utilisant rave et ne pas avoir de problème. Je pense que c'est un bug pour les rapports rapides. Je convertis déjà tous mes rapports de rave à FastReports et n'ai pas l'intention de reculer.problème d'aperçu personnalisé Fastreports

Je prévois d'obtenir les pages générées sous forme d'images sans l'enregistrer sur le disque dur, puis générer un nouveau preports. cette fois, les images générées seront utilisées et imprimées. Je sais que cette solution n'est pas bonne. C'est pour le moment en attendant leur réponse.

Quelqu'un at-il une idée de comment obtenir les images sous forme de pages générées?

+1

En éditant votre question, vous l'avez rendu * plus difficile à comprendre. Vous avez demandé comment créer une image de rapport sans l'enregistrer sur le disque, ce qui semble être exactement ce que la réponse de Jachguate fait. Qu'est-ce que les personnages coréens ont à voir avec ça? Pourquoi votre passage de Rave à Fast Reports est-il pertinent? –

+0

@Rob Kennedy, oui im ​​un problème sur le cor coréen. Seul le premier caractère apparaîtra sur le papier lors de l'impression. désolé si très confus. – XBasic3000

Répondre

1

Si vous voulez simplement éviter d'enregistrer beaucoup de fichiers, vous pouvez créer une nouvelle classe d'exportation pour imprimer le fichier juste après sa création et le supprimer instantanément.

Vous pouvez créer une nouvelle classe d'export qui imprime le bitmap de la mémoire (par exemple, en utilisant la classe TPrinter et en dessinant le bitmap directement dans le canevas de l'imprimante) ... vous apprendrez comment vérifier le fichier source du TfrxBMPExport classe.

Prenez ce code non testé comme un exemple qui vous guidera comment créer une nouvelle classe pour sauver/imprimer/supprimer:

type 
    TBMPPrintExport = class(TfrxBMPExport) 
    private 
    FCurrentPage: Integer; 
    FFileSuffix: string; 
    protected 
    function Start: Boolean; override; 
    procedure StartPage(Page: TfrxReportPage; Index: Integer); override; 
    procedure Save; override; 
    end; 


{ TBMPPrintExport } 

procedure TBMPPrintExport.Save; 
var 
    SavedFileName: string; 
begin 
    inherited; 
    if SeparateFiles then 
    FFileSuffix := '.' + IntToStr(FCurrentPage) 
    else 
    FFileSuffix := ''; 
    SavedFileName := ChangeFileExt(FileName, FFileSuffix + '.bmp'); 
    //call your actual printing routine here. Be sure your the control returns here when the bitmap file is not needed anymore. 
    PrintBitmapFile(SavedFileName); 
    try 
    DeleteFile(SavedFileName); 
    except 
    //handle exceptions here if you want to continue if the file is not deleted 
    //or let the exception fly to stop the printing process. 
    //you may want to add the file to a queue for later deletion 
    end; 
end; 

function TBMPPrintExport.Start: Boolean; 
begin 
    inherited; 
    FCurrentPage := 0; 
end; 

procedure TBMPPrintExport.StartPage(Page: TfrxReportPage; Index: Integer); 
begin 
    inherited; 
    Inc(FCurrentPage); 
end; 

Dans le code de production que vous voulez remplacer une autre méthodes pour initialiser et finaliser la le travail de l'imprimante, le nettoyage, etc.

Le code est basé sur l'implémentation de FastReport v4.0 de TfrxCustomImageExport, spécialement pour la numérotation des pages et le nommage des fichiers. Cela peut nécessiter des ajustements pour d'autres versions de FastReport.

1

Vous pouvez utiliser le composant TfrxBMPExport (unité frxExportImage) pour enregistrer le rapport en tant que BMP.

Par exemple, ce code exporter le rapport:

procedure ExportToBMP(AReport: TfrxReport; AFileName: String = ''); 
var 
    BMPExport: TfrxBMPExport; 

begin 
    BMPExport := TfrxBMPExport.Create(nil); 
    try 
    BMPExport.ShowProgress := True; 
    if AFileName <> '' then 
    begin 
     BMPExport.ShowDialog := False; 
     BMPExport.FileName := AFileName; 
     BMPExport.SeparateFiles := True; 
    end; 
    AReport.PrepareReport(True); 
    AReport.Export(BMPExport); 
    finally 
    BMPExport.Free; 
    end; 
end; 

Le composant Export, dans ce cas, utilise un nom de fichier différent pour chaque page. Si vous transmettez 'c: \ path \ report.bmp' comme nom de fichier, le composant d'exportation générera c: \ path \ report.1.bmp, c: \ path \ report.2.bmp et autres.

Comme d'habitude, vous pouvez supprimer et configurer manuellement le composant sur n'importe quel module de formulaire/données si vous préférez cette méthode.

+0

+1 merci pour votre réponse. J'édite ma question en devenant plus spécifique. Votre solution est géniale. mais il ne doit pas être sauver sur le drv. Et si cela génère 500 pages? – XBasic3000

+1

hommes, vous venez de changer totalement les prémisses de votre question ... invalide juste ma réponse, ce qui était précis pour votre question initiale. Je dois penser que si je veux donner une réponse différente ici ou juste supprimer ceci ... Je suis déçu, parce que j'ai pris (un peu ou beaucoup) de mon temps (précieux) pour essayer de vous aider et vous le jetez juste! Si vous demandez ce que vous ne voulez pas, je pense qu'il est plus respectueux d'accepter ma réponse (ou non) et de poser une toute nouvelle question. – jachguate

+0

désolé à ce sujet. Je découvre qu'il n'y a aucun moyen que nous puissions utiliser l'image directement. mais enregistrez-le en premier. – XBasic3000

Questions connexes