小编And*_*rea的帖子

使用页码指示为XWPFDocument创建目录

我实际上是使用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)

java apache-poi

4
推荐指数
1
解决办法
5021
查看次数

我无法统一扩展我的画布

我无法统一扩展我的画布.我通常这样做,它是这样的: 在此输入图像描述

我无法扩展它或任何东西.

unity-game-engine

4
推荐指数
1
解决办法
3592
查看次数

删除XWPFParagraph会保留段落符号()

我试图从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)

但没有运气.

java apache-poi xwpf

3
推荐指数
1
解决办法
3058
查看次数

isalpha()函数为string中的字符返回false

我试图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,

有人可以向我解释为什么以及如何解决问题以检查给定字符是否是字母

c++ string debugging

2
推荐指数
2
解决办法
1万
查看次数

使用XStream跳过与List相关的标记

我正在尝试使用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)

java xstream

2
推荐指数
1
解决办法
1305
查看次数

什么导致关于字符串的错误?

#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)

我的控制台输入/输出如下所示:

你叫什么名字 ?
约翰托特
你好约翰! …

c++ string

1
推荐指数
1
解决办法
84
查看次数

如何在Java中更改清单文件

我如何更改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)

在此处输入图片说明

希望您能理解,谢谢:-)

java jar

0
推荐指数
1
解决办法
534
查看次数

如何将小数位数舍入为5,将零位置保留在第五位

显示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帮助我知道如何添加偶数为零输出

java

0
推荐指数
1
解决办法
50
查看次数

如果满足if语句,如何添加3(Unity3d)

我正在尝试制作一个if语句,每次满足if语句时都会向迭代器添加3.我知道如何添加1使用coins++但是有一种方法可以添加3.

if (other.tag == "yes") 
{
  coins + 3;
}               
Run Code Online (Sandbox Code Playgroud)

if-statement unity-game-engine

-2
推荐指数
1
解决办法
51
查看次数

为什么 Java Date 类的 getYear() 返回错误值?

我正在开发一个 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)

如您所见,这两个日期的年份是20152016,getYear()方法返回给我115116

为什么?这怎么可能?我该如何解决这个问题?

java date

-3
推荐指数
1
解决办法
2220
查看次数

当子字符串位于开头时,std :: string :: find无法按预期工作

由于某种原因,当我正在搜索的子字符串位于字符串的开头时,会返回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)

这种行为的原因是什么?

c++ string stl

-4
推荐指数
1
解决办法
925
查看次数

标签 统计

java ×6

c++ ×3

string ×3

apache-poi ×2

unity-game-engine ×2

date ×1

debugging ×1

if-statement ×1

jar ×1

stl ×1

xstream ×1

xwpf ×1