Изменение ориентации печати без изменения ориентации страницы a.docx

Я использую принтер с непрерывной подачей, и принтер требует, чтобы документы печатались с использованием портретной ориентации, чтобы они выходили, как мне это нужно. Документы, которые я печатаю, однако шире, чем они высокие, и Word 2010 не позволяет портретной компоновке страницы в этом состоянии и автоматически устанавливает ориентацию печати в соответствии с ориентацией страницы. Я хотел бы избежать преобразования файлов .odt и установка дополнительных компонентов. Чтобы быть ясным, мне нужна ориентация печати быть портретной, а ориентация страницы-альбомной. -- этот код изменил их обоих

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

oWord = CreateObject("Word.Application")
oWord.Visible = False
oDoc = oWord.Documents.Add("C:UserslmartinDesktopTemplate.docx")

oDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientPortrait
oWord.PrintOut()
oWord.Quit(SaveChanges:=Word.WdSaveOptions.wdDoNotSaveChanges)
22
задан Wayne
06.01.2023 2:56 Количество просмотров материала 3437
Распечатать страницу

2 ответа

вы можете попробовать экспортировать в PDF, а затем распечатать. Большинство читателей PDF выполняют поворот страницы автоматически, так что вам не нужно беспокоиться о ориентации страницы. Это решение должно быть прекрасным, пока вы не против сделать это вручную для каждого документа, я не могу придумать способ сделать это автоматически.

0
отвечен gronostaj 2023-01-07 10:44

мне удалось получить эту работу, изменив тип файла перед печатью, как рекомендовал gronostaj. Это ключевой элемент моего кода, который выполняется в цикле с обеими строковыми переменными, установленными внутри цикла. Этот код принимает предопределенный шаблон Word, заполняет данные в закладки, сохраняет их как ODT и печатает на принтере по умолчанию.

Edit: сломанный код в подводные лодки и функцию; проверяет что открытый офис будет использован для того чтобы напечатать архив и временно изменяет принтер по умолчанию.

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
0
отвечен Wayne 2023-01-07 13:01

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх