การแปลงไฟล์. docx เป็นข้อความธรรมดาและเก็บรักษาตัวแบ่งบรรทัดเพื่อรักษาการอ้างอิงหมายเลขบรรทัดไปยังเอกสารต้นทาง: วิธีการ & นัย?


9

ฉันกำลังส่งออกเนื้อหาMS Wordเป็นข้อความธรรมดาเพื่อใช้กับโปรแกรมอรรถประโยชน์ข้อความและไฟล์ ฉันมีข้อ จำกัด ที่คุณสมบัติการกำหนดหมายเลขบรรทัดถูกเปิดใช้งานในซอฟต์แวร์ MS และการอ้างอิงใด ๆ กับหมายเลขบรรทัดในผลลัพธ์สุดท้ายจะต้องตรงกับการกำหนดหมายเลขนั้น ดังนั้นป้อน "หมายเลขบรรทัด":

ป้อนคำอธิบายรูปภาพที่นี่ ( Poe, EA )

เห็นได้ชัดว่าสำหรับWord การเรียงลำดับหมายเลขนั้นไม่ทำให้บรรทัดใหม่ขึ้นบรรทัดใหม่แต่จะแบ่ง "บรรทัด" หลังจากระยะห่างที่ถูกต้อง (หรือบางอย่าง) สคริปต์เช่นdocx2txtนี้ไม่ได้พิจารณาถึงสิ่งนี้ตามค่าเริ่มต้นแล้วจะมีการขึ้นบรรทัดใหม่ที่บรรทัดใหม่ ดังนั้นหากฉันใช้grep -nกับการกำหนดหมายเลขบรรทัดจะไม่ตรงกับคุณลักษณะหมายเลขบรรทัดซอร์สดังที่แสดงด้านบน ยังไม่ชัดเจนจากเอกสารว่าฉันจะต้องแก้ไขสคริปต์ Perl เพื่อแปลงไฟล์แบบที่ฉันต้องการในกรณีนี้:

our $config_newLine = "\n"; # Alternative is "\r\n".
our $config_lineWidth = 80; # Line width, used for short line justification.

ฉันพยายามทำหน้าที่แทน\nสำหรับ\r\nแต่ที่ดูเหมือนจะไม่ทำงานสำหรับฉัน ดังนั้นฉันจึงหันไปใช้การส่งออกเอกสารโดยตรงจากWordด้วยการตั้งค่าต่อไปนี้ (บันทึกเป็นข้อความธรรมดาบน v.2013,64 ชิ้น):

  • Unicode (UTF-8)
  • แทรกตัวแบ่งบรรทัด + เส้นท้ายด้วย (CR / LF)
  • อนุญาตการเปลี่ยนตัวอักขระ

และตอนนี้แน่นอนเมื่อฉันใช้.txtไฟล์มีการจับคู่ที่สมบูรณ์แบบระหว่างหมายเลขบรรทัดในคุณลักษณะแหล่งหมายเลขและgrep -nเอาท์พุท


  • มีการกำหนดค่า / กระบวนการเฉพาะที่ฉันควรรู้เกี่ยวกับdocx2txtหรือยูทิลิตี้บรรทัดคำสั่งที่คล้ายกันซึ่งจะทำให้ฉันสามารถแปลงไฟล์. docxเป็นข้อความธรรมดาในขณะที่รักษาตัวแบ่งบรรทัดโดยไม่ต้องหันไปใช้Wordอย่างที่เคยทำ
  • อะไรคือแนวทางปฏิบัติที่ดีที่สุดสำหรับการส่งออกเอกสารMS Word (ซึ่งอาจมีอักขระที่เน้นเสียง) เป็นข้อความธรรมดาสำหรับใช้กับยูทิลิตี้ไฟล์ / ข้อความที่เกี่ยวข้องกับตัวแบ่งบรรทัดและการจัดรูปแบบ และมีความหมายเชิงลบใด ๆ กับการตั้งค่าที่ฉันเลือกสำหรับการส่งออกเช่นการใส่ CR / LF?

ตัวอย่าง

ตามที่แนะนำฉันให้ตัวอย่าง ในไฟล์เก็บถาวร rar นี้ฉันรวมไฟล์. docx ที่มีย่อหน้าง่าย ๆ และไฟล์. txt ที่ส่งออกโดยใช้ Word พร้อมตัวเลือกข้างต้น สามารถเปรียบเทียบหลังกับการรันเริ่มต้นของdocx2txtบนไฟล์ต้นฉบับ


คุณสามารถให้ไฟล์ตัวอย่างแก่เราได้ไหม
cuonglm

คุณไม่สามารถบันทึกเป็นไฟล์ txt จาก Word ได้หรือไม่ หากมันให้การจัดรูปแบบที่ไม่ถูกต้องฉันขอแนะนำให้ใช้ vim หรือ emacs เพื่อแก้ไขปัญหา (เพราะฉันแน่ใจว่าเป็นรูปแบบ)
Steven Walton

1
@Steven Walton ขอบคุณใช่มันทำงานได้เมื่อฉันส่งออกไปยัง txt จาก Word แต่ฉันไม่ต้องการที่จะใช้ Word เป็นประเด็นของฉัน ฉันหวังว่าฉันจะพึ่งสคริปต์ได้เท่านั้น ฉันต้องการกระบวนการสำหรับแบทช์

@Gnouc ตัวอย่างที่ได้รับการให้ ขอบคุณ!

คำตอบ:


8

docx2txtทำงานกับข้อมูลในdocxไฟล์ซึ่งเป็นชุดของไฟล์ XML ที่ซิป

ในส่วนที่เกี่ยวกับการตัดบรรทัด.docxข้อมูล XML จะมีเฉพาะข้อมูลเกี่ยวกับย่อหน้าและการแบ่งอย่างหนักเท่านั้นไม่ใช่เกี่ยวกับการแบ่งเส้นขอบ Soft-break เป็นผลมาจากการแสดงข้อความในแบบอักษรเฉพาะขนาดแบบอักษรและความกว้างของหน้า docx2txtโดยปกติจะพยายามใส่ข้อความใน 80 คอลัมน์ (80 คอลัมน์สามารถกำหนดค่าได้) โดยไม่คำนึงถึงแบบอักษรและขนาดตัวอักษร หากคุณ.docxมีข้อมูลตัวอักษรจากระบบ Windows ที่ไม่สามารถใช้งานได้บน Unix / Linux ดังนั้นการส่งออกไปยัง.txtOpen / LibreOffice ก็จะไม่ส่งผลให้มีเลย์เอาต์เดียวกันแม้ว่ามันจะพยายามทำงานได้ดีก็ตาม

ดังนั้นdocx2txtหรือยูทิลิตี commandline อื่น ๆ รวมถึงการประมวลผลคำสั่งที่ขับเคลื่อนด้วย Open / LibreOffice จะไม่รับประกันว่าจะแปลงข้อความเป็นเลย์เอาต์เดียวกันกับการส่งออกจาก Word ²

หากคุณต้องการ (หรือถูกบังคับตามความต้องการของลูกค้า) ในการแสดงผลแบบเดียวกับที่มีอยู่ในประสบการณ์ของฉันมีเพียงทางเดียวเท่านั้น: ให้ Word ทำการเรนเดอร์ เมื่อประสบกับปัญหาที่คล้ายกันกับของคุณ³และผลลัพธ์ที่เข้ากันไม่ได้โดยใช้เครื่องมืออื่นรวมถึง OpenOffice ฉันกลับไปติดตั้ง Windows VM บนเซิร์ฟเวอร์ Linux โฮสต์ บนไคลเอนต์ VM โปรแกรมจะตรวจสอบไฟล์ขาเข้าที่จะทำการแปลงบนโฮสต์ซึ่งจะเริ่มต้นและขับเคลื่อน Word เพื่อทำการแปลงแล้วคัดลอกผลลัพธ์กลับมา⁴

การตัดสินใจเกี่ยวกับการใช้ CR / LF หรือ LF เท่านั้นหรือ UTF-8 หรือการเข้ารหัสอื่น ๆ สำหรับ.txtส่วนใหญ่ขึ้นอยู่กับวิธีการใช้ไฟล์ผลลัพธ์ หากไฟล์ผลลัพธ์ถูกใช้บน Windows ฉันจะใช้ CR / LF, UTF-8 และUTF-8 BOMแน่นอน โปรแกรมที่ทันสมัยบน Linux สามารถอนุมานได้ว่าไฟล์นั้นเป็น UTF-8 แต่จะไม่เป็นปัญหากับ BOM และ / หรือใช้ข้อมูลนั้น คุณควรทดสอบการใช้งานเป้าหมายทั้งหมดของคุณเพื่อความเข้ากันได้หากแอปพลิเคชันเหล่านั้นทราบล่วงหน้า

¹ความไม่ลงรอยกันแบบนี้เป็นเหตุผลหลักที่เพื่อนของฉันบางคนไม่สามารถเปลี่ยนเป็น Linux จาก Windows ได้แม้ว่าพวกเขาจะต้องการ พวกเขาต้องใช้ MicroSoft Word เป็น Open / LibreOffice ทุกครั้งในขณะที่ข้อความ mangles พวกเขาแลกเปลี่ยนกับลูกค้า
² คุณสามารถติดตั้งแบบอักษรทั้งหมดที่ใช้ในไฟล์ Word และอาจโชคดีสำหรับบางตำราบางเวลา
³ แสดงผลไฟล์ PDF จาก.doc/.docx
โปรแกรมที่ใช้ GUI ระบบอัตโนมัติเช่นถ้ามีคนคลิกเมนู-และไม่พยายามที่จะขับรถของ Word ผ่าน API ฉันค่อนข้างมั่นใจว่าหลังสามารถทำได้เช่นกันและจะได้ประโยชน์จากการไม่ทำลายสิ่งต่าง ๆ หาก Word จะได้รับการอัพเกรด


ขอบคุณนี่ลึกซึ้งจริงๆ! ฉันไม่คุ้นเคยกับรูปแบบ แต่ฉันเรียกใช้สคริปต์จากvimและฉันเห็นว่ามันเกี่ยวกับ xml แน่นอน - ฉันควรตรวจสอบเพิ่มเติม ไม่เคยคิดเกี่ยวกับฟอนต์หรืออาจใส่ยัติภังค์ ในระหว่างการดำเนินการบางอย่างฉันได้รับข้อความจากตัวแก้ไขข้อความที่บ่นเกี่ยวกับ BOM ดังนั้นฉันจะอ่านลิงก์ (เนื่องจากฉันไม่รู้ว่ามันคืออะไร) ฉันรู้สึกประหลาดใจกับโซลูชัน VM ของคุณ! ฉันค่อนข้างคุ้นเคยกับระบบอัตโนมัติของ GUI - ฉันเห็นว่ามันเคยใช้เพื่อสร้างเวิร์กสเตชันหลังจากที่มีการจำลองอิมเมจพื้นฐาน ไม่ได้คิดเกี่ยวกับสิ่งนี้ ...

ในท้ายที่สุดนั่นหมายความว่าคนจะSohoกับงานดังกล่าวอาจต้อง internalize ค่าใช้จ่ายไม่กี่ใบอนุญาตที่ บางทีวันหนึ่งพวกเขาจะทำเทียร์ด้วย API ต่อการใช้งาน การทำลายเส้นบนตัวแบ่งที่อ่อนนุ่มจะเปลี่ยนแปลงไดนามิกของการใช้เครื่องมือเช่นgrep; หากบรรทัดยาวสิ่งนี้จะลด "ความแม่นยำ" ของเอาต์พุต ฉันเดาว่าข้อ จำกัด แตกต่างกันไปตามลักษณะของเนื้อหาและวิธีการใช้งาน ในทางกลับกันคำถามดังกล่าวจะไม่เกิดขึ้นหากเอกสารไม่ได้อาศัยคุณลักษณะการนับหมายเลขของ Word ที่นี่ การสร้างกรอบเอกสารให้ครอบคลุมวัสดุที่มีอยู่เดิมเป็นธุรกิจที่จริงจัง ไชโย!
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.