Kaynak belgeye satır numarası referanslarını korumak için .docx dosyalarını düz metne dönüştürme ve satır sonlarını koruma: nasıl yapılır?


9

MS Word içeriğini metin ve dosya yardımcı programlarıyla kullanmak için düz metne aktarıyorum. Ben bir sınırlama var hat numaralandırma özelliği MS yazılımında etkinleştirilmiş olması ve son çıktıda çizgi numaralarına herhangi bir referans gerekir o numaralandırmaya maç. Bu yüzden "numaralandırma satırları" girin:

resim açıklamasını buraya girin ( Poe, EA )

Açıkçası, Word için , bu tür numaralandırma yeni satırdaki satırları kesmez , doğru kenar boşluğundan (veya bir şeyden) sonra "satırları" kırar . Gibi bir komut dosyası docx2txtvarsayılan olarak bunu hesaba katmaz ve yeni satırdaki satırları keser. grep -nNumaralandırma ile kullanırsam , satırlar yukarıda gösterildiği gibi kaynak satır numaraları özelliğiyle eşleşmez. Belgeleri nasıl bu durumda ihtiyacım şekilde dönüştürmek için Perl betiğini düzenlemek gerekir tam olarak açık değildir:

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

Ben yerine çalıştı \niçin \r\nama bu benim için işe görünmüyor. Bu nedenle , aşağıdaki ayarlarla belgeleri doğrudan Word'den dışa aktarmaya başvurdum ( v.2013,64pc'de düz metin olarak kaydet):

  • Unicode (UTF-8)
  • (CR / LF) ile satır sonları + bitiş satırları ekleme
  • Karakter değiştirmeye izin ver

Ve şimdi gerçekten ne zaman kullanmak.txt dosyaları kaynak numaralandırma özelliği ve satır numaraları arasındaki mükemmel bir uyum vardır grep -nçıkışı.


  • Bilmem gereken belirli bir yapılandırma / işlem docx2txtveya benim gibi Word'e başvurmadan satır sonlarını korurken .docx dosyalarımı düz metne dönüştürmeme izin veren benzer bir komut satırı yardımcı programı var mı?
  • MS Word belgelerini (aksanlı karakterler içerebilen), satır kesmeleri ve biçimlendirmeyle ilgili olarak dosya / metin yardımcı programlarıyla kullanım için düz metne vermek için varsa en iyi uygulamalar nelerdir ; ve dışarı aktarmak için seçtiğim ayarlarla herhangi bir olumsuz etkisi var mı, yani CR / LF eklemek mi?

Örneklem

Önerildiği gibi bir örnek sağlarım. Bu rar arşivinde , basit paragraflarla bir .docx dosyasını ve yukarıda belirtilen seçeneklerle Word'ü kullanarak dışa aktarılan .txt dosyasını paketledim . İkincisi docx2txt, kaynak dosyadaki varsayılan çalıştırması ile karşılaştırılabilir .


Bize örnek dosya verebilir misiniz?
cuonglm

Word'den bir txt dosyası olarak kaydedemiyor musunuz? Size kötü biçimlendirme verirse, sorunu düzeltmek için vim veya emacs kullanmanızı öneririm (çünkü desenli olduğundan eminim).
Steven Walton

1
@Steven Walton Teşekkür ederim, evet Word'den txt'ye aktardığımda çalışır. Ama benim açımdan Word'ü kullanmak istemiyorum. Keşke bunu yapmak için sadece senaryoya güvenebilseydim. Toplu işlem için bir işlem istiyorum.

@Gnouc Örnek verilmiştir. Teşekkür ederim!

Yanıtlar:


8

docx2txtdocxsıkıştırılmış bir XML dosyaları kümesi olan dosyadaki bilgiler üzerinde çalışır .

Satır kaydırmayla ilgili olarak, .docxXML verileri yalnızca yumuşak paragraflar hakkında değil, paragraflar ve kesintiler hakkında bilgiler içerir. Yumuşak sonlar, metni belirli bir fontta, font boyutunda ve sayfa genişliğinde oluşturmanın bir sonucudur. docx2txtnormalde yalnızca yazı tipi ve yazı tipi boyutuna bakılmaksızın 80 sütuna (80 sütun yapılandırılabilir) metin sığdırmaya çalışır. Eğer senin .docxUnix / Linux üzerinde mevcut değildir, bir Windows sisteminden yazı bilgileri içerir, daha sonra ihracat yapıyoruz .txtolur da aynı düzende olası sonuç, her ne kadar iyi bir job¹ yapmaya çalışır Aç / LibreOffice yoluyla.

Yani docx2txtya Aç / LibreOffice işleme tahrik komut dahil başka komut yarar, olacak değil Kelime does² dışa olarak dönüştürdüğümüz aynı düzene metni garantili.

Tam olarak Word'de olduğu gibi işlemek istiyorsanız (veya istemci gereksinimleri tarafından zorlanırsanız), deneyimlerime göre tek bir yol var: Word'ün işleme yapmasına izin verin. Sizinkiyle benzer bir sorunla karşı karşıya kaldığınızda ve OpenOffice de dahil olmak üzere diğer araçları kullanarak uyumsuz sonuçlar aldığımda, ana Linux sunucusuna bir Windows VM yüklemeye geri döndüm. İstemci VM'sinde bir program, ana bilgisayarda dönüştürülecek gelen dosyaları gözlemler; bu da Word'ü başlatıp dönüştürme işlemini yürütür ve ardından sonucu kopyalar⁴.

Yalnızca CR / LF veya LF veya UTF-8 veya başka bir kodlama kullanma kararları .txtbüyük ölçüde elde edilen dosyaların nasıl kullanıldığına bağlıdır. Ortaya çıkan dosyalar Windows'ta kullanılırsa kesinlikle CR / LF, UTF-8 ve UTF-8 BOM ile giderdim . Linux'taki modern programlar bir dosyanın UTF-8 olduğunu belirleyebilir, ancak Malzeme Listesinde engel oluşturmaz ve / veya bu bilgileri kullanmaz. Önceden biliniyorsa, tüm hedef uygulamalarınızı uyumluluk açısından test etmelisiniz.

¹ Bu tür uyumsuzluklar, bazı arkadaşlarımın istemelerine rağmen Windows'tan Linux'a geçememelerinin başlıca nedenidir. MicroSoft Word'ü, Open / LibreOffice olarak, arada bir müşterileriyle paylaştıkları metinleri yönetmeleri gerekir.
² Word dosyalarında kullanılan tüm yazı tiplerini yükleyebilirsiniz ve bazen bazı metinler için şanslı olabilirsiniz.
³ PDF'ler oluşturma.doc/.docx
programa birisi onun tıklayarak eğer GUI olarak otomasyon-kullanır menüleri-ve bir API aracılığıyla Word'ü götürmek denemez. Eminim ikincisi de yapılabilir ve Word yükseltilirse bir şey kırmak değil avantajı olurdu


Teşekkür ederim, bu gerçekten anlayışlı! Biçime aşina değildim ama betiği aradım ve vimgerçekten xml ile ilgili olduğunu görebiliyordum - daha fazla bakmalıyım. Yazı tiplerini veya belki de tireleme hakkında düşünmemişti. Ayrıca bazı işlem sırasında BOM hakkında şikayet bir metin editörü bir mesaj vardı, bu yüzden (Ben ne olduğunu hiçbir ipucu yoktu gibi) bağlantıyı okuyacak. VM çözümünüz beni şaşırttı! GUI otomasyonuna biraz aşinayım - bir temel görüntü çoğaltıldıktan sonra bir iş istasyonu oluşturmak için kullanıldığını gördüm; bunu düşünmedim ...

Sonunda, bu tür görevlerle uğraşan birinin birkaç lisansın maliyetini içselleştirmesi gerekebilir. Belki bir gün kullanım başına API ile bir katman yaparlar. Yumuşak molalarda çizgi kırmak, aşağıdaki gibi bir araç kullanma dinamiklerini tamamen değiştirir grep; eğer çizgiler uzunsa, bu çıkıştaki "hassasiyeti" azaltır. Sanırım kısıtlamalar içeriğin doğasına ve nasıl kullanıldığına bağlı olarak değişir. Öte yandan, belgeler burada Word numaralandırma özelliğine dayanmasaydı böyle sorular olmazdı. Eski materyali kapsayacak bir belge çerçevesi oluşturmak ciddi bir iştir. Şerefe!
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.