PDF -> Dosya -> Özellikler - Veri Çekme Hk.

Katılım
20 Şubat 2007
Mesajlar
651
Excel Vers. ve Dili
2007 Excel, Word Tr
Çalışanda aynı sizin eklediğiniz resimdeki ifadeler var. Şöyle text olarak buraya yapıştırıyorum.
CropBox[0 0 612 792]/MediaBox[0 0 612 792]/Parent
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
O zaman durum şöyle gibi;

PDF dosyası düzgün bir şekilde hazırlandıysa, içinde "MediaBox" dosyada gömülü olarak bulunmalı.

Sizin çalışan dosyanızdaki verilere göre;

-Sayfanın eni: 612/72*2,54 = 22 cm

-Sayfanın boyu : 792/72*2,54 = 28 cm.

Ben PDF dosyalarını Adobe Reader ile görüntülüyorum, bu bir şey fark eder mi ..... ondan emin değilim. Olabilir de yani .....

.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,343
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
@necati bey bir de pdf dosya versiyonunu kontrol edin. En başta yazar. 1.6 veya 1.7 gibi değer yazar.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Zeki Bey, benim örnekler 1.4 ~ 1.7 ve sorun yok.

.
 
Katılım
20 Şubat 2007
Mesajlar
651
Excel Vers. ve Dili
2007 Excel, Word Tr
Bende çalışan ve çalışmayan sayfaların versiyonu aynı:
%PDF-1.6%âãÏÓ
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,343
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Tam binary dosyadır diye düşündüm. Bu ihtimal de bitti o zaman...
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,230
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bende Windows10 Pro 64 Bit - Microsoft 365 TR 64 Bit sürümde test ettim. Sorunsuz çalıştı.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
@ÖmerFaruk ;

6 No'lu mesaja eklediğiniz dosyayı kullanarak, 16 No'lu mesajda belirttiğim işlemi yapabilir misiniz?

.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Farklı satırlarda var. Bir sürü
İlk ikisini ve sonucnsunu paylaştım.

1 0 obj
<</Type/Page/MediaBox[ 0 0 595.276 841.89]/Resources<</ColorSpace<</Cs1 1157 0 R >>/ExtGState<</Gs1 1155 0 R /Gs2 1061 0 R >>/Font<</Tc1.0 1159 0 R /Tc4.1 1062 0 R >>>>/Contents 2 0 R /Parent 1145 0 R /Rotate 0/CropBox[ 0 0 595.276 841.89]>>
endobj

3 0 obj
<</Type/Page/MediaBox[ 0 0 595.276 841.89]/Resources<</ExtGState<</Gs2 1061 0 R /Gs1 1155 0 R /Gs3 1066 0 R /Gs4 1065 0 R /Gs5 1067 0 R /Gs6 1068 0 R >>/ColorSpace<</Cs1 1157 0 R >>/Font<</Tc4.1 1062 0 R /Tc1.0 1159 0 R /Tc5.0 1069 0 R >>>>/Contents 4 0 R /Parent 1145 0 R /Rotate 0/CropBox[ 0 0 595.276 841.89]>>
endobj

1154 0 obj
<</Type/Page/MediaBox[ 0 0 595.276 841.89]/Resources<</ExtGState<</Gs1 1155 0 R >>/XObject<</X0 1156 0 R >>/ColorSpace<</Cs1 1157 0 R >>/Font<</Tc1.0 1159 0 R /Tc2.0 1162 0 R /Tc3.1 1165 0 R >>>>/Contents 1169 0 R /Parent 1145 0 R /Rotate 0/CropBox[ 0 0 595.276 841.89]>>
endobj
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Hiçbir sorun gözükmüyor.......

Peki, sizin mesajınızdan aldığım "String" ifadesinin kullanıldığı aşağıdaki kodu çalıştırınca hata veriyor mu? Yoksa, Msgbox "21 cm X 30 cm" şeklinde sonucu veriyor mu?

C#:
Sub Test2()
'   Haluk 18/09/2021
'   sa4truss@gmail.com
'   https://excelhaluk.blogspot.com/

    Dim FileNum As Long
    Dim strRetVal As String
    Dim RegExp As Object, temp As String
    
    Set RegExp = CreateObject("VBscript.RegExp")
    RegExp.Global = False
    
    RegExp.Pattern = "MediaBox\[([^\]\[]+)\]"
    
    strRetVal = "1 0 obj" & vbCrLf & _
                "<</Type/Page/MediaBox[ 0 0 595.276 841.89]/Resources<</ColorSpace<</Cs1 1157 0 R >>" & _
                "/ExtGState<</Gs1 1155 0 R /Gs2 1061 0 R >>/Font<</Tc1.0" & _
                "1159 0 R /Tc4.1 1062 0 R >>>>/Contents 2 0 R /Parent 1145 0 R " & _
                "/Rotate 0/CropBox[ 0 0 595.276 841.89]>>" & vbCrLf & _
                "endobj"
    
    temp = Trim(RegExp.Execute(strRetVal)(0).SubMatches(0))
    
    MsgBox Round(Val(Split(temp, " ")(2)) / 72 * 2.54, 0) & " cm X " & Round(Val(Split(temp, " ")(3)) / 72 * 2.54, 0) & " cm"
End Sub
.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Dediğin gibi, Test2 de 21x30 cm yi gördüm. GetPageSize fonksiyonunu kullanmayınca oldu.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
"GetPageSize" fonksiyonuyla, "Test2" prosedürü aslında aynı kodlar.... demek ki; PDF'i binary olarak açmak sizin bilgisayarda sıkıntı yaratıyor.

.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Fonksiyona satır ilave ettim.
C++:
    FileNum = FreeFile
    Open PDF_File For Binary As #FileNum
        strRetVal = Space(LOF(FileNum))
        uzunluk = Len(strRetVal)
        part1=Mid(strRetVal,1,100)
        Get #FileNum, , strRetVal
    Close #FileNum
uzunluk değişkeni =19.902.610 değerini aldı

part1 değişkeni aşağıdaki değeri aldı.
Buraya yapıştırınca alt alta görülüyor, Watch windowda tek satırda görünüyordu

"%PDF-1.7
%âãÏÓ
2 0 obj
<<
/Metadata 4 0 R
/Outlines 5 0 R
/Pages 6 0 R
/Type /Catalog
>>
endobj
4 0 "
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
@ÖmerFaruk Bey, 3 No'lu mesajdaki "GetPageSize" fonksiyonu yerine, aşağıdakini kullanınca sonuç alabiliyor musunuz?


C#:
Function GetPageSize(PDF_File As String)
'   Haluk 18/09/2021
'   sa4truss@gmail.com
'   https://excelhaluk.blogspot.com/

    Dim FSO As Object, objFile As Object
    Dim strRetVal As String
    Dim RegExp As Object, temp As String
    
    Const ForReading = 1
    
    Set RegExp = CreateObject("VBscript.RegExp")
    RegExp.Global = False
    
    RegExp.Pattern = "MediaBox\[([^\]\[]+)\]"

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = FSO.OpenTextFile(PDF_File, ForReading, False, True)
    
    strRetVal = StrConv(objFile.ReadAll, vbUnicode)
    
    temp = Trim(RegExp.Execute(strRetVal)(0).SubMatches(0))
    
    GetPageSize = Round(Val(Split(temp, " ")(2)) / 72 * 2.54, 0) & " cm X " & Round(Val(Split(temp, " ")(3)) / 72 * 2.54, 0) & " cm"
    
    Set objFile = Nothing
    Set FSO = Nothing
    Set RegExp = Nothing
 End Function

.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Merhaba, ancak bilgisayar başına geçebildim.
Fonksiyonu değiştirdim. Sonuç aynı
Aşağıdaki satırda hata veriyor

temp = Trim(RegExp.Execute(strRetVal)(0).SubMatches(0))
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Günaydın Ö. Faruk bey,

Sizin bilgisayarda neden çalışmıyor, anlamadım doğrusu......

.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,230
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
@Haluk Bey,

RegExp yerine alternatif olarak InStr komutu kullanılarak belki sonuca gidilebilir.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Korhan Bey, olabilir tabii ama dosyayı açıp da içinde "MediaBox" ifadesini gördükten sonra RegExp'nin çalışmaması mümkün değil bence....

.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
@Korhan Ayhan 'ın önerisiyle "RegExp" yerine klasik string manipulasyonlarıyla revize edilen fonksiyon aşağıdadır.

@ÖmerFaruk Bey veya @necati Bey deneyip de sonucu bildirirse, sorunun RegExp'den kaynaklanıp kaynaklanmadığını anlarız....

C#:
Function GetPageSize(PDF_File As String)
'   Haluk 19/09/2021
'   sa4truss@gmail.com
'   https://excelhaluk.blogspot.com/

    Dim FSO As Object, objFile As Object
    Dim strRetVal As String
    Dim temp As String
 
    Const ForReading = 1
 
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = FSO.OpenTextFile(PDF_File, ForReading, False, True)
    strRetVal = StrConv(objFile.ReadAll, vbUnicode)
 
    temp = Trim(Replace(Split(Split(strRetVal, "MediaBox")(1), "]")(0), "[", ""))
 
    GetPageSize = Round(Val(Split(temp, " ")(2)) / 72 * 2.54, 0) & " cm X " & Round(Val(Split(temp, " ")(3)) / 72 * 2.54, 0) & " cm"
 
    Set objFile = Nothing
    Set FSO = Nothing
End Function

.
 
Son düzenleme:

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Bu arada, yukarıda 22 No'lu mesajımda belirttiğim gibi; eğer PDF dosyası düzgün bir şekilde hazırlanmışsa içinde mutlaka "MediaBox" gömülü olarak vardır.

Eğer yoksa, sayfa boyutunu alamayız....

Bu durumda, kodun hata vermemesi için, 3 No'lu mesajımdaki kodları revize ettim ve "MediaBox" bulunamadığı zaman sonuç olarak "#N/A cm X #N/A cm" yazılmasını sağladım.

@necati Bey, bana içinde "MediaBox" verilerinin gömülü olmadığı örnek bir PDF dosyası olarak bu mesaj ekindeki "Ornek_Dosya_1.pdf" dosyasını verdi. Bende bu dosyanın içine "MediaBox" verilerinin gömülmesini sağlayarak "Ornek_Dosya_2.pdf" olarak düzeltince, sayfa boyutları alınabildi.

Söz konusu PDF dosyaları ektedir.
 

Ekli dosyalar

Son düzenleme:
Üst