2016-03-24 2 views
0

Я новичок в использовании NPOI XWPF и пытаюсь создать свой первый документ, пока все идет хорошо. Единственная проблема, с которой я столкнулся, заключается в том, чтобы поместить текст на ту же строку, что и левая, и правая, чтобы она выглядела так:NPOI XWPF как я могу разместить текст на одной строке, которая левая и правая?

Район: 1 (левый Jstfd) Уровень оценки: курс 10-го чтения правый Jstfd)

Ниже приведен фрагмент кода, я использую, это просто толкая весь текст вместе на левой стороне страницы ... бла

  XWPFParagraph p2 = doc.CreateParagraph(); 
      p2.Alignment = ParagraphAlignment.LEFT; 
      XWPFRun r3 = p2.CreateRun(); 
      r3.SetBold(true); 
      r3.FontFamily = "Times New Roman"; 
      r3.FontSize = 12; 
      r3.SetText("Area: " + ah.schoolArea); 
      XWPFRun r4 = p2.CreateRun(); 
      r4.SetBold(true); 
      r4.FontFamily = "Times New Roman"; 
      r4.FontSize = 12; 
      r4.SetText("Grade Level/Course: " + ah.filterParm); 

ответ

0

Прежде чем пытаться выполнить поставленную задачу (N) POI, всегда хорошо понять, как выполнена эта задача в самом Microsoft Word. Вы не можете просто разделить пункт на полпути линии, что вы делаете это

  1. Добавить табулятор в конце линии
  2. установить его на выравнивание по правому краю.
  3. Введите текст слева, нажмите вкладку, введите текст справа

К сожалению, это не похоже XWPFParagraph предоставляет функциональные возможности TabStop в этой точке. Однако XWPFParagraph является оболочкой класса CT_P, которая отображает 1: 1 в базовый формат Office XML. Используя отражение, мы можем получить доступ к этому частному полю и использовать его для непосредственного добавления tabstop.

Пример кода:

var paragraph = document.CreateParagraph(); 

var memberInfo = typeof(XWPFParagraph).GetField("paragraph", BindingFlags.NonPublic | BindingFlags.Instance); 
if (memberInfo == null) 
{ 
    throw new Exception("Could not retrieve CT_P from XWPFParagraph"); 
} 

var internalParagraph = (CT_P) memberInfo.GetValue(paragraph); 

CT_PPr pPr = internalParagraph.AddNewPPr(); 
CT_Tabs tabs = pPr.AddNewTabs(); 
CT_TabStop tab = tabs.AddNewTab(); 
tab.pos = "9000"; 
tab.val = ST_TabJc.right; 

var run = paragraph.CreateRun(); 
run.SetText("Left aligned"); 
run.AddTab(); 

run = paragraph.CreateRun(); 
run.SetText("Right aligned"); 

Результат:

Word document with tab stop and left/right aligned text