有没有办法以编程方式从两个现有文档构建Open Office文档?

时间:2013-12-23 18:07:34

标签: c# merge document openoffice-writer

我有两份文件,一份是西班牙文,一份是英文版(英文版是西班牙文原文的翻译版)。我正在创建第二个文件,其中包括每个均匀编号的页面上的西班牙文,以及相反的奇数页面上的相应英文翻译。

除了在章节结尾处(每个新章节都有一个分页符,所以它可以从页面顶部开始),我在两边都用完了整个页面。不可否认,为了用完整个页面,有时文本的一部分在下一页上 (也就是说,西班牙语第18页底部出现的内容的英文翻译有时会出现在第21页的顶部,而不是出现在第19页的底部)。

我目前正在手动执行以下操作,打开所有三个Open Office文档(Spanish.odt,English.odt和SpanishEnglish.odt):

0) Cut and paste exactly one page of material from Spanish.odt to the next (even-numbered) page of SpanishEnglish.odt
1) Mash the Enter key to move to the next (odd-numbered) page
2) Cut and paste exactly one page of material from English.odt to the next (odd-numbered) page of SpanishEnglish.odt
3) Mash the Enter key to move to the next (even-numbered) page

另外,定期(当到达章节结束时),我插入一个分页符;如果本章的结尾不适合西班牙语或英语的一页(当然另一页是西班牙语英语。),我会减少太长页面的字体大小(从Verdana 10到Verdana) 9)强制它将自己约束到那个页面,以便章节并排开始(西班牙语在左边/偶数,英文在右边/奇数)没有任何空白页面。

正如你无疑可以想象的那样 - 特别是对于一个大文档,这是 - 这个程序很快就变得非常繁琐。有没有办法以编程方式在C#中完成同样的事情?

更新

Shujaat Siddiqui,我认为你的意思是改变这些最后一行:

The Dangerous Pelican Movie
. . .
La película de los pelícanos peligrosos

......对此:

The Dangerous Pelican Movie&&&&
. . .
La película de los pelícanos peligrosos&&&&

...附加“&&&&&”到最后一行 - Correctomundo?但在许多情况下,这个附加文本(“&&&&&”)会将内容推送到下一页(一个或多个&符号会流到下一页),不是吗?

1 个答案:

答案 0 :(得分:2)

它有点棘手。我试图给你一个基本的想法。

  1. 只需在每个页面的末尾写下&&&& 即可。英语文档以及西班牙语文档。
  2. 现在使用正则表达式来破坏&&&&& 中的文字。它就像逐页阅读文档一样。
  3. 以下是一个示例代码,仅为您提供基本逻辑。

                string Doc1Read  = //read from english file
                string Doc2Read = // read from Spanish file
    
    
                    string exp = @"[\w\s\n\r\t\.\(\)\,\[\]\-\;\:\%\@\#]*(?=&&&&)";
    
                    var Doc1matches = Regex.Matches(Doc1Read, exp);
                    var Doc2matches = Regex.Matches(Doc2Read, exp);
                    for (int i = 0; i < Doc1matches.Count; i++)
                    {
                        **// open third document file and write** 
    
                        Doc1matches[i].Value; // write english version of page i
                        Doc2matches[i].Value; // write spanish version of page i
    
                    }
    

    &amp;&amp;&amp;&amp; 用于逐页获取文本。通过这种方式,当您使用Doc1matches[i].Value;时,您基本上可以获得在页码 i 上写的内容,即{1,2,3 ...}。

    希望它对你有所帮助。

    PS:您还可以使用string.Split("&&&&");来破坏&amp;&amp;&amp;&amp; 中的字符串。并且可以实现逻辑。