Generowanie PDF

0

Witam serdecznie. Mam pytanie (zapewne proste). W swoim prostym programie do obsługi sprzedaży chciałbym dołożyć generowanie pliku PDF z Quickreportu. W sieci znalazłem coś takiego:

procedure TFrmPrintPreview.ExportToPDF(Filename: String);
var
  aPDF : TQRPDFDocumentFilter;
begin
  aPDF := TQRPDFDocumentFilter.Create(Filename);
  aPDF.FontHandling := fhAutoEmbed;
  QRPreview.QRPrinter.ExportToFilter(aPDF);
  aPDF.Free;
end;

Problem w tym, że nie mam u siebie takiego komponentu. Skąd go można zdobyć. Mój Delphi to Delphi 7 a wersja QuickReport to 3.0.9. Może jakieś inne rozwiązanie. W tej chwili za pomocą quickreport1.preview podglądam na ekranie, za pomocą quickreport1.print drukuję, a chciałym mieć możliwość wysłania pliku mailem. Liczę na serdeczną pomoc. Sławek

0

Jakiej bazy używasz?

0

Korzystam z dBase for Windows

Jakie znaczenie ma rodzaj bazy danych? Chodzi mi o brak u mnie unit-u QRPDFFilt.pas i nie wiem co zrobić. Może ktoś niedouczonemu pomoże???

Tak mi się przynajmniej wydaje. Jest w sieci wprawdzie źródło tego unitu, ale z kolei zawiera inne usesy, których nie mam..http://read.pudn.com/downloads159/so[...]/quickrpt/qrpdffilt.pas__.htm

Ewentualnie miałbym inne pytanie. Jak pominąć okno dialogowe podawania nazwy pliku przy wyborze drukarki wirtualnej Microsoft Print To PDF. Chodzi o to, abym przyjął bez okna swoją nazwę z wnętrza programu

1

na stackoverflow jest takie rozwiązanie i działa:

var
  DeviceMode: THandle;
  Device, Driver, Port: array[0..80] of Char;
begin
  Printer.PrinterIndex := Printer.Printers.IndexOf('Microsoft Print to PDF');
  Printer.GetPrinter(Device, Driver, Port, DeviceMode);
  Printer.SetPrinter(Device, Driver, 'C:\Temp\Test.pdf', 0);

  Printer.BeginDoc;
  Printer.Canvas.TextOut(100, 100, 'Test');
  Printer.EndDoc;
end;
0

Dziękuję serdecznie. Sprawdzę i dam znać.

2

Hardkodowanie nazwy drukarki nie jest dobrym pomysłem – w moim systemie takiej drukarki nie ma. ;)

Wiem że to tylko przykład, ale w kodzie produkcyjnym pasowałoby dokonać enumeracji urządzeń i wybrania tej, która spełnia oczekiwania. W razie czego, można skorzystać z funkcji EnumPrinters do utworzenia listy drukarek, a później jakimś Posem poszukać tej, która umożliwia druk do PDF.

Edit: WinAPI niepotrzebne – są do tego wysokopoziomowe klasy.

0

Niestety nie zapisałem w ten sposób pliku. Okno się nie pokazuje, ale pliku nie ma. Żadnego błędu nie zgłasza.

1
furious programming napisał(a):

Hardkodowanie nazwy drukarki nie jest dobrym pomysłem – w moim systemie takiej drukarki nie ma. ;)

Ale skoro to jest standardowa drukarka zainstalowana w Windows 10 to czemu by nie zrobić w ten sposób?

Wiem że to tylko przykład, ale w kodzie produkcyjnym pasowałoby dokonać enumeracji urządzeń i wybrania tej, która spełnia oczekiwania. W razie czego, można skorzystać z funkcji EnumPrinters do utworzenia listy drukarek, a później jakimś Posem poszukać tej, która umożliwia druk do PDF.

Zdaje się ten myk nie działa z każdą drukarką PDF'ów, a tą Microsoftową. Poza tym aby przejrzeć wszystkie dostępne drukarki wystarczyłoby zapoznać się z właściwością Printer.Printers http://docwiki.embarcadero.co[...]cl.Printers.TPrinter.Printers

1
Mr.YaHooo napisał(a):

Ale skoro to jest standardowa drukarka zainstalowana w Windows 10 to czemu by nie zrobić w ten sposób?

Bo na świecie są w użyciu inne wersje Windows, niż 10. ;)

1
furious programming napisał(a):

inne wersje Windows, niż 10. ;)

Jako, że Windows 8.1 jest niewypałem (oprócz 10-tki tylko on ma wsparcie jeszcze) nie interesują mnie inne wersje niż 10-tka z punktu widzenia programisty :]


A przynajmniej staram się w ten sposób postępować. Niestety nie zawsze to możliwe i życie nie to bajka, czasami trzeba aby system działał również na Windows XP.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0