1

Konu: Formda pdf dosyası görüntülemek

Merhaba,
Önceden belirlediğim br pdf dosyasını bir formda göstermek istiyorum. Bunu Microsoft Web Browser ActiveX'i ile yapabiliyorum.
Ancak istediğim şey, kullanıcının bu dosyayı sadece yazdırabilmesi kaydedememesi. En azından sıradan kullanıcı kaydedememeli.

Teşekkürler.

2 Son düzenleyen, Mehmet K (03.03.2012 18:28:43)

Re: Formda pdf dosyası görüntülemek

Birkaç yıl geçtiği için, sorunu ancak mualak ifadelerle cevaplıyabilecem:

Vfp'nun kendi araçları ile bunu sanırım yapamasın.
En azından ben becerememişdim.
Sorunu şöyle çözmüşdüm: irfanview programı ile pdf dosyasını tif'e çevirdim. Yanlış hatırlamiyorsam pdf'den başka formata geçiş olmiyordu.
Onu sonra tekrar irfanview ile başka bir formata çevirdim ve sonra forma yansıtım.

http://www.irfanview.com/main_download_engl.htm
Addons'ların yüklenmesi gerekiyormuydu hatırlamiyorum. Galiba gerekmiyordu.

Tüm bu işlemleri vfp içinden ShellExecute kullanarak yapabilirsin.

Umarım aramızdan birisi daha basit bir yöntemi ortaya atar smile

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

3

Re: Formda pdf dosyası görüntülemek

Verdiğim muallak cevap beni biraz rahatsız etti. Bu nedenle backup'larımdan birkaç geri yükleme yaptım.

1. irfanview yükle
2. addons'ları yükle
3. ghostscript yükle: http://www.ghostscript.com/download/gsdnld.html
4. tif konusunda yanılmışım, herhangi bir formata convert edebilirsin:

Visual Fox Pro
"C:\Program Files\IrfanView\i_view32.exe" C:\Temp\x.pdf /convert=C:\Temp\x.jpg
Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

4

Re: Formda pdf dosyası görüntülemek

İlginize teşekkür ederim.
Başka bir formata dönüştürmek çok işime gelmiyor. Çünkü pdf olarak da ihtiyaç var.

Çözüme yaklaştım diyebilirim.

Şöyle ki form içindeki MS Web Browser objesinin DocumentComplete eventinin içine aşağıdaki kodu ekledim. Bu kodu internette buldum, sadeleştirdim.
Böylece Adobe Acrobat'ın toolbarını gizlemiş oldum. Böylelikle Save butonu da gizlenmiş oldu. Yazdırmak için ise, kullanıcı pdf dokumanı üzerinde sağ tıkladığında çıkan menüde print seçeneği çıkıyor.

Visual Fox Pro
LPARAMETERS pdisp, url

loDoc=Thisform.Ole1.OBJECT.Document
WITH loDoc
    .setLayoutMode("OneColumn")
     .setZoom(50)
    .setShowToolbar(.F.)
    .setShowScrollbars(.T.)
ENDWITH

Ayrıca, form üzerinde bir buton yapıp click eventine aşağıdaki kodu yazdım:

Visual Fox Pro
loDoc=Thisform.Ole1.OBJECT.Document

WITH loDoc
.print
ENDWITH

Tek sorunum kaldı o da;
Adobe Acrobat'ın Preferences içinde olan Display in Browser seçeneğini programatik olarak işaretli  hale getirmek. Çünkü eğer bu işaretli değil ise pdf dosyası benim formda değil Acrobat penceresinde açılıyor. O zaman da Save butonu çıkıyor ya da çıkarılabiliyor.
Bu sorunum için yardım ederseniz sevinirim.

5

Re: Formda pdf dosyası görüntülemek

Mobilden cevapladigim icin su an arsivim yanimda yok ancak html viewer kullanarak form icinde pdf i goruntuleyebilirsin , html viewer yazarak arama yaparsan forum icinde ornek kesinlikle var

http://www.fox4um.com/post/11939/#p11939

Buradaki navigate2 ile yazilan satira pdf dosya adresini yazarsan pdf dosyasi form icinde gozukecek ( artik tum tarayicilar IE,Firefox,Chrome vs built in pdf goruntuleyebiliyor)

6

Re: Formda pdf dosyası görüntülemek

Browser'ı kullanman güzel fikir.
Geçmişde pdf'i tif formatına çevirmenin nedeni: faks için gerekiyordu.

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

7

Re: Formda pdf dosyası görüntülemek

Adobe Acrobat'ın Preferences içinde olan Display PDF in Browser seçeneğini programatik olarak işaretli  hale getirme sorunum sürüyor. Bunda da çözüme yaklaştım. Acrobat Reader'ın registry'e bir değer yazdığın öğrendim. Bunu programım ilk çalıştığında kontrol edip varsa silmek istiyorum.
Açarsam; Kullanıcı, Acrobat Reader'da Preferences'da Display PDF in Browser seçeneğini uncheck yaparsa

HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\9.0\Originals\"bBrowserIntegration"=dword:00000000  ekleniyor.

Eğer bu key olmazsa ya da 1 olursa PDF dökümanları Web Browser'da açılıyor. Ben bunu forse etmek için program ilk çalıştığında bu key'in var olup olmadığını kontrol edip varsa silmek istiyorum. Bunun için forumda arama yaptım. Registry'de bie key'in var olup olmadığını çek edebiliyoruz. Ancak sorunum şu: eğer makinada Acrobat reader 10 ya da 8 yüklü ise key'in path'i değişecek. Yani; HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\9.0\Originals\"bBrowserIntegration"=dword:00000000 yerine
HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\10.0\Originals\"bBrowserIntegration"=dword:00000000 olacak.

Yani bir HKEY_CURRENT_USER içinde bBrowserIntegration'ı arayan varsa silen (ya da 1 yapan) bir kod yazmam gerek.

yardımlarınız için teşekkürler.

8

Re: Formda pdf dosyası görüntülemek

Yanlış hatırlamiyorsam Vfp ile birlikde gelen registry class DWORD işlemleri içermiyordu. Onun için galiba Microsft MSN'den ek birşeyler bulmuşdum.
Herneyse, benim registry class'da şu var DWORD için:

Visual Fox Pro
PROCEDURE readregdword

        * This function reads a REG_DWORD from the registry. It will return .T.
        * if successful and store the value in nValueRead. If not successful, it
        * will return .F. and nValueRead will contain -1.
        LPARAMETERS   nKey, cSubKey, cValue,  nValueRead
        * nKey The root key to open. It can be any of the constants defined below.
        * #DEFINE HKEY_CLASSES_ROOT           -2147483648
        * #DEFINE HKEY_CURRENT_USER           -2147483647
        * #DEFINE HKEY_LOCAL_MACHINE          -2147483646
        * #DEFINE HKEY_USERS                  -2147483645
        * cSubKey The SubKey to open.
        * cValue The value that is going to be read.
        * nValueRead What was read from the registry
 
        * WIN 32 API functions that are used
        *!*      DECLARE INTEGER RegOpenKey IN Win32API INTEGER nHKey, STRING @cSubKey, INTEGER @nResult
        *!*      DECLARE INTEGER RegQueryValueEx IN Win32API INTEGER nHKey, STRING lpszValueName, INTEGER dwReserved,;
        *!*        INTEGER @lpdwType, STRING @lpbData, INTEGER @lpcbData
        *!*      DECLARE INTEGER RegCloseKey IN Win32API INTEGER nHKey
 
        * Local variables used
        LOCAL nErrCode          && Error Code returned from Registry functions
        LOCAL nKeyHandle        && Handle to Key that is opened in the Registry
        LOCAL lpdwValueType     && Type of Value that we are looking for.
        LOCAL lpbValue          && The data stored in the value
        LOCAL lpcbValueSize     && Size of the variable
        LOCAL lpdwReserved      && Reserved Must be 0
 
        * Initialize the variables
        nKeyHandle = 0
        lpdwReserved = 0
        lpdwValueType = REG_DWORD
        lpcbValueSize = 4          && DWORD is 4 bytes
        nValueRead = -1
        lpbValue = SPACE(4)
 
 
        IF THIS.LoadRegFuncs() != ERROR_SUCCESS
          RETURN FALSE
        ENDIF
 
        nErrCode = RegOpenKey(nKey, cSubKey, @nKeyHandle)
        * If the error code isn't 0, then the key doesn't exist or can't be opened.
        IF (nErrCode # 0) THEN
          RETURN .F.
        ENDIF
 
        nErrCode=RegQueryValueEx(nKeyHandle, cValue, lpdwReserved, @lpdwValueType, @lpbValue, @lpcbValueSize)
        =RegCloseKey(nKeyHandle)
        IF (nErrCode # 0) THEN
          RETURN .F.
        ENDIF
 
        nValueRead = THIS.StrToLong(lpbValue)
        RETURN .T.

Visual Fox Pro
PROCEDURE writeregdword

        * This function writes a REG_DWORD to the registry. It will return .T.
        * if successful and .F. if it isn't successful.
        PARAMETERS  nKey, cSubKey, cValue,  nValueToWrite
        * nKey The root key to open. It can be any of the constants defined below.
        * #DEFINE HKEY_CLASSES_ROOT           -2147483648
        * #DEFINE HKEY_CURRENT_USER           -2147483647
        * #DEFINE HKEY_LOCAL_MACHINE          -2147483646
        * #DEFINE HKEY_USERS                  -2147483645
        * cSubKey The SubKey to open.
        * cValue The value that is going to be written.
        * nValueToWrite The value to write to the registry
 
 
        * Local variables used
        LOCAL nErrCode          && Error Code returned from Registry functions
        LOCAL nKeyHandle        && Handle to Key that is opened in the Registry
        LOCAL lpdwValueType     && Type of Value that we are looking for.
        LOCAL lpbValue          && The data stored in the value
        LOCAL lpcbValueSize     && Size of the variable
        LOCAL lpdwReserved      && Reserved Must be 0
 
        * Initialize the variables
        nKeyHandle = 0
        lpdwReserved = 0
        lpdwValueType = REG_DWORD
        lpcbValueSize = 4     && DWORD is 4 bytes
 
        IF THIS.LoadRegFuncs() != ERROR_SUCCESS
          RETURN FALSE
        ENDIF
 
        lpbValue = This.LongToStr(nValueToWrite)
 
        nErrCode = RegOpenKey(nKey, cSubKey, @nKeyHandle)
        * If the error code isn't 0, then the key doesn't exist or can't be opened.
        IF (nErrCode # 0) THEN
          RETURN .F.
        ENDIF
 
        nErrCode = RegSetValueEx(nKeyHandle, cValue, lpdwReserved, lpdwValueType, lpbValue, lpcbValueSize)
        =RegCloseKey(nKeyHandle)
        IF (nErrCode # 0) THEN
          RETURN .F.
        ENDIF
        RETURN .T.
    ENDPROC

Acrobat Reader ile bende senin yaşadığın sorunları yaşamışdım. Müşterilerime Foxit Reader'i yüklemelerini öneriyorum. Onunla bu problem yok.

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

9

Re: Formda pdf dosyası görüntülemek

Teşekkürler.
Deneyeceğim..