Modificare l'orientamento di stampa senza modificare l'orientamento della pagina di un .docx


0

Utilizzo una stampante con alimentazione continua e la stampante richiede che i documenti vengano stampati utilizzando l'orientamento verticale per farli uscire come se ne avessi bisogno. I documenti che sto stampando tuttavia sono più larghi di quanto siano alti e Word 2010 non consente un layout di pagina verticale in questa condizione e imposta automaticamente l'orientamento di stampa in modo che corrisponda all'orientamento della pagina. Vorrei evitare la conversione di file in .odt e l'installazione di componenti aggiuntivi. Per essere chiari ho bisogno che l'orientamento della stampa sia verticale e che l'orientamento della pagina sia orizzontale. - questo codice li ha cambiati entrambi

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)

Quindi in pratica vuoi stamparlo ruotato di 90 gradi? Ti serve che sia fatto automaticamente (cioè dovrai stampare molti documenti del genere) o sta facendo qualcosa manualmente un'opzione?
gronostaj

Sto creando i documenti da un modello che contiene caselle di testo. Ho un programma separato che popola i campi e salva i file su una rete. Sono etichette da 4 x 2 pollici. Poiché Word 2010 collega la pagina e l'orientamento di stampa, la regolazione manuale dei file non ha funzionato. Speravo di poter modificare a livello di codice l'orientamento di stampa e di "ingannare" Word per stampare quanto mi serve. Ho passato giorni su msdn alla ricerca di qualcosa di utile.
Wayne

Risposte:


0

Puoi provare ad esportare in PDF e quindi stampare. La maggior parte dei lettori PDF esegue automaticamente la rotazione delle pagine, quindi non è necessario preoccuparsi dell'orientamento della pagina. Questa soluzione dovrebbe andare bene finché si sta bene con il farlo manualmente per ogni documento, non posso pensare ad alcun modo per farlo automaticamente.


Ho ottenuto i file per stampare correttamente dopo l'esportazione in PDF o ODT. Per PDF non sono riuscito a trovare alcuna soluzione per stampare automaticamente senza lasciare una finestra di Adobe appesa, quindi alla fine sono andato con ODT. Invierò il mio codice di lavoro come risposta domani poiché ho ancora la restrizione di 8 ore.
Wayne

0

Sono riuscito a farlo funzionare cambiando il tipo di file prima della stampa, come raccomandato da gronostaj. Questo è l'elemento chiave del mio codice che viene eseguito in un ciclo con entrambe le variabili stringa impostate all'interno del ciclo. Questo codice accetta un modello di Word predefinito, inserisce i dati nei segnalibri, li salva come ODT e stampa sulla stampante predefinita.

Modifica: ha rotto il codice in subs e una funzione; verifica che Open Office venga utilizzato per stampare il file e modifica temporaneamente la stampante predefinita.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.