PDF Birleştirme (Uygulamasız)

Katılım
19 Eylül 2012
Mesajlar
322
Excel Vers. ve Dili
2010 türkçe
Değerli Excel üstadı hocalarım. Sizden bir ricada bulunmak istiyorum. Şimdiye kadar VBA ile neredeyse her isteğin mümkün olabileceğini sizlerden öğrendim.

Excel'in dışa pdf olarak aktardığı pdf dosyalarını harici bir uygulama kullanmadan makro kodu ile tek pdf'de birleştirebilir miyiz? Bu mümkün müdür?

Excel'in masa üstüne PDF adlı klasöre 1'den başlayıp 50'ye kadar (1.pdf, 2.pdf, ... diye devam eden) oluşturduğu isimleri belli olan pdf dosyalarını vba kodu kullanarak tek bir pdf dosyasında sayfa sayfa birleltşrebilir miyiz?

Eğer bu mümkünse şimdiden emekleriniz için teşeklürlerimi sunarım.
 

RBozkurt

𐱅𐰇𐰼𐰚
Altın Üye
Katılım
10 Ocak 2018
Mesajlar
724
Excel Vers. ve Dili
Microsoft Office 2024
Google Sheets
Altın Üyelik Bitiş Tarihi
19-12-2026
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,367
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
....pdf dosyalarını harici bir uygulama kullanmadan makro kodu ile tek pdf'de birleştirebilir miyiz? Bu mümkün müdür?....
Mümkün; ancak bu konuda en azından yurt içinde bunun için kafa yoran biriyle ya da platform ile karşılaşmadım. Dünya genelinde araştırma yapın....

Gerek online, gerekse ücretsiz harici uygulama ile birleştirmek işinize gelirse, yukarıdaki önerileri gözardı etmeyin bence....

.
 
Katılım
6 Mart 2024
Mesajlar
168
Excel Vers. ve Dili
Excel 2010 TR & Excel 2016 TR
Sadece @Zeki Gürsoy un gelistirdigi DLL dosyasini yüklemek gerekli
O islemde sadece bir dosyayi cift tiklamakla gerçeklesiyor.

(PdfVBALib_32&64 Klasörünün içinde ki __Install.vbs dosyasını çift tıklayarak çalıştırmanız gerekmektedir)

Geri kalan işlem Excel dosyasinda ki VBA yapiyor
Kodlar açıktir inceleyip gelistirebilirsinizde.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,812
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Alternatif olarak farklı bir dosya ekliyorum
Burada yapılan işlem seçilen excell dosyalarının sayfalarını birleştirme işlemi yaparak sonra pdf olarak kayıt yapılmaktadır.
uygulama userform ile yapılmaktadır.
 

Ekli dosyalar

Katılım
19 Eylül 2012
Mesajlar
322
Excel Vers. ve Dili
2010 türkçe
Alternatif olarak farklı bir dosya ekliyorum
Burada yapılan işlem seçilen excell dosyalarının sayfalarını birleştirme işlemi yaparak sonra pdf olarak kayıt yapılmaktadır.
uygulama userform ile yapılmaktadır.

Hocam peki şöyle birşey olabilir mi?
Diyelimki; yazdırma alanı olan D5:AF60 aralığında bir belge var ve bu belge sadece belirli hücredeki isim değişince veriler yenileniyor ve 50 kişiye ayrı-ayrı görev belgesi oluşuyor. Yazdırma işleminde yazırma alanını sıraya koysa ve en son kişi seçilinceye kadar yazdırma kuyruğunda bekletse ve daha sonra yazıcı kuyruğunda bekleyen 50 adet yazdırmayı pdf olarak kaydetse bu mümkün müdür.?

Umarım soruyu doğru şekilde aktarabilmişimdir.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,459
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Konu başka bir yöne evrildi sanırım...
 
Katılım
19 Eylül 2012
Mesajlar
322
Excel Vers. ve Dili
2010 türkçe
Konu başka bir yöne evrildi sanırım...
Hocam yapılmak istenen aslında aynı şey önce pdf olarak masaüstüne kaydedip daha sonra onları tek pdf de birleştirmek için vba çalışması yerine yazdırma kuyruğunda biriktirip toplu olarak pdf ye dönüştürmekte olabilir. Şayet klasör içindeki pdf ler sadece vba ile kombine edilemiyorsa bu yöntemle yapılabilir mi diye alternatif düşündüm.
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,459
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Yanlış anlaşılmak istemem...

İlk mesajınızda "var olan pdf dosyalarını harici bir uygulama kullanmadan VBA ile tek pdf dosyasında birleştirebilirmiyiz" şeklinde sorunuzu sormuştunuz. Arkadaşlarda size bu yönde destek oldular.

Ama sizin sorunuz exceldeki verileri makro ile tek pdf dosyasına aktarabilirmiyiz şeklinde olsaydı zaten ona göre cevaplar gelecekti.

Bu iki konu özünde farklı işlemler. Çünkü var olan PDF dosyalarını işlemek için genellikle harici uygulamalara ihtiyaç duyuluyor.

Belki bahsettiğiniz birleştirme işlemi direkt VBA kodları ile yapılabiliyordur ama ben denk gelmedim.

Zeki beyin uygulamasında kendisinin derlediği ve forumda paylaştığı bir DLL yardımıyla bu işlem yapılmaktadır. Yani harici bir dosyaya ihtiyaç duyuluyor.
 

hasankardas

Altın Üye
Katılım
14 Ağustos 2006
Mesajlar
412
Excel Vers. ve Dili
Ofis 2021ProPlus TR 64 Bit
Altın Üyelik Bitiş Tarihi
18-01-2027
Bu işlemi illa excel ile yapmak istiyorsanız şahsi düşüncem gidiş yolunuz yanlış oluyor. Neden bunu düşünüyorum. Pdf dosyaları eski offici sürümlerinde okunmuyordu bile. Microsoft sonradan bunun önemini kavradı :) pdf dosyalarının kullanım amacı, excel olsun word olsun dosya yapısını biçimini bozmadan koruyup resim gibi aktarmaktı. Açılımı da PDF (Portable Document Format; Taşınabilir Belge Biçimi). Bu açıklamaya istinaden şunu demek istiyorum. Siz özel dosya biçimini işlemek istiyorsunuz. Bunun için esktra program veya işlem lazım. Ben olsam öyle yapmazdım almak istediğim raporu ayrı ayrı pdf yapardım (her rapor bireysel tutulması gerektiğini düşünüyorum). excel türetilen raporu bir sayfada ayrı ayrı oluşturur sonra onu yine pdf yapardım. Sözleşmenin her bir sayfasını 1 sayfa olarak kayıt edip tek bir sayfa da sözleşmeyi oluşturup onu da pdf yapmak daha kolay olurdu. Sonuç olarak oluşturduğum pdf üzerinde işlem yapmadığıma göre pdf oluşturmadan sayfayı birleştirip tek pdf yapmak daha kolay olurdu. Oluşturulan pdf ler için ve ayrı ayrı oluşturulması için bir sayfa da forumda bolca örnek var... Biraz uzattım kusura bakmayın
 
Katılım
6 Mart 2024
Mesajlar
168
Excel Vers. ve Dili
Excel 2010 TR & Excel 2016 TR
hepsi Dikey A4 boyutunda ve hepsi tek sayfa
O zaman hileli bir şekilde Pdf leri birleştirmiş gibi yapabiliriz.
Gerçekte Pdf lerin ilk sayfalarının fotolarını birleştiriyoruz.

Foto: Excel Menü - Ekle - Nesne - Dosyadan oluştur - her hangi bir Pdf dosyası seçin, Excel sayfasına Pdf in ilk sayfasının Fotosu gelecek

kodların sonunda masaüstünü oluşturulan BirlesikPdfLer.pdf dosyasını incelediğinizde
Pdf in için de hiç yazı(txt) bulunmayacak sadece sayfa sayısı adeti kadar image bulunacak

C++:
Option Explicit
'Biolight 2024 - Eppur Si Muove

'https://www.excel.web.tr/threads/pdf-birlestirme-uygulamasiz.215154/

Sub MergePDFOLEObjects()
    Dim ws As Worksheet
    Dim PdfSecim As Variant
    Dim oleObj As OLEObject
    Dim pdfPath As String
    Dim i As Integer
    Dim ilkHucre As Long
   
    ' PDF dosyalarını seç
    PdfSecim = Application.GetOpenFilename("PDF dosyalar,*.pdf", , "PDF dosyalarını seçiniz.", , True)
   
    If IsArray(PdfSecim) = False Then
        MsgBox "Herhangi bir dosya seçilmedi!", vbExclamation, "İşlem iptal edildi."
        Exit Sub
    End If

    Application.ScreenUpdating = False
   
    ' Yeni bir sayfa ekle
    Set ws = ThisWorkbook.Sheets.Add
   
    ' Sayfa yapısını A4 boyutu ve kücük kenar boşluk ayarla
    With ws.PageSetup
        .PaperSize = xlPaperA4
        .Orientation = xlPortrait
        .LeftMargin = Application.InchesToPoints(0.2)
        .RightMargin = Application.InchesToPoints(0.2)
        .TopMargin = Application.InchesToPoints(0.2)
        .BottomMargin = Application.InchesToPoints(0.2)
        .HeaderMargin = Application.InchesToPoints(0.2)
        .FooterMargin = Application.InchesToPoints(0.2)
        .ScaleWithDocHeaderFooter = False
        .CenterHorizontally = False
        .CenterVertically = False
        .Zoom = 100
    End With
   
    ' Sayfa yapısını ayarladıktan sonra
    ' Tek sayfa kaç Satırdan oluşuyor
    ilkHucre = PageRowCount(ws)
     
    ' Seçilen PDF dosyalarını her birini ayrı sayfa başına ekle
    For i = LBound(PdfSecim) To UBound(PdfSecim)
        Set oleObj = ws.OLEObjects.Add(Filename:=PdfSecim(i), Link:=False, DisplayAsIcon:=False)
       
        oleObj.Top = oleObj.Top + 2 ' +2 sayfadan taşmasını engelle
        oleObj.Left = oleObj.Left + 2 ' +2 sayfadan taşmasını engelle
       
        ' oleObj nin genişliğini A4 genişliği kadar yap ( 21 cm = 595,2755905511811 nokta )
        oleObj.Width = (21 * (72 / 2.54)) - Application.InchesToPoints(1) ' -1 inc sayfa taşmasını engelle
       
        ' Eklenecek bir sonra ki oleObj nin yerini belirt
        ' Sayfa başında ilk hücreyi seç
        ActiveCell.Offset(ilkHucre, 0).Select
       
    Next i
       
    ' PDF olarak kaydet
    pdfPath = Environ("USERPROFILE") & "\Desktop\BirlesikPdfLer.pdf"
    ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath, Quality:=xlQualityStandard, _
                           IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

    Application.DisplayAlerts = False
        ws.Delete
    Application.DisplayAlerts = True

    Application.ScreenUpdating = True
   
End Sub

' Tek sayfa kaç Satırdan oluşuyor
Private Function PageRowCount(ws As Worksheet)
    Dim i As Integer
    For i = 45 To 100
        ws.Range("A" & i).Value = "A" ' Geçici veri
        If (ws.HPageBreaks.Count + 1) = 2 Then
            ws.Range("A" & i).ClearContents ' Temizle
            PageRowCount = i
            Exit Function
        End If
        ws.Range("A" & i).ClearContents ' Temizle
    Next i
End Function
 
Katılım
19 Eylül 2012
Mesajlar
322
Excel Vers. ve Dili
2010 türkçe
O zaman hileli bir şekilde Pdf leri birleştirmiş gibi yapabiliriz.
Gerçekte Pdf lerin ilk sayfalarının fotolarını birleştiriyoruz.

Foto: Excel Menü - Ekle - Nesne - Dosyadan oluştur - her hangi bir Pdf dosyası seçin, Excel sayfasına Pdf in ilk sayfasının Fotosu gelecek

kodların sonunda masaüstünü oluşturulan BirlesikPdfLer.pdf dosyasını incelediğinizde
Pdf in için de hiç yazı(txt) bulunmayacak sadece sayfa sayısı adeti kadar image bulunacak

C++:
Option Explicit
'Biolight 2024 - Eppur Si Muove

'https://www.excel.web.tr/threads/pdf-birlestirme-uygulamasiz.215154/

Sub MergePDFOLEObjects()
    Dim ws As Worksheet
    Dim PdfSecim As Variant
    Dim oleObj As OLEObject
    Dim pdfPath As String
    Dim i As Integer
    Dim ilkHucre As Long
  
    ' PDF dosyalarını seç
    PdfSecim = Application.GetOpenFilename("PDF dosyalar,*.pdf", , "PDF dosyalarını seçiniz.", , True)
  
    If IsArray(PdfSecim) = False Then
        MsgBox "Herhangi bir dosya seçilmedi!", vbExclamation, "İşlem iptal edildi."
        Exit Sub
    End If

    Application.ScreenUpdating = False
  
    ' Yeni bir sayfa ekle
    Set ws = ThisWorkbook.Sheets.Add
  
    ' Sayfa yapısını A4 boyutu ve kücük kenar boşluk ayarla
    With ws.PageSetup
        .PaperSize = xlPaperA4
        .Orientation = xlPortrait
        .LeftMargin = Application.InchesToPoints(0.2)
        .RightMargin = Application.InchesToPoints(0.2)
        .TopMargin = Application.InchesToPoints(0.2)
        .BottomMargin = Application.InchesToPoints(0.2)
        .HeaderMargin = Application.InchesToPoints(0.2)
        .FooterMargin = Application.InchesToPoints(0.2)
        .ScaleWithDocHeaderFooter = False
        .CenterHorizontally = False
        .CenterVertically = False
        .Zoom = 100
    End With
  
    ' Sayfa yapısını ayarladıktan sonra
    ' Tek sayfa kaç Satırdan oluşuyor
    ilkHucre = PageRowCount(ws)
    
    ' Seçilen PDF dosyalarını her birini ayrı sayfa başına ekle
    For i = LBound(PdfSecim) To UBound(PdfSecim)
        Set oleObj = ws.OLEObjects.Add(Filename:=PdfSecim(i), Link:=False, DisplayAsIcon:=False)
      
        oleObj.Top = oleObj.Top + 2 ' +2 sayfadan taşmasını engelle
        oleObj.Left = oleObj.Left + 2 ' +2 sayfadan taşmasını engelle
      
        ' oleObj nin genişliğini A4 genişliği kadar yap ( 21 cm = 595,2755905511811 nokta )
        oleObj.Width = (21 * (72 / 2.54)) - Application.InchesToPoints(1) ' -1 inc sayfa taşmasını engelle
      
        ' Eklenecek bir sonra ki oleObj nin yerini belirt
        ' Sayfa başında ilk hücreyi seç
        ActiveCell.Offset(ilkHucre, 0).Select
      
    Next i
      
    ' PDF olarak kaydet
    pdfPath = Environ("USERPROFILE") & "\Desktop\BirlesikPdfLer.pdf"
    ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath, Quality:=xlQualityStandard, _
                           IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

    Application.DisplayAlerts = False
        ws.Delete
    Application.DisplayAlerts = True

    Application.ScreenUpdating = True
  
End Sub

' Tek sayfa kaç Satırdan oluşuyor
Private Function PageRowCount(ws As Worksheet)
    Dim i As Integer
    For i = 45 To 100
        ws.Range("A" & i).Value = "A" ' Geçici veri
        If (ws.HPageBreaks.Count + 1) = 2 Then
            ws.Range("A" & i).ClearContents ' Temizle
            PageRowCount = i
            Exit Function
        End If
        ws.Range("A" & i).ClearContents ' Temizle
    Next i
End Function

Hocam ilgi alanız için çok teşekkür ederim. Birazdan PC başına geçip denemek için sabırsızlanıyorum.
 
Üst