2012-01-25 6 views
11

Mi chiedevo se ci fosse una facile generazione di miniature di file PDF in Delphi. Fondamentalmente voglio rendere la prima pagina di un PDF in una piccola bitmap (diciamo 100x100 o simile).
Vedo due opzioni 1 utilizzare un componente PDF, 2 in qualche modo toccare in che modo explorer genera anteprime/miniature.Miniature PDF in Delphi

risposta

1

È possibile trovare un elenco di gestori di anteprima installati (in Vista e Windows 7) in HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ PreviewHandlers.

Se è installato qualsiasi gestore PDF (ad esempio, quando Acrobat Reader è installato), è possibile cercare il server COM cercando il GUID trovato in precedenza. Questo in combinazione con l'interfaccia IPreviewHandler può guidarti verso una soluzione.

+1

Sembra che anche i gestori di anteprime si trovino nella stessa posizione su XP. – Alister

11

Utilizzare una libreria come QuickPDF o Gnostice è davvero l'opzione più semplice. Sono abbastanza sicuro che le miniature PDF in explorer siano effettivamente generate da qualunque software PDF sia installato come Adobe. A meno che non si possa garantire che sia installato un lettore PDF appropriato su ogni workstation, l'idea di utilizzare le miniature potrebbe non essere valida.

Modifica: questa è un'applicazione completa che utilizza QuickPDF per eseguire il rendering della prima pagina di un determinato file PDF in un file BMP. A 10 DPI il mio file BMP di output è 85 pixel di larghezza per 110 pixel di altezza.

program PDFToBMP; 
{$APPTYPE CONSOLE} 
uses 
    SysUtils, QuickPDF; 
var 
    Q : TQuickPDF; 
begin 
    Q := TQuickPDF.Create; 
    try 
    Q.LoadFromFile(ParamStr(1), ''); 
    Q.RenderPageToFile(10 {DPI}, 1 {PageNumber}, 0 {0=BMP}, ChangeFileExt(ParamStr(1),'.bmp')); 
    finally 
    Q.Free; 
    end; 
end. 
1

O se avete "tempo" che si potrebbe provare a utilizzare GhostScript sia da riga di comando o embedding it. Mike W. ti ha dato una soluzione buona e facile. Io uso Gnostice ma ci sono molte altre soluzioni PDF VCL.