Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在为段落添加书签时遇到一些奇怪的问题_Java_Xml Parsing_Docx4j - Fatal编程技术网

Java 在为段落添加书签时遇到一些奇怪的问题

Java 在为段落添加书签时遇到一些奇怪的问题,java,xml-parsing,docx4j,Java,Xml Parsing,Docx4j,…2016年5月6日下午3:56:28 com.sun.xml.internal.bind.v2.util.XmlFactory createTransformerFactory严重错误:null java.lang.AbstractMethodError:javax.xml.transform.TransformerFactory.setFeature(Ljava/lang/String;Z)V这是我在另一个docx中遇到的错误。似乎您有一个没有内容的JaxbXmlPart?打开org.doc

…2016年5月6日下午3:56:28 com.sun.xml.internal.bind.v2.util.XmlFactory createTransformerFactory严重错误:null java.lang.AbstractMethodError:javax.xml.transform.TransformerFactory.setFeature(Ljava/lang/String;Z)V这是我在另一个docx中遇到的错误。似乎您有一个没有内容的JaxbXmlPart?打开org.docx4j.openpackaging.io.SaveToZipFile的调试级日志,以确定您应该为TransformerFactory.setFeature问题创建另一个问题。谢谢。我发现了问题所在,实际上是在docx中(包含图像)。有没有办法将书签添加到包含图像的docx中。是的,在包含图像的docx中添加书签没有问题。我不明白你上面的代码为什么不起作用(即在图像周围放一个书签)。但是,您始终可以在Word中创建一个示例,然后通过docx4j webapp或Word Helper插件生成代码
public class BookmarkAdd  extends AbstractSample {

public static JAXBContext context = org.docx4j.jaxb.Context.jc; 

/**
 * @param args
 */
@SuppressWarnings("deprecation")
public static void main(String[] args) throws Exception {

    String inputfilepath = "Chapter_3.docx";

File file = new java.io.File(inputfilepath);



WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath));
MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();

    String outputfilepath = System.getProperty("user.dir")+"/ 1.docx";  

    ClassFinder finder = new ClassFinder(P.class); // <----- change this to suit
    new TraversalUtil(documentPart.getContent(), finder);
    int Counter = 0;
    System.out.println(finder.results.size());
    for (Object o : finder.results) 
    {
        P para =(P)o;
        String name = "para" + Counter;

            bookmarkPara(para, 0, para.getParagraphContent().size(), name, Counter);
            Counter++;


    SaveToZipFile saver = new SaveToZipFile(wordMLPackage);
    saver.save(outputfilepath);
  //         wordMLPackage.save(new java.io.File(inputfilepath));

    }
    }




/**
 * Surround the specified r in the specified p
 * with a bookmark (with specified name and id)
 * @param p
 * @param r
 * @param name
 * @param id
 */

public static void bookmarkPara(P p, int StartIndex,int EndIndex, String name, int id) {

    ObjectFactory factory = Context.getWmlObjectFactory();
    BigInteger ID = BigInteger.valueOf(id);


        // Add bookmark end first
        CTMarkupRange mr = factory.createCTMarkupRange();
        mr.setId(ID);
        JAXBElement<CTMarkupRange> bmEnd = factory.createBodyBookmarkEnd(mr);
        p.getParagraphContent().add(EndIndex, bmEnd); // from 2.7.0, use getContent()

        // Next, bookmark start
        CTBookmark bm = factory.createCTBookmark();
        bm.setId(ID);
        bm.setName(name);
        JAXBElement<CTBookmark> bmStart =  factory.createBodyBookmarkStart(bm);
        p.getParagraphContent().add(StartIndex, bmStart);



}

public static List<Object> getAllElementFromObject(Object obj, Class<?> toSearch) {
    List<Object> result = new ArrayList<Object>();
    if (obj instanceof JAXBElement)
        obj = ((JAXBElement<?>) obj).getValue();

    if (obj.getClass().equals(toSearch))
        result.add(obj);
    else if (obj instanceof ContentAccessor) {
        List<?> children = ((ContentAccessor) obj).getContent();
        for (Object child : children) {
            result.addAll(getAllElementFromObject(child, toSearch));
        }
    }
    return result;
}

}
 java.lang.IllegalArgumentException: obj parameter must not be null
at javax.xml.bind.helpers.AbstractMarshallerImpl.checkNotNull(Unknown Source)
at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(Unknown Source)
at org.docx4j.openpackaging.parts.JaxbXmlPart.marshal(JaxbXmlPart.java:361)
at org.docx4j.openpackaging.parts.JaxbXmlPart.marshal(JaxbXmlPart.java:330)
at org.docx4j.openpackaging.io.SaveToZipFile.saveRawXmlPart(SaveToZipFile.java:249)
at org.docx4j.openpackaging.io.SaveToZipFile.saveRawXmlPart(SaveToZipFile.java:198)
at org.docx4j.openpackaging.io.SaveToZipFile.savePart(SaveToZipFile.java:424)
at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:387)
at org.docx4j.openpackaging.io.SaveToZipFile.savePart(SaveToZipFile.java:442)
at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:387)
at org.docx4j.openpackaging.io.SaveToZipFile.save(SaveToZipFile.java:168)
at org.docx4j.openpackaging.io.SaveToZipFile.save(SaveToZipFile.java:97)
at Backup.BookmarkAdd.main(BookmarkAdd.java:64)