เปลี่ยนการวางแนวการพิมพ์โดยไม่เปลี่ยนการวางแนวหน้าของ. docx


0

ฉันใช้เครื่องพิมพ์ที่มีฟีดต่อเนื่องและเครื่องพิมพ์ต้องการเอกสารที่จะพิมพ์โดยใช้การวางแนวตั้งเพื่อให้พวกเขาออกมาเหมือนที่ฉันต้องการ อย่างไรก็ตามเอกสารที่ฉันกำลังพิมพ์นั้นกว้างกว่าเอกสารสูงและ 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:\Users\lmartin\Desktop\Template.docx")

oDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientPortrait
oWord.PrintOut()
oWord.Quit(SaveChanges:=Word.WdSaveOptions.wdDoNotSaveChanges)

โดยพื้นฐานแล้วคุณต้องการพิมพ์มันหมุน 90 องศา? คุณต้องการให้มันทำโดยอัตโนมัติ (เช่นคุณจะต้องพิมพ์เอกสารจำนวนมากเช่นนั้น) หรือทำตัวเลือกด้วยตัวเอง?
gronostaj

ฉันกำลังสร้างเอกสารจากเทมเพลตที่มีกล่องข้อความอยู่ ฉันมีโปรแกรมแยกต่างหากที่เติมฟิลด์และบันทึกไฟล์ในเครือข่าย มันคือฉลาก 4 x 2 นิ้ว เนื่องจาก Word 2010 เชื่อมโยงหน้าและการวางแนวการพิมพ์การปรับไฟล์ด้วยตนเองไม่ทำงาน ฉันหวังว่าฉันสามารถเปลี่ยนการวางแนวการพิมพ์โดยทางโปรแกรมและ 'หลอกลวง' Word เป็นการพิมพ์ตามที่ฉันต้องการ ฉันใช้เวลาหลายวันกับ msdn เพื่อค้นหาสิ่งที่ใช้งานได้
Wayne

คำตอบ:


0

คุณสามารถลองส่งออกเป็น PDF แล้วพิมพ์ โปรแกรมอ่าน PDF ส่วนใหญ่ทำการหมุนหน้าโดยอัตโนมัติดังนั้นคุณไม่ต้องกังวลกับการวางแนวหน้ากระดาษ วิธีนี้น่าจะใช้ได้ตราบใดที่คุณทำได้ด้วยตนเองสำหรับเอกสารทุกฉบับฉันไม่สามารถคิดได้ว่าจะทำอย่างไรโดยอัตโนมัติ


ฉันได้รับไฟล์ที่จะพิมพ์อย่างถูกต้องหลังจากส่งออกเป็น PDF หรือ ODT สำหรับ PDF ฉันไม่สามารถหาวิธีแก้ไขปัญหาการพิมพ์อัตโนมัติโดยไม่ปล่อยให้หน้าต่าง Adobe ห้อยออกมาดังนั้นฉันจึงไปกับ ODT ในที่สุด ฉันจะโพสต์รหัสการทำงานของฉันเป็นคำตอบในวันพรุ่งนี้เพราะฉันยังมีข้อ จำกัด 8 ชั่วโมง
Wayne

0

ฉันจัดการเพื่อให้การทำงานนี้โดยการเปลี่ยนประเภทไฟล์ก่อนพิมพ์เช่น gronostaj แนะนำ นี่คือองค์ประกอบสำคัญในรหัสของฉันซึ่งวิ่งในวงด้วยตัวแปรสตริงทั้งสองถูกตั้งค่าภายในวง รหัสนี้ใช้เทมเพลต Word ที่กำหนดไว้ล่วงหน้าเติมข้อมูลลงในบุ๊คมาร์คบันทึกเป็น ODT และพิมพ์ไปยังเครื่องพิมพ์เริ่มต้น

แก้ไข: ทำลายรหัสลงในหมวดย่อยและฟังก์ชั่น; ตรวจสอบว่าจะใช้ Open Office เพื่อพิมพ์ไฟล์และเปลี่ยนเครื่องพิมพ์เริ่มต้นชั่วคราว

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.