我实际上是使用Apache POI生成Word文档,我需要自动创建一个引用段落的目录(TOC)及其页面指示.
这是我正在使用的代码(我省略了前置条件和内部方法的主体):
XWPFDocument doc = new XWPFDocument(OPCPackage.openOrCreate(new File(document)));
String strStyleId = "Index Style";
addCustomHeadingStyle(doc, strStyleId, 1);
XWPFParagraph documentControlHeading = doc.createParagraph();
changeText(documentControlHeading, "First try");
documentControlHeading.setAlignment(ParagraphAlignment.LEFT);
documentControlHeading.setPageBreak(true);
documentControlHeading.setStyle(strStyleId);
XWPFParagraph documentControlHeading1 = doc.createParagraph();
changeText(documentControlHeading1, "Second try");
documentControlHeading1.setAlignment(ParagraphAlignment.LEFT);
documentControlHeading1.setPageBreak(true);
documentControlHeading1.setStyle(strStyleId);
doc.createTOC();
Run Code Online (Sandbox Code Playgroud)
当我打开生成的文档时,我得到了这个结果(见蓝色方块):
在左侧部分,我可以看到生成的TOC.到现在为止还挺好.然而,在文档的正文中,我只能看到一个静态文本"目录",根本没有任何指示(既没有段落也没有页面).我甚至无法与它互动.
如果我点击菜单条目"目录"(左上角的红色方块),则会生成我想要的"真实"内容表(当然,请按照箭头...).
我的问题是: 如何从代码中获得第二个结果(红色TOC)?
非常感谢.
附注:我甚至试图把doc.enforceUpdateFields();之后doc.createTOC();,但TOC的每一个引用消失,这种方式.
@Sucy,我添加了你要求的方法.但不知道你是否能发现它们有用:
/*
* Adds a custom style with the given indentation level at the given document.
*/
private static void addCustomHeadingStyle(XWPFDocument docxDocument, String strStyleId, int headingLevel) {
CTStyle ctStyle = …Run Code Online (Sandbox Code Playgroud) 我试图从Microsoft Word文档中删除一组连续的段落,使用Apache POI.
根据我的理解,删除一个段落是可能的,通过删除它的所有运行,这样:
/*
* Deletes the given paragraph.
*/
public static void deleteParagraph(XWPFParagraph p) {
if (p != null) {
List<XWPFRun> runs = p.getRuns();
//Delete all the runs
for (int i = runs.size() - 1; i >= 0; i--) {
p.removeRun(i);
}
p.setPageBreak(false); //Remove the eventual page break
}
}
Run Code Online (Sandbox Code Playgroud)
事实上,它有效,但有一些奇怪的东西.删除的段落块不会从文档中消失,但会在一组空行中转换.这就像每个段落都会被转换成新的一行.
通过从代码中打印段落的内容,我实际上可以看到一个空格(每个空格被移除).直接从文档中查看内容,启用格式标记的可视化,我可以看到:
的垂直列对应于已删除元素的块.
你对此有所了解吗?我希望我的段落完全删除.
我还尝试通过替换文本(with setText())并删除可以自动添加的最终空格,这样:
p.setSpacingAfter(0);
p.setSpacingAfterLines(0);
p.setSpacingBefore(0);
p.setSpacingBeforeLines(0);
p.setIndentFromLeft(0);
p.setIndentFromRight(0);
p.setIndentationFirstLine(0);
p.setIndentationLeft(0);
p.setIndentationRight(0);
Run Code Online (Sandbox Code Playgroud)
但没有运气.
我试图foo通过使用预定义的函数检查字符串中的每个字符来计算字符串中的字母数isalpha()
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{
string foo = "aaaaaaa1";
int count=0;
for (int i=0;i<foo.length();i++)
{
if ( isalpha(foo[i]) == true)
{
count++;
}
}
cout<<count;
system("PAUSE");
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
7
当前输出:
0
错误是function isalpha is not returning true for alphabetic,
有人可以向我解释为什么以及如何解决问题以检查给定字符是否是字母
我正在尝试使用XStream将类实例转换为XML.一切都很好,除了一件事,我希望有人能帮助我解决.
作为一个前提,我有许多"嵌套"类(按顺序,OrderStatusImport- > OrderCollection- > Order- > OrderLine),但焦点由类表示Order; 如上所述,它的每个实例都包含一个OrderLine对象列表.就像这样:
public class Order {
//attribute's declarations...
ArrayList<OrderLine> orderLines;
}
Run Code Online (Sandbox Code Playgroud)
这是我的格式化程序类,我在其中调用主XStream逻辑:
private String createImportXml(OrderStatusImport orderStatusImport) {
Object xstream = null;
if (xstream == null) {
xstream = new XStream() {
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new UpperCaseMapper(next);
}
};
}
((XStream) xstream).alias("OrderStatusImport", OrderStatusImport.class);
((XStream) xstream).alias("OrderCollection", OrderCollection.class);
((XStream) xstream).alias("Order", Order.class);
((XStream) xstream).alias("OrderLine", OrderLine.class);
((XStream) xstream).omitField(Order.class, "OrderLines");
String decl = "\n";
String header …Run Code Online (Sandbox Code Playgroud) #include <iostream>
#include <string>
int main(void)
{
using std::cout;
using std::cin;
using std::string;
string name;
int n1, n2;
cout << "What is your name ?\n";
cin >> name;
cout << "Hello " << name.c_str() <<"!\n"
<< "Please give me two number separated by space\n";
cin >> n1 >> n2;
cout << "Sum of " << n1 << " + " << n2 << " is " << n1 + n2 << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的控制台输入/输出如下所示:
你叫什么名字 ?
约翰托特
你好约翰! …
我如何更改mainfest文件中的类路径。
我在文件夹中有外部jar文件:
Class-Path: folder/AbsoluteLayout.jar
Run Code Online (Sandbox Code Playgroud)
我想将我的外部jar文件添加到我的JAR MyProject.jar并更改mainfast ..我应该在mainfestu中编写什么内容以将库链接到我的jar中。
Class-Path: path to my externalJar in MyProject.jar
Run Code Online (Sandbox Code Playgroud)

希望您能理解,谢谢:-)
显示0.45550我将它舍入为
double dis=0.455504673;
double roundoff=Math.round(dis*100000.0)/100000.0;
System.out.println(roundoff);
Run Code Online (Sandbox Code Playgroud)
我的输出是0.4555,但我需要它作为0.45550 PLZ帮助我知道如何添加偶数为零输出
我正在尝试制作一个if语句,每次满足if语句时都会向迭代器添加3.我知道如何添加1使用coins++但是有一种方法可以添加3.
if (other.tag == "yes")
{
coins + 3;
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个 Java 应用程序,但在尝试从Date对象获取年份值时遇到了一些问题。
所以基本上我有以下情况:
基本上进入我的代码我有:
Date datePrimoVersamento = sdf.parse(mappaQuote.get(1).getDatariferimentoprezzo());
Date dateMovimentoFinale = sdf.parse(mappaQuote.get(0).getDatariferimentoprezzo());
System.out.println("datePrimoVersamento: " + datePrimoVersamento + " year: " + datePrimoVersamento.getYear());
System.out.println("dateMovimentoFinale: " + " year: " + dateMovimentoFinale.getYear());
Run Code Online (Sandbox Code Playgroud)
输出是:
datePrimoVersamento: Fri Nov 27 00:00:00 CET 2015 year: 115
dateMovimentoFinale: Mon Oct 31 00:00:00 CET 2016 year: 116
Run Code Online (Sandbox Code Playgroud)
如您所见,这两个日期的年份是2015和2016,但getYear()方法返回给我115和116。
为什么?这怎么可能?我该如何解决这个问题?
由于某种原因,当我正在搜索的子字符串位于字符串的开头时,会返回std :: string:npos.
const char delim[] = {'H', 'E', 'L', 'L'};
std::string::size_type pos = 0;
std::string bigString = "HELLO";
while(pos != std::string::npos)
{
pos = bigString.find(delim, pos);
...
}
Run Code Online (Sandbox Code Playgroud)
指定的pos应该是包含的,但是如果不是0,则函数返回npos.但是,如果我指定搜索字符串的大小,它确实有效.
pos = bigString.find(delim, pos, 4);
Run Code Online (Sandbox Code Playgroud)
这种行为的原因是什么?