[Delphi] PDF

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod dyžon 15. 3. 2017 09:39

zdravím,
potřebuju vytvářet .pdf soubory, ktery budou vycházet z jedné stejné šablony.
moje představa je, že si vytvořím aplikaci, která bude mít několik TEditů pro pojmenování PŘEDMĚTU, TMemo,pro popis PŘEDMĚTU, pár TShape, ktery budou obsahovat všechny barvy PŘEDMĚTU a TImage s fotkou PŘEDMĚTU.
nevím, jestli to .pdf umí, ale chtěl bych, aby se soubor vytvořil s fotkou o rozměrech třeba 200 x 100 px a při kliknutí na ni se zobrazila v původní velikosti.
na velikosti souboru .pdf mi nezáleží.
nemám s PDF žádny zkušenosti, tak bych Vás chtěl poprosit o názor ktery knihovny, nebo komponenty použít a jestli jde vůbec to s tou fotkou udělat.
děkuji.
navrh.png
ïmg

kde jsou pluska, to se edituje.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod powlcz 15. 3. 2017 21:17

:-)
powlcz
Junior

Odeslat příspěvekod JanFiala 16. 3. 2017 07:52

Použij nějaký generátor sestav, kyterý umí ukládat do PDF (jsou součástí Delphi), případně jakýkoliv, který to neumí a který proženeš virtuální PDF tiskárnou.
V prvním případě si odřídíš vše v programu.
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar

Odeslat příspěvekod dyžon 16. 3. 2017 10:01

JanFiala: děkuju, ani jsem nevěděl, že něco takovýho existuje,
mám v práci jen Starter Berlin , a ta žádny reporty v sobě nemám, tak zatím koukám jen na netu, kde jsem narazil jen na propojeny s databází, což nechci, tak budu hledat dál.
ozvu se.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod JanFiala 17. 3. 2017 08:43

dyžon píše:JanFiala: děkuju, ani jsem nevěděl, že něco takovýho existuje,
mám v práci jen Starter Berlin , a ta žádny reporty v sobě nemám, tak zatím koukám jen na netu, kde jsem narazil jen na propojeny s databází, což nechci, tak budu hledat dál.
ozvu se.


U reportu není nutné propojení s databází. Stačí, když tam dáš obrázky a texty "na tvrdo" a ostatní proměnlivé texty naplníš před tiskem.
V podstatě, pokud ti jde o jednu stránku, tak si to klidně vytvoř ručně pomocí vykreslení obrázků a textu na CANVAS a ten pak pošli na tiskárnu. Tohle uměly i nějaké PDF komponenty, třeba tohle:
http://delphi.cz/post/Synopse-PDF-engine.aspx
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar

Odeslat příspěvekod dyžon 22. 3. 2017 11:15

děkuji,
rozhodl jsem se pro variantu vykreslení na CANVAS a převedení do .pdf
drbačka, ale mám to hotové.
mám už jen jeden problém.
používám knihovnu SynPDF
Kód: Vybrat vše
procedure TMyForm.UlozPDF;
var PDF: TPdfDocumentGDI;
    Pdfstranka, PdfStranka2: TPdfPage;
    PdfCanvas: TCanvas;
    PdfImage, PdfImage2: TPdfImage;
begin
  PDF:= TPdfDocumentGDI.Create();
  try
    PDF.Info.Author:= 'bla bla';
    PDF.Info.CreationDate:= now;
    PDF.Info.Creator:= 'bla bla';
    PDF.Info.Subject:= 'bla';
    PDF.Info.Title:= 'Nadpis';
    PDF.DefaultPaperSize:= psA4;
  //===========================================================//
    PdfStranka:= PDF.AddPage;
    PdfStranka.PageLandscape:= False; // portrait   ;
    PdfCanvas:= PDF.VclCanvas;
    NakresliPodkladStranky(PdfCanvas);     // tady kreslím pozadí + texty
    NakresliShape(2, clRed, PdfCanvas);    // vykreslení použitých barev
    PdfImage:= TPdfImage.Create(PDF, iFotka.Picture.Graphic, True);
    PDF.AddXObject('fotka', PdfImage);
    PDF.Canvas.DrawXObject(285, 568, 270, 183, 'fotka');

    PDF.SaveToFile('D:\PDFpokus.pdf');
  finally
    PDF.Free;
  end;
end;
fotka se vloží do vymezenyho prostoru, ale její velikost zůstane nezměněná.
chci se zeptat, jestli existuje nějakej způsob, jak tam vložit fotku, na kterou když se v .pdf klikne, tak se zobrazí v původní velikosti.
něco jak hyper odkaz (mimochodem, ten taky nevím jak se vkládá a asi by se mi to hodilo na mailTo)
chtěl jsem se spokojit, že tu fotku vložím na druhou stranu přes celou plochu, což by taky šlo, ale tak nějak nemůžu přijít na to, jak.
Kód: Vybrat vše
PdfStranka:= PDF.AddPage;
    PdfStranka.PageLandscape:= False; // potrait   ;
    PdfCanvas:= PDF.VclCanvas;
    NakresliPodkladStranky(PdfCanvas);
    NakresliShape(2, clRed, PdfCanvas);
    PdfImage:= TPdfImage.Create(PDF, iFotka.Picture.Graphic, True);
    PDF.AddXObject('fotka', PdfImage);
    PDF.Canvas.DrawXObject(285, 568, 270, 183, 'fotka');

    PdfStranka2:= PDF.AddPage;
    PdfStranka2.PageLandscape:= True;
    PdfImage2:= TPdfImage.Create(PDF, iFotka.Picture.Graphic, True);
    PDF.AddXObject('fotkaBig', PdfImage);
    PDF.Canvas.DrawXObject(0, 0, Pdfstranka2.PageWidth, PdfStranka2.PageHeight, 'fotkaBig');

    PDF.SaveToFile('D:\PDFpokus.pdf');

ERR: 'AddObject.'
je divny, že když vkládám ty fotky, tak nikde nezadávám na kterou stránku je umisťuju.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod JanFiala 23. 3. 2017 07:28

Kdyz vkaldas objekty do PDF, tak jsou v PDF umisteny jako objekty - PDF je jako kontejner, neuymistujes je na stranky, ale pak je vykreslujes na stranky.

A proc to hazi chybu? Vytvaris PdfImage2 a vkladas PDFImage

Kód: Vybrat vše
PdfImage2:= TPdfImage.Create(PDF, iFotka.Picture.Graphic, True);
PDF.AddXObject('fotkaBig', PdfImage);
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar

Odeslat příspěvekod dyžon 23. 3. 2017 07:47

díky moc,
všiml jsem si toho už včera, ale nestihl jsem to sem postnout.
ještě teď hledám, jak do toho pdf vložit odkaz (mailTo).
asi budu muset postupně vyzkoušet všechny realny možnosti TPdf...
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod JanFiala 24. 3. 2017 08:07

Mailto je URL odkaz
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar

Odeslat příspěvekod powlcz 24. 3. 2017 08:13

:mrgreen: :D :-D :-)) :-) :-| :-l 8-S :-S :-(
Chronický Ujížděč na nevhodnostech
powlcz
Junior

Odeslat příspěvekod dyžon 24. 3. 2017 12:02

powlcz: ať se nezalkneš ...
JanFiala: našel jsem dvě možnosti:
Kód: Vybrat vše
PDF.CreateBookMark(0,'odkaz_1');
  arect.Left:= 100;
  arect.Top:= 100;
  arect.Bottom:= 200;
  arect.Right:= 400;
PDF.CreateLink(arect,'Odkaz_1');

2.varianta ..
Kód: Vybrat vše
PDF.CreateAnnotation(asLink, aRect);

obě stejný. vykreslí se obdelník(aRect),ale nikde nezadávám ani tu URL, ani text, kterej na ni odkáže.
vůbec tomu nerozumím, prostě mi tam chybí 2 parametry .. URL a CAPTION nebo tak něco.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod dyžon 26. 3. 2017 07:19

našel a prohlídl jsem si obě funkce a zjistil, že CreateLink nejdřív volá CreateAnnotation a pak se do BookMarku vloží TPdfDestination.
v proceduře CreateBookMark se vytváří TPdfDestination, ale její parametry, který se zadávají jsou typ, zoom, left, top.
jsem z toho jelen, ale nikde pořád nemúžu najít, kde mám zadat cílovou URL.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků