Búsqueda de sitios web

PowerShell convierte Word a PDF [2 formas]


Usando el objeto COM de Microsoft Word

Para convertir el documento de Microsoft Word dado a PDF:

  • Cree un objeto COM utilizando el cmdlet New-Object.
  • Utilice el método Open() para abrir el archivo de MS Word.
  • Utilice el método SaveAs() para guardar el archivo PDF.
  • Utilice el método Close() para cerrar el documento de Word.
  • Utilice el método Quit() para salir de la aplicación Word.

Utilice el objeto COM de MS Word:

$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()

Debemos instalar Microsoft Word en nuestra máquina local para utilizar la solución anterior. Primero, utilizamos el cmdlet New-Object con el parámetro -ComObject para crear un nuevo objeto COM de Word y asignarlo a la variable $wordApplication. . ¿Qué es un objeto COM y por qué creamos un objeto COM de Word? podríamos hacer un objeto simple, ¿verdad?

En PowerShell, el componente Modelo de objetos componentes, también conocido como componente COM, es un estándar de interfaz binaria que permite que los componentes de software interactúen entre sí, independientemente del lenguaje de programación o sistema operativo en el que estén programados o desarrollados.

Los objetos COM proporcionan muchas propiedades, métodos y eventos que podemos usar en scripts de PowerShell para realizar automatización y comunicarnos con otras aplicaciones. Como se suponía que íbamos a interactuar con la aplicación Microsoft Word, tuvimos que utilizar el objeto COM.

Para usar un objeto COM en PowerShell, usamos el cmdlet New-Object para crear una instancia de un objeto COM que hace referencia al componente COM y nos permite invocar sus funciones/métodos, acceder a propiedades y manejar eventos. .

Entonces, la primera línea del script anterior creó un objeto COM que representa la aplicación Microsoft Word y lo asignó a la variable $wordApplication en PowerShell; ahora, esta variable se utilizará para abrir, manipular y realizar otros trabajos relacionados con Word.

Los objetos COM son específicos del sistema operativo Windows y necesitan que el componente o aplicación que representan esté instalado en nuestra máquina local. Recuerde, estar familiarizado con la documentación y las mejores prácticas de PowerShell es esencial porque los objetos COM a veces implican transformaciones (conversiones) de tipos de datos complejas y administración de memoria.

A continuación, utilizamos el método Open() de la propiedad Document del objeto $wordApplication, que tomó la ruta del archivo fuente como argumento y lo abrió. ; este objeto de documento fue asignado a la variable $document. Después de eso, definimos una variable llamada $pdfFilePath y la inicializamos con la ruta del archivo y el nombre del archivo PDF convertido (nuestro archivo de salida).

Luego, utilizamos el método SaveAs() del objeto $document para guardar el documento de Word proporcionado como un archivo PDF. El método SaveAs() tomó dos argumentos; el primero era la ruta del archivo y el nombre del archivo de salida, y el segundo era la constante del formato del archivo PDF (17); ambos argumentos se pasaron como referencia usando [ref]. Finalmente, utilizamos el método Close() para cerrar el documento de Word y el método Quit() para salir de la aplicación Word.

En el ejemplo anterior, convertimos un archivo, que debe tener una extensión .docx, pero ¿qué pasa si tenemos varios archivos? ¿Algunos de ellos tienen extensión .doc y otros con .docx? En ese caso, usaremos la siguiente solución.

Utilice el objeto COM de MS 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] 17)
    $document.Close()
}
$wordApplication.Quit()

Este código es similar al ejemplo anterior. Pero aquí, usamos Get-ChildItem para recuperar todos los archivos del $sourceFilesPath dado y los filtramos usando el parámetro -Filter para capturar archivos con Extensiones .doc y .docx. A continuación, utilizamos el cmdlet ForEach-Object para recorrer todos los archivos uno a la vez, abrirlos, almacenar la ruta y el nombre del archivo de salida, guardar el archivo como PDF y cerrar el documento de Word. Finalmente, después de revisar todos los archivos de Word, utilizamos el método Quit() para salir de la aplicación Word.

También podemos convertir el archivo de MS Word a un archivo PDF usando la API de Microsoft Office Interop. Vea el siguiente ejemplo para una demostración.

Utilice la API de interoperabilidad de MS Office:

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()

Primero, agregamos la API de Microsoft Office Interop como Add-Type -AssemblyName Microsoft.Office.Interop.Word, que representaba un documento de Word. Usamos su campo wdExportFormatPDF como argumento en el método SaveAs() para exportar el documento a formato PDF. Es una alternativa a 17 (constante de formato de archivo para PDF) en la API de MS Office Interop.

Uso de la impresora Microsoft Print a PDF

Para convertir el archivo de MS Word a PDF:

  • Utilice el cmdlet New-Object para crear un objeto COM de Word.
  • Utilice el método Open() para abrir el documento de Word proporcionado.
  • Utilice el método PrintOut() para imprimir el documento de Word como un archivo PDF.
  • Utilice el método Close() para cerrar el documento de Word.
  • Utilice el método Quit() para salir de la aplicación Word.

Utilice la impresora MS Print a PDF:

$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()

Este fragmento de código es el mismo que el primer ejemplo de la sección anterior, excepto por una diferencia. Usamos el método PrintOut() del objeto $document para imprimir el archivo de Word como un archivo PDF en el destino especificado, $pdfFilePath. Este método tomó cuatro argumentos que se describen brevemente a continuación:

  1. $false indicaba que no queríamos imprimir el archivo en una impresora física.
  2. $false representaba que no queríamos mostrar el cuadro de diálogo Imprimir.
  3. 0 especificado para imprimir todas las páginas del documento de Word determinado.
  4. $pdfFilePath indica el destino del archivo PDF donde debe almacenarse.

Todos los argumentos se pasaron como referencia usando [ref]. También podemos hacerlo para archivos .doc y .docx usando el mismo código pero con el método PrintOut().

Utilice la impresora MS Print a PDF:

$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()

Artículos relacionados