Altere a orientação da impressão sem alterar a orientação da página de um .docx

0

Estou usando uma impressora com alimentação contínua e a impressora exige que os documentos sejam impressos usando a orientação de retrato para que eles saiam como eu preciso deles. No entanto, os documentos que estou imprimindo são mais largos do que altos e o Word 2010 não permite um layout de página de retrato nesta condição e define automaticamente a orientação de impressão para corresponder à orientação da página. Eu gostaria de evitar converter arquivos para .odt e instalar componentes extras. Para deixar claro, preciso que a orientação da impressão seja Retrato e a orientação da página seja Paisagem. - este código mudou os dois

Dim oWord As Word.Application
Dim oDoc As Word.Document

oWord = CreateObject("Word.Application")
oWord.Visible = False
oDoc = oWord.Documents.Add("C:\Users\lmartin\Desktop\Template.docx")

oDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientPortrait
oWord.PrintOut()
oWord.Quit(SaveChanges:=Word.WdSaveOptions.wdDoNotSaveChanges)
    
por Wayne 13.12.2013 / 22:42

2 respostas

0

Consegui fazer isso funcionar alterando o tipo de arquivo antes da impressão, como recomendado por gronostaj. Este é o elemento-chave para o meu código que é executado em um loop com as duas variáveis de string sendo definidas dentro do loop. Esse código usa um modelo do Word predefinido, preenche os dados nos marcadores, salva-o como ODT e imprime na impressora padrão.

Edit: quebrou o código em subs e uma função; verifica se o Open Office será usado para imprimir o arquivo e alterar temporariamente a impressora padrão.

Includes Word = Microsoft.Office.Interop.Word

Dim content As String
Dim finishedFile As String

Public Sub main
If checkForOpenOffice() Then
// start of loop
content = "value"
finishedFile = "value"
generateFile()
printFile()
// end of loop
Else
// error message
End If
End Sub


Private Sub generateFile(ByRef content As String, ByRef FinishedFile As String)
Dim oWord As Word.Application
Dim oDoc As Word.Document

oDoc = oWord.Documents.Add("C:\Users\lmartin\Template.dotx")
oDoc.Bookmarks.Item("Bookmark").Range.Text = content
oDoc.SaveAs2("C:\Users\lmartin\Desktop\" & finishedFile & ".odt", Word.WdSaveFormat.wdFormatOpenDocumentText)
oWord.Quit(SaveChanges:=Word.WdSaveOptions.wdDoNotSaveChanges)
End Sub

Private Sub printFile(finishedFile)
Dim printer As String
Dim pr As New PrintDocument
printer = pr.PrinterSettings.PrinterName
pr.Dispose()

Shell(String.Format("rundll32 printui.dll,PrintUIEntry /y /n ""{0}""", "\NetworkName\PrinterName"))
Dim p As New Process()
p.StartInfo.Verb = "print"
p.StartInfo.CreateNoWindow = False
p.StartInfo.FileName = "C:\Users\lmartin\" & finishedFile & ".odt"
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
p.Start()
p.WaitForExit()
p.Close()
Shell(String.Format("rundll32 printui.dll,PrintUIEntry /y /n ""{0}""", printer))
End Sub

Private Function checkForOpenOffice
Dim odt = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(".odt")
Dim linkedValue = odt.GetValue("")
Dim linkedKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(linkedValue)
Dim openWith = linkedKey.OpenSubKey("Shell\Open\Command").GetValue("")
Dim O As String = CStr(openWith)

If Not O.Contains("swriter.exe") Then
Return False
Else
Return True
End If

End Function
    
por 15.12.2013 / 19:41
0

Você pode tentar exportar para PDF e, em seguida, imprimir. A maioria dos leitores de PDF realiza a rotação da página automaticamente, portanto, você não precisa se preocupar com a orientação da página. Esta solução deve estar bem, contanto que você esteja bem em fazer isso manualmente para cada documento, não consigo pensar em qualquer maneira de fazê-lo automaticamente.

    
por 14.12.2013 / 00:18