Работа с хипениране

Понякога е необходимо да се използва тирета за по-компактно подреждане на текста в документ. В същото време е важно да се разбере, че спецификите на думата тиреиране могат да се различават за всеки език.

В момента хифенацията не се използва толкова често, колкото преди, особено в английските текстове. Въпреки това, използването на тази функция може да има сериозно въздействие върху потребителските документи готварство засяга оформлението и като резултат, появата на изходните файлове, например в PDF формат.

За правилното разделяне на думите се използват специфични за езика речници за тирета. Aspose.Words използва напреднали алгоритми, за да работи с такива речници и ви позволява да получите същата тиретация като в Microsoft Word.

Речници за тиреиране

Тъй като различните езици използват различни норми и правила за думата тиреиране, оптималното решение за правилното тиреиране е да се използват специални речници. Aspose.Words използва речници на OpenOffice.

За проверка на правописа OpenOffice използва Hunspell библиотека, което е обобщение на алгоритъма за тиреиране на TeX. Този алгоритъм позволява автоматична нестандартна тиретация, използвайки конкурентни стандартни и потребителски модели за тиреиране. Hunspell използва Хифен за тирета.

Хифенация Алгоритъм

Aspose.Words Приложения Алгоритъм за тирейран TeX и могат да използват отново речниците OpenOffice.

Следните характеристики на Aspose.Words алгоритмите следва да се вземат предвид:

  • Параметри на разстоянието на хипениране (LEFTHYPHENMIN, RAVEHYPHENMIN, COMПиглефифенмин, COMPOUDRIGHTHYPHENMIN) се игнорират. Aspose.Words използва собствен набор от параметри за разстояние в зависимост от режима на съвместимост на документите.
  • Алгоритъмът за тиреиране в Aspose.Words Поддръжка композитна тиретация. Обаче, Aspose.Words разделя характер последователности, съдържащи смесени азбучни и не-алфабетични знаци в части само на азбучен ред (думи) и ги тиреира отделно. Имайте предвид, че Microsoft Word логиката на тиреиране на сложни думи зависи от режима на съвместимост на документите.
  • Алгоритъмът за тиреиране в Aspose.Words не прилага нестандартна тиретация. Нестандартните модели се игнорират.

Зареждане на дневници за тирета

За да използвате функцията за тиреиране, първо регистрирате речник за тиреиране. Следният пример с код показва как да се заредят речници с тирета за посочените езици от файл:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "in.docx");
Hyphenation.registerDictionary("en-US", dataDir + "hyph_en_US.dic");
Hyphenation.registerDictionary("de-CH", dataDir + "hyph_de_CH.dic");
doc.save(dataDir + "LoadHyphenationDictionaryFromFile_Out.pdf");

Следният пример за код показва как да се зареждат речници за тирета за посочения език от поток:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "in.docx");
InputStream stream = new FileInputStream(dataDir + "hyph_de_CH.dic");
Hyphenation.registerDictionary("de-CH", stream);
doc.save(dataDir + "LoadHyphenationDictionaryFromStream_Out.pdf");

Като алтернатива на предварително записаните речници за тирета, е възможно да се регистрират само изискваните речници за тиретата чрез заявка. За да се постигне това, прилагане на IHyphenationCallback интерфейс и използване на статично обаждане Callback.

Следният пример с код показва как да приложите IHyphenationCallback интерфейс:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
public static void hyphenationCallback() {
try {
// Register hyphenation callback.
Hyphenation.setCallback(new CustomHyphenationCallback());
Document document = new Document(dataDir + "in.docx");
document.save(dataDir + "LoadHyphenationDictionaryFromStream_Out.pdf");
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
Hyphenation.setCallback(null);
}
}
static class CustomHyphenationCallback implements IHyphenationCallback {
public void requestDictionary(String language) throws Exception {
String dictionaryFolder = dataDir;
String dictionaryFullFileName;
switch (language) {
case "en-US":
dictionaryFullFileName = new File(dictionaryFolder, "hyph_en_US.dic").getPath();
break;
case "de-CH":
dictionaryFullFileName = new File(dictionaryFolder, "hyph_de_CH.dic").getPath();
break;
default:
throw new Exception("Missing hyphenation dictionary for " + language);
}
// Register dictionary for requested language.
Hyphenation.registerDictionary(language, dictionaryFullFileName);
}
}

Въздействие на хипнозата върху подреждането

Когато разбивате текст на редове, Aspose.Words проверява всяка дума дали тя се вписва изцяло в текущата линия. Ако друга дума е твърде дълго, за да се побере в края на линията, по подразбиране Aspose.Words премества го към началото на следващата линия, вместо да го хипнотизира.

Въпреки това, функцията за тиреиране може да се използва в Aspose.Words да се вмъкнат тирета в думи, за да се премахнат пропуските в обоснования текст или да се поддържа еднаква дължина в тесни колони. Това очевидно може да засегне броя на редовете и следователно броя на страниците. С други думи, използването на функцията за тиреиране засяга оформлението на документа.

Хифениране и обосновка (H&J)

Microsoft Word има сложна логика за избор на точка на прекъсване, ако текстът е оправдан и се активира тиреиране. Накратко, Microsoft Word може да предпочитат да свиват или разтягат пространства, за да се избегне линия тиреиране. Най-вероятно тази логика се основава на Статията на Кнут.

Aspose.Words прилага собствен H&J алгоритъм, който дава същия резултат като Microsoft Word и осигурява идентични прекъсвания в изходния документ.

Вижте също