PowerShell Word'ü PDF'ye Dönüştürme [2 Yol]


Microsoft Word COM Nesnesini Kullanma

Verilen Microsoft Word belgesini PDF'ye dönüştürmek için:

  • New-Object cmdlet'ini kullanarak bir COM nesnesi oluşturun.
  • MS Word dosyasını açmak için Open() yöntemini kullanın.
  • PDF dosyasını kaydetmek için SaveAs() yöntemini kullanın.
  • Word belgesini kapatmak için Close() yöntemini kullanın.
  • Word uygulamasından çıkmak için Quit() yöntemini kullanın.

MS Word COM Nesnesini Kullan:

$wordApplication = New-Object -ComObject Word.Application
$document = $wordApplication.Documents.Open("E:\Test\file.docx")
$pdfFilePath = "E:\Test\PDFFile.pdf"
$document.SaveAs([ref] $pdfFilePath, [ref] 17)
$document.Close()
$wordApplication.Quit()

Yukarıdaki çözümü kullanabilmek için yerel makinemize Microsoft Word yüklememiz gerekmektedir. İlk olarak, yeni bir Word COM nesnesi oluşturmak ve onu $wordApplication değişkenine atamak için -ComObject parametresiyle New-Object cmdlet'ini kullandık. . COM nesnesi nedir ve neden bir Word COM nesnesi oluşturduk; basit bir nesne yapabiliriz, değil mi?

PowerShell'de COM bileşeni olarak da adlandırılan Bileşen Nesne Modeli bileşeni, programlandıkları veya geliştirildikleri herhangi bir programlama dili veya işletim sistemi ne olursa olsun, yazılım bileşenlerinin birbirleriyle etkileşime girmesine olanak tanıyan ikili bir arayüz standardıdır.

COM nesneleri, otomasyonu gerçekleştirmek ve diğer uygulamalarla iletişim kurmak için PowerShell betiklerinde kullanabileceğimiz birçok özellik, yöntem ve olay sağlar. Microsoft Word uygulamasıyla etkileşim kuracağımız için COM nesnesini kullanmamız gerekiyordu.

PowerShell'de bir COM nesnesi kullanmak için, COM bileşenine başvuran ve onun işlevlerini/yöntemlerini çağırmamıza, özelliklere erişmemize ve olayları işlememize izin veren bir COM nesnesi örneğini oluşturmak için Yeni Nesne cmdlet'ini kullandık .

Yani yukarıdaki betiğin ilk satırı, Microsoft Word uygulamasını temsil eden bir COM nesnesi oluşturdu ve onu PowerShell'deki $wordApplication değişkenine atadı; Artık bu değişken Word ile ilgili diğer işleri açmak, değiştirmek ve gerçekleştirmek için kullanılacak.

COM nesneleri Windows işletim sistemine özeldir ve temsil ettikleri bileşen veya uygulamanın yerel makinemize yüklenmesini gerektirir. COM nesnelerinin bazen karmaşık veri türü dönüşümleri (dönüşümleri) ve bellek yönetimi gerektirmesi nedeniyle PowerShell belgelerine ve en iyi uygulamalara aşina olmanın çok önemli olduğunu unutmayın.

Daha sonra, kaynak dosyanın yolunu argüman olarak alan ve onu açan $wordApplication nesnesinin Document özelliğinin Open() yöntemini kullandık. ; bu belge nesnesi $document değişkenine atandı. Bundan sonra $pdfFilePath adında bir değişken tanımladık ve bunu dönüştürülen PDF dosyasının (çıkış dosyamız) dosya yolu ve adıyla başlattık.

Daha sonra, sağlanan Word belgesini PDF dosyası olarak kaydetmek için $document nesnesinin SaveAs() yöntemini kullandık. SaveAs() yöntemi iki bağımsız değişken aldı; ilki çıktı dosyasının dosya yolu ve adıydı, ikincisi ise PDF'nin dosya formatı sabitiydi (17); her iki bağımsız değişken de [ref] kullanılarak referans olarak iletildi. Son olarak Word belgesini kapatmak için Close() yöntemini, Word uygulamasından çıkmak için de Quit() yöntemini kullandık.

Yukarıdaki örnekte, .docx uzantısına sahip olması gereken bir dosyayı dönüştürdük. Peki ya birden fazla dosyamız varsa; bazıları .doc uzantılı, bazıları ise .docx uzantılı mı? Bu durumda aşağıdaki çözümü kullanacağız.

MS Word COM Nesnesini Kullan:

$sourceFilesPath = "E:\Test"
$wordApplication = New-Object -ComObject Word.Application
Get-ChildItem -Path $sourceFilesPath -Filter *.doc? | ForEach-Object {
    $document = $wordApplication.Documents.Open($_.FullName)
    $pdfFilePath = "$($_.DirectoryName)\$($_.BaseName).pdf"
    $document.SaveAs([ref] $pdfFilePath, [ref] 17)
    $document.Close()
}
$wordApplication.Quit()

Bu kod önceki örneğe benzer. Ancak burada, verilen $sourceFilesPath'ten tüm dosyaları almak için Get-ChildItem'i kullandık ve dosyaları yakalamak için -Filter parametresini kullanarak bunları filtreledik. .doc ve .docx uzantıları. Daha sonra, tüm dosyalar üzerinde birer birer döngü oluşturmak, dosyayı açmak, çıktı dosyasının yolunu ve adını saklamak, dosyayı PDF olarak kaydetmek ve Word belgesini kapatmak için ForEach-Object cmdlet'ini kullandık. Son olarak tüm Word dosyalarını inceledikten sonra Quit() metodunu kullanarak Word uygulamasından çıktık.

MS Word dosyasını Microsoft Office Interop API'yi kullanarak PDF dosyasına da dönüştürebiliriz. Gösterim için aşağıdaki örneğe bakın.

MS Office Birlikte Çalışma API'sini kullanın:

Add-Type -AssemblyName Microsoft.Office.Interop.Word
$sourceFilesPath = "E:\Test"
$wordApplication = New-Object -ComObject Word.Application
Get-ChildItem -Path $sourceFilesPath -Filter *.doc? | ForEach-Object {
    $document = $wordApplication.Documents.Open($_.FullName)
    $pdfFilePath = "$($_.DirectoryName)\$($_.BaseName).pdf"
    $document.SaveAs([ref] $pdfFilePath, [ref] [Microsoft.Office.Interop.Word.WdExportFormat]::wdExportFormatPDF)
    $document.Close()
}
$wordApplication.Quit()

Öncelikle Microsoft Office Interop API'sini bir Word belgesini temsil eden Add-Type -AssemblyName Microsoft.Office.Interop.Word olarak ekledik. Belgeyi PDF formatına dışa aktarmak için wdExportFormatPDF alanını SaveAs() yönteminde argüman olarak kullandık. MS Office Interop API'sindeki 17'ye (PDF için dosya formatı sabiti) bir alternatiftir.

Microsoft Print to PDF Yazıcısını Kullanma

MS Word dosyasını PDF'ye dönüştürmek için:

  • Bir Word COM nesnesi oluşturmak için Yeni Nesne cmdlet'ini kullanın.
  • Sağlanan Word belgesini açmak için Open() yöntemini kullanın.
  • Word belgesini PDF dosyası olarak yazdırmak için PrintOut() yöntemini kullanın.
  • Word belgesini kapatmak için Close() yöntemini kullanın.
  • Word uygulamasından çıkmak için Quit() yöntemini kullanın.

MS Print to PDF Yazıcısını Kullanın:

$wordApplication = New-Object -ComObject Word.Application
$document = $wordApplication.Documents.Open("E:\Test\file.docx")
$pdfFilePath = "E:\Test\PDFFile.pdf"
$document.PrintOut([ref] $false, [ref] $false, [ref] 0, [ref] $pdfFilePath)
$document.Close()
$wordApplication.Quit()

Bu kod pasajı, bir fark dışında önceki bölümdeki ilk örnekle aynıdır. Word dosyasını belirtilen hedefte ($pdfFilePath) PDF dosyası olarak yazdırmak için $document nesnesinin PrintOut() yöntemini kullandık. Bu yöntem aşağıda kısaca açıklanan dört argüman aldı:

  1. $false, dosyayı fiziksel bir yazıcıya yazdırmak istemediğimizi belirtti.
  2. $false, Yazdır iletişim kutusunu görüntülemek istemediğimizi temsil ediyordu.
  3. Verilen Word belgesinin tüm sayfalarını yazdırmak için 0 belirtildi.
  4. $pdfFilePath, PDF dosyasının saklanması gereken hedefini belirtir.

Tüm bağımsız değişkenler [ref] kullanılarak referans olarak iletildi. Aynı kodu kullanarak ancak PrintOut() yöntemini kullanarak .doc ve .docx dosyaları için de bunu yapabiliriz.

MS Print to PDF Yazıcısını Kullanın:

$sourceFilesPath = "E:\Test"
$wordApplication = New-Object -ComObject Word.Application
Get-ChildItem -Path $sourceFilesPath -Filter *.doc? | ForEach-Object {
    $document = $wordApplication.Documents.Open($_.FullName)
    $pdfFilePath = "$($_.DirectoryName)\$($_.BaseName).pdf"
    $document.PrintOut([ref] $false, [ref] $false, [ref] 0, [ref] $pdfFilePath)
    $document.Close()
}
$wordApplication.Quit()

İlgili makaleler