【背景】
docbook生成的pdf,默认都有前两页的那个titlepage:
想要去掉。
【解决过程】
1.找了半天,貌似官网的这部分:
的介绍,是相关的内容。
2.找到对应的
docbook-xsl-ns-1.77.1\fo\pagesetup.xsl
然后找到了对应的titlepage部分的内容:
1 2 3 4 5 6 | <!-- title pages --> <fo:simple-page-master master-name="titlepage-first" <fo:simple-page-master master-name="titlepage-odd" <fo:simple-page-master master-name="titlepage-even" |
所以,去把这部分代码注释掉,然后看看docbook能否正常编译。
结果会出错的:
org.apache.fop.apps.FOPException: No simple-page-master matching "titlepage-first" in page-sequence-master "titlepage". (See position 116:54) at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:302) at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:130) at org.apache.fop.cli.Main.startFOP(Main.java:174) at org.apache.fop.cli.Main.main(Main.java:205) Caused by: org.apache.fop.fo.pagination.PageProductionException: No simple-page-master matching "titlepage-first" in page-sequence-master "titlepage". (See position 116:54) at org.apache.fop.fo.pagination.PageProductionException$PageProductionExceptionFactory.createException(PageProductionException.java:93) at org.apache.fop.events.EventExceptionManager.throwException(EventExceptionManager.java:54) at org.apache.fop.events.DefaultEventBroadcaster$1.invoke(DefaultEventBroadcaster.java:175) at $Proxy0.noMatchingPageMaster(Unknown Source) at org.apache.fop.fo.pagination.PageSequenceMaster.getNextSimplePageMaster(PageSequenceMaster.java:221) at org.apache.fop.fo.pagination.PageSequence.getNextSimplePageMaster(PageSequence.java:273) at org.apache.fop.layoutmgr.PageProvider.cacheNextPage(PageProvider.java:326) at org.apache.fop.layoutmgr.PageProvider.getPage(PageProvider.java:293) at org.apache.fop.layoutmgr.PageProvider.getPage(PageProvider.java:257) at org.apache.fop.layoutmgr.PageSequenceLayoutManager.createPage(PageSequenceLayoutManager.java:139) at org.apache.fop.layoutmgr.AbstractPageSequenceLayoutManager.makeNewPage(AbstractPageSequenceLayoutManager.java:289) at org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(PageSequenceLayoutManager.java:103) at org.apache.fop.area.AreaTreeHandler.endPageSequence(AreaTreeHandler.java:238) at org.apache.fop.fo.pagination.PageSequence.endOfNode(PageSequence.java:120) at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder.java:349) at org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:177) at org.apache.xalan.transformer.TransformerIdentityImpl.endElement(TransformerIdentityImpl.java:1101) at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) at org.apache.xerces.xinclude.XIncludeHandler.endElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:484) at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:299) … 3 more ——— org.apache.fop.fo.pagination.PageProductionException: No simple-page-master matching "titlepage-first" in page-sequence-master "titlepage". (See position 116:54) at org.apache.fop.events.EventExceptionManager.throwException(EventExceptionManager.java:54) at org.apache.fop.events.DefaultEventBroadcaster$1.invoke(DefaultEventBroadcaster.java:175) at $Proxy0.noMatchingPageMaster(Unknown Source) at org.apache.fop.fo.pagination.PageSequenceMaster.getNextSimplePageMaster(PageSequenceMaster.java:221) at org.apache.fop.fo.pagination.PageSequence.getNextSimplePageMaster(PageSequence.java:273) at org.apache.fop.layoutmgr.PageProvider.cacheNextPage(PageProvider.java:326) at org.apache.fop.layoutmgr.PageProvider.getPage(PageProvider.java:293) at org.apache.fop.layoutmgr.PageProvider.getPage(PageProvider.java:257) at org.apache.fop.layoutmgr.PageSequenceLayoutManager.createPage(PageSequenceLayoutManager.java:139) at org.apache.fop.layoutmgr.AbstractPageSequenceLayoutManager.makeNewPage(AbstractPageSequenceLayoutManager.java:289) at org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(PageSequenceLayoutManager.java:103) at org.apache.fop.area.AreaTreeHandler.endPageSequence(AreaTreeHandler.java:238) at org.apache.fop.fo.pagination.PageSequence.endOfNode(PageSequence.java:120) at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder.java:349) at org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:177) at org.apache.xalan.transformer.TransformerIdentityImpl.endElement(TransformerIdentityImpl.java:1101) at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) at org.apache.xerces.xinclude.XIncludeHandler.endElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:484) at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:299) at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:130) at org.apache.fop.cli.Main.startFOP(Main.java:174) at org.apache.fop.cli.Main.main(Main.java:205) ../../../config/docbook.mk:386: recipe for target `../output/pdf/usb_hid.pdf’ failed |
所以,不能此处直接去掉,看来还要想其他办法。
3.后来,貌似可以通过,直接在你的docbook的xml源码中,不写book,而直接写chapter的内容,比如类似于这样的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <? xml version = '1.0' encoding = "utf-8" ?> <!DOCTYPE chapter [ <!ENTITY % crl_ent PUBLIC "crl.ent" 'https://www.crifan.com/files/res/docbook/entity/crl.ent'> %crl_ent; ]> < chapter xml:id = "ch01_reduced_instruction_set" > < title >在精简指令集以减小代码空间占用方面的对比</ title > < abstract ></ abstract > < sect1 >< title >ARM中的Thumb模式</ title > ... </ sect1 > < sect1 >< title >MIPS中的MIPS16e ASE</ title > ... </ sect1 > </ chapter > |
然后去编译,生成对应的pdf中,就没了对应的titlepage了。
当然变成了,对应的各个章节了:
【总结】
想要在docbook中,去除titlepage的部分,
则可以在写docbook的xml中,就只用对应的chapter,而不要用book,即可。