Есть ли способ программно построить документ Open Office из двух существующих документов?
У меня есть два документа, один на испанском и один на английском (английский - переводная версия оригинала на испанском). Я создаю третий документ из двух, который включает испанский на каждой странице с четным номером и соответствующий перевод на английский на противоположной странице с нечетным номером.
Я использую всю страницу с обеих сторон, за исключением конца главы (каждая новая глава получает разрыв страницы, поэтому она может начинаться в верхней части страницы). По общему признанию, чтобы использовать всю страницу, есть случаи, когда части текста находятся на следующей странице (то есть, английский перевод того, что появляется внизу страницы 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
Кроме того, периодически (когда достигается конец главы), я вставляю разрыв страницы; если конец главы не помещается на одной странице для испанского или английского языка (в то время как для другого - разумеется) в SpanishEnglish.odt, я уменьшаю размер шрифта слишком длинной страницы (с 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 ответ
Это немного сложно. Я пытаюсь дать вам только основную идею.
- Просто напишите &&&& в конце каждой страницы. На английском и русском языках.
- Теперь используйте регулярное выражение, чтобы отделить текст от &&&&. Это как читать документ постранично.
Вот пример кода, чтобы дать вам основную логику.
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
}
&&&& используется для получения текста постранично. Таким образом, когда вы используете Doc1matches[i].Value;
Вы в основном получаете то, что написано на странице номер я, т.е. {1,2,3...}.
Надеюсь, это помогло вам.
PS: Вы также можете использовать string.Split("&&&&");
разорвать строку из &&&&. и может реализовать логику.