Dość często potrzebujesz uzyskać dokument PDF z aplikacji Pascal - albo Delphi lub Lazarus.Zazwyczaj zaleca się stosowanie specjalistycznych rozwiązań, konwerterów PDF (takich jak itext, Synopse PDF Engine, PowerPDF, HotPDF, PDF Creator Pilot, PDFtoolkit VCL, Debenu Quick PDF Library itp.). W tym artykule nie będziemy omawiać ich zalet lub wad. Nieoczekiwanie okazało się, że nawet jeśli w nazwie produktu nie ma „PDF”, możliwości FastReport VCL do tworzenia PDF w Delphi spełniają wiele potrzeb programisty. A mnóstwo naszych klientów używa TYLKO funkcji FastReport do tworzenia PDF!
Więc, po pierwsze – można wysłać dowolnie złożony raport do PDF. Spróbujmy!
Tworzenie nowej aplikacji VCL w Delphi
Dodaj do formularza składniki TfrxReport, TfrxPDFExport i TButton z karty FastReport.
Kliknij dwukrotnie TfrxReport, wprowadź FR Designer. Utwórz nowy raport (Plik -> Nowy raport). Dodaj TfrxMemoView z tekstem "Test text" do MasterData1.Set
MasterData1.RowCount = 200 (aby powtórzyć wiersz 200 razy i wygenerować raport 3-4-stronicowy, ponieważ nasz przykład nie używa zestawu danych), wyjdź z projektanta i STWÓRZ onclick dla Button1:
1 2 3 4 5 6 7 |
procedure TForm1.Button1Click(Sender: TObject); begin {Generate a report. The report must be generated before exporting} if frxReport1.PrepareReport then frxReport1.ShowPreparedReport; {and show preview window} end; |
W rzeczywistości ten kod wystarcza do kompleksowej pracy, generowania raportu i eksportowania do pliku PDF. Teraz utwórz dokument o dowolnej złożoności w czasie projektowania (możesz połączyć dowolne źródła danych i stamtąd pobrać informacje) - tabele, listy, ilustracje, mapy, kody QR - w tym celu upewnij się, że najpierw dodasz odpowiednie składniki do projektu (w przeciwnym razie nie będą one istniały w czasie wykonywania), złożone i wielostronicowe dokumenty, linkami wbudowanymi i spisem treści - wszystko, czego potrzebujesz i dowolny rozmiar - jednostronicowe potwierdzenie, jednostronicowy katalog, roczny raport na temat pracy pracowników na tysiącach stron. I nie zapomnij umieścić składnik eksportu PDF do naszego projektu! Uruchom i kliknij na jedyny przycisk w formularzu. Widzimy okno podglądu i przycisk eksportu do PDF.
Śmiało - zapisz plik PDF z naszej aplikacji Delphi!
Kliknij na przycisk – odwołaj się do eksportu z podglądu poniżej Pokażę Ci, jak to wszystko zrobić z kodu, możesz po prostu kliknąć na link – wyślij do PDF z kodu). Natychmiast widzimy okno dialogowe ustawień PDF.
Jak widać, każdy profesjonalny konwerter PDF chciałby mieć taki zestaw opcji! Możemy wybrać które strony naszego dokumentu wysłać do PDF, która wersja PDF do użycia, funcja kompresowania zmniejsza rozmiar wynikowego pliku, osadzanie czcionek pozwala zapisać wygląd dokumentu dowolnego urządzenia innej firmy. Możemy wybrać, czy dołączyć tło do dokumentu PDF; nasz plik PDF może być również zoptymalizowany pod kątem drukowania (jakość obrazu będzie lepsza, ale rozmiar będzie większy) lub tylko do prezentacji na ekranie. Możemy ustawić, czy wynikowy plik PDF będzie zawierał zewnętrzny spis treści, jak w oryginalnym raporcie (nie mam go w moim przykładzie, więc nie można go wybrać), przezroczystość, współczynnika kompresji obrazów bitmapowych. Nawiasem mówiąc, jedną z ważnych cech FastReport VCL 6.6 jest to, że obrazy wektorowe pozostaną formą wektorową w pliku PDF, innymi słowy - bezstratne, a to będzie szczególnie zauważalne na kodach kreskowych i mapach 2D. Kolejna funkcja – cały tekst, w tym RTF, zostanie wektoryzowany po zapisaniu w formacie PDF, czyli jakość nie zostanie utracona przy zachowaniu możliwości skopiowania fragmentu tekstu z pliku PDF (chyba że zabronisz odpowiedniej opcji, o której wspomnę poniżej).
Zapisz do: gdzie dokładnie wyślemy nasz plik PDF (lokalny plik lub e-mail lub chmury). Otwórz po wyeksportowaniu - wynikowy plik zostanie otwarty natychmiast po wyeksportowaniu przez przeglądarkę plików PDF przypisaną domyślnie do systemu operacyjnego (na przykład Adobe Acrobat Reader).
Wygenerowany dokument można eksportować w formatach archiwalnych, takich jak PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b – są one specjalnie zaprojektowane do przechowywania dokumentów bez zmian w formie elektronicznej. Na przykład czcionki, obrazy, obiekty innych firm, które są obecne w dokumencie są automatycznie osadzane w dokumencie w tym standardzie. Dość często jeden z tych standardów jest używany do elektronicznego zarządzania dokumentami w dużych organizacjach. Tutaj możesz znajdziesz więcej informacji na ten temat różnicy między PDF i PDF / A.
Niezwiązany z archiwum format PDF ma również kilka wersji (i można wybrać, który z nich zapisać).
Informacje dodatkowe, które trafią również do pliku PDF: tytuł, autor, temat, słowa kluczowe (można przesłać PDF do sieci, będzie idealnie zindeksowany), narzędzie do tworzenia PDF.
Bezpieczeństwo – ochrona dokumentu przed otwarciem za pomocą hasła (przy użyciu szyfrowania RC4). Możliwość zablokowania drukowania i modyfikowania dokumentu, kopiowania tekstu i grafiki, dodawania lub modyfikowania notatek tekstowych.
Konfigurowanie przeglądarki PDF po otwarciu dokumentu: Ukryj pasek narzędzi, ukryj pasek menu, ukryj interfejs użytkownika okna, okno dopasowania, okno środkowe, skalowanie wydruku. Zwykle podczas eksportowania stosuj parametrów ustawionych domyślnie, ale tym razem przeszukaj wszystkie parametry. Tak więc, jeśli my lub nasi użytkownicy nie potrzebujemy całej tej różnorodności wizualnej, możemy natychmiast
Wyśłać dokument do PDF z delphi lub kodu Lazarus
zapisywanie do pdf z Delphi z parametrami PDF | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
procedura TForm1. Button1Click(Nadawca: TObject); zaczynać {Generowanie raportu. Raport musi zostać wygenerowany przed wyeksportem} frxReport1. Przygotowanieraport(); {Ustaw zakres stron do wyeksportowania. Domyślnie eksportowane są wszystkie strony wygenerowanego raportu.} frxPDFExport1. Liczba stron := '2-3'; {Ustawianie standardu PDF TPDFStandard = (psNone, psPDFA_1a, psPDFA_1b, psPDFA_2a, psPDFA_2b, psPDFA_3a, psPDFA_3b); Wymagane jest dodanie modułu frxExportPDFHelpers do listy zastosowań: używa frxExportPDFHelpers;} frxPDFExport1. PDFStandard := psNone; {Można ustawić standardową wersję PDF dla PDFStandard = psNone TPDFVersion = (pv14, pv15, pv16, pv17); Wymagane jest dodanie modułu frxExportPDFHelpers do listy zastosowań: używa frxExportPDFHelpers;} frxPDFExport1. PDFVersion := pv17; {Aby uzyskać mniejszy rozmiar pliku, możesz ustawić kompresję} frxPDFExport1. Skompresowane := Prawda; {Ustaw, czy czcionki mają być osadzane w wynikowym dokumencie. Osadzanie czcionek znacznie zwiększa rozmiar wynikowego dokumentu} frxPDFExport1. EmbeddedFonts := False; {Ustaw, czy musimy wyeksportować obraz tła} frxPDFExport1. Tło := Prawda; {Wyłącz eksport obiektów z optymalizacją do drukowania. Z włączoną opcją obrazami będzie wysokiej jakości, ale 9 razy większa głośność} frxPDFExport1. PrintOptimized := False; {Ustaw, czy wynikowy plik PDF będzie zawierał zewnętrzny spis treści, tak jak w oryginalnym raporcie} frxPDFExport1. Kontur := Fałsz; {Ustawianie, czy obrazy mają być eksportowane z przezroczystością} frxPDFExport1. Przejrzystość := Prawda; {Można ustawić żądaną rozdzielczość DPI obrazów. Włączenie tej opcji powoduje wyłączenie opcji SaveOriginalImages, która umożliwia zapisywanie obrazów w ich oryginalna forma} frxPDFExport1. PictureDPI := 150; {Ustawianie współczynnika kompresji obrazów bitmapowych} frxPDFExport1. Jakość := 95; {Ustaw, czy plik wynikowy ma być otwarty po wyeksportowaniu} frxPDFExport1. OpenAfterExport := Fałsz; {Ustawianie, czy ma być wyświetlany postęp eksportu (pokaż, która strona jest obecnie eksportowana)} frxPDFExport1. ShowProgress := Fałsz; {Ustawianie, czy ma być wyświetlane okno dialogowe z ustawieniami filtru eksportu} frxPDFExport1. ShowDialog := Fałsz; {Ustaw nazwę wynikowego pliku. Należy pamiętać, że jeśli nazwa pliku nie zostanie ustawiona i nie wyłączysz okna dialogowego filtru eksportu, będzie nadal wyświetlane okno dialogowe wyboru nazwy pliku} frxPDFExport1. Nazwa pliku := 'C:\Output\test.pdf'; {Wypełnij odpowiednie pola na karcie Informacje} frxPDFExport1. Tytuł := 'Twój tytuł'; frxPDFExport1. Autor := 'Twoje imię'; frxPDFExport1. Temat := 'Twój temat'; frxPDFExport1. Słowa kluczowe := "Twoje słowa kluczowe"; frxPDFExport1. Twórca := 'Nazwa twórcy'; frxPDFExport1. Producent := "Nazwa producenta"; { Wypełnij odpowiednie pola na karcie Zabezpieczenia } frxPDFExport1. UserPassword := "Hasło użytkownika"; frxPDFExport1. OwnerPassword := 'Hasło właściciela'; frxPDFExport1. ProtectionFlags := [ePrint, eModify, eCopy, eAnnot]; {Ustawianie ustawień przeglądarki (karta Podgląd)} frxPDFExport1. HideToolbar := Fałsz; frxPDFExport1. HideMenubar := Fałsz; frxPDFExport1. HideWindowUI := Fałsz; frxPDFExport1. FitWindow := Fałsz; frxPDFExport1. CenterWindow := False; frxPDFExport1. Skalowanie wydruku := Fałsz; {Eksportowanie raportu} frxReport1. Eksport(frxPDFExport1); koniec; |
I gotowe! Rozważane są tutaj funkcje i możliwości zapisu z Lazarus i Delphi do PDF FastReport VCL w wersji 6.6. Koszt licencji jest porównywalny (a często jest niższy) do miesięcznego wynagrodzenia programisty, podczas gdy tylko opcje konfiguracji i zapisywania w różnych wersjach PDF wymagają wiele miesięcy pracy programisty o wysokich kwalifikacjach oraz znajomości różnych języków PDF.
Nawiasem mówiąc, możesz nawet sprawdzić jakość konwersji PDF w naszych raportach demo lub niektóre z własnych dla zabawy. Stale sprawdzamy i testujemy je pod kątem zgodności ze standardami PDF (istnieją specjalne walidatory, ale jednocześnie fragment walidacji nie zawsze gwarantuje zgodność z tym, co widzisz i co zostanie wydrukowane, mamy wszystkie te indywidualne historie na ten temat). Na przykład, czy wiesz, jak piękne będą ilustracje w pliku PDF? Czytaj więcej tutaj: https://www.fast-report.com/en/blog/200/show/.