iText 5.5.x-Java-分页符
如何使用Java iText 5.5.x在页面上的y位置向文档添加分页符?我已经重写了Div类以使用自定义HTML标记,该标记表示要保存在一起的内容(因为一致性列表[指示HTML中的分页符必须是“始终”)。我似乎无法确定在内容大于我希望的页面大小时如何分页符。PDF生成没有使用“标准”创建PDF的方法,但从解析HTML文件中获取内容 以下是我为Div课程准备的内容:iText 5.5.x-Java-分页符,java,itext,Java,Itext,如何使用Java iText 5.5.x在页面上的y位置向文档添加分页符?我已经重写了Div类以使用自定义HTML标记,该标记表示要保存在一起的内容(因为一致性列表[指示HTML中的分页符必须是“始终”)。我似乎无法确定在内容大于我希望的页面大小时如何分页符。PDF生成没有使用“标准”创建PDF的方法,但从解析HTML文件中获取内容 以下是我为Div课程准备的内容: class PageBreak extends Div { private Document document; private
class PageBreak extends Div {
private Document document;
private PdfWriter writer;
private float breakPoint;
private float signatureArea = 80;
public PageBreak(Document document, PdfWriter writer) {
this.document = document;
this.writer = writer;
this.breakPoint = (document.top() - signatureArea - 40 /*padding*/);
}
@Override
public List<com.itextpdf.text.Element> end(WorkerContext ctx, Tag tag, List<com.itextpdf.text.Element> currentContent) {
System.out.println("END POS: " + writer.getVerticalPosition(true));
System.out.println("writer.getVerticalPosition(true) " + writer.getVerticalPosition(true));
System.out.println("breakPoint: " + breakPoint);
boolean newPage = writer.getVerticalPosition(true) > breakPoint;
if(newPage) {
System.out.println("breaking");
document.newPage();
}
return currentContent;
}
@Override
public List<com.itextpdf.text.Element> start(WorkerContext ctx, Tag tag) {
System.out.println("START POS: " + writer.getVerticalPosition(true));
System.out.println("writer.getVerticalPosition(true) " + writer.getVerticalPosition(true));
System.out.println("breakPoint: " + breakPoint);
return new ArrayList<com.itextpdf.text.Element>(0);
}}
class PageBreak扩展了Div{
私人文件;
私人编剧;
私有浮点断点;
私人浮动签名ea=80;
公共分页符(文档、PDF编写器){
本文件=文件;
this.writer=writer;
this.breakPoint=(document.top()-signatureArea-40/*padding*/);
}
@凌驾
公共列表结束(WorkerContext ctx、标记标签、列表内容){
System.out.println(“结束位置:+writer.getVerticalPosition(true));
System.out.println(“writer.getVerticalPosition(true)”+writer.getVerticalPosition(true));
System.out.println(“断点:”+断点);
布尔newPage=writer.getVerticalPosition(true)>断点;
如果(新页){
系统输出打印(“中断”);
document.newPage();
}
返回当前内容;
}
@凌驾
公共列表开始(WorkerContext ctx、标签){
System.out.println(“开始位置:+writer.getVerticalPosition(true));
System.out.println(“writer.getVerticalPosition(true)”+writer.getVerticalPosition(true));
System.out.println(“断点:”+断点);
返回新的ArrayList(0);
}}
HTML的一个示例:
<pagebreak>
<table><tr><td class="section-h3">A table</td></tr></table>
<table>
<tr>
<td class="withback-70">Reviewed By</td>
<td class="withoutback-70">Jim</td>
</tr>
</table>
</pagebreak>
桌子
审核人
吉姆
这是将HTML转换/解析为PDF的代码:
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
writer.setPageEvent(new HeaderFooter(mappedMasterIncident));
document.setPageSize(PageSize.LETTER);
document.setMargins(18, 18, 18, 95);
document.open();
HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
//not working
//TagProcessorFactory factory = Tags.getHtmlTagProcessorFactory();
//factory.addProcessor(new PageBreak(document, writer), "pagebreak");
//htmlContext.setTagFactory(factory);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
htmlContext.setImageProvider(new Base64ImageProvider());
CSSResolver cssResolver = new StyleAttrCSSResolver();
cssResolver.addCssFile("file:///C|/Users/jim.willmore/Desktop/pdf.css", true);
Pipeline<?> pipeline = new CssResolverPipeline(cssResolver,new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));
XMLWorker worker = new XMLWorker(pipeline, true);
XMLParser p = new XMLParser( worker);
p.parse(templateReader);
document.close();
Document Document=新文档();
PdfWriter writer=PdfWriter.getInstance(文档,outputStream);
writer.setPageEvent(新HeaderFooter(mappedMasterIncident));
document.setPageSize(PageSize.LETTER);
文件。设置页边距(18、18、18、95);
document.open();
HtmlPipelineContext htmlContext=新的HtmlPipelineContext(null);
//不起作用
//TagProcessorFactory=Tags.getHtmlTagProcessorFactory();
//addProcessor(新的分页符(文档、编写器),“分页符”);
//htmlContext.setTagFactory(工厂);
setTagFactory(Tags.getHtmlTagProcessorFactory());
setImageProvider(新的Base64ImageProvider());
CSSResolver CSSResolver=新样式AttrCSSResolver();
cssResolver.addCssFile(“file:///C|/Users/jim.willmore/Desktop/pdf.css”,true);
管道管道=新的cssResolver管道(cssResolver,新的HtmlPipeline(htmlContext,新的PdfWriterPipeline(文档,编写器));
XMLWorker=newxmlworker(管道,true);
XMLParser p=新的XMLParser(worker);
p、 parse(templateReader);
document.close();
没有任何代码很难提供帮助如何使用Java iText 5.5.x在页面上的y位置向文档添加分页符的直截了当的答案是调用document.newPage()
根据职位而定,但我认为这没有帮助,是吗?我可以发布代码,但它不是我想要的。更重要的是,我可能为自己创造了比我需要的更多的工作。我也尝试过修改页边空白,希望API能找出最好的分页位置,但失败了。主要问题是ea上的页脚ch页面重叠内容。拆分页面,使页脚显示在同一位置,而不是重叠内容,这是一件麻烦事。页脚显示在同一位置,而不是重叠内容,这是一件麻烦事-这通常很琐碎,只是为页脚在页边空白区域选择坐标的问题。mkl-感谢您提供的信息在上。我似乎未正确设置页面的页边距。我在document.open()之后设置页边距,而不是在document.open()方法调用之前。页脚现在按预期显示;没有重叠内容。我仍然无法控制分页符。有人有什么见解吗?