java 建立一个graphics对象_如何使用Java和itext从Graphics对象创建包含多个页面的PDF...

document.open();

// the same contentByte is returned, it's just flushed & reset during

// new page events.

PdfContentByte cb = writer.getDirectContent();

for (int _pageNumber = 0; _pageNumber < _numberofPages; ++_numberOfPages) {

/*******************/

//harmless in first pass, *necessary* in others

document.newPage();

/*******************/

g2 = cb.createGraphics(_pageWidth, _height);

g2.translate(0, (_numberOfPages - _pageNumber) * _pageHeight);

draw(g2);

g2.dispose();

}

document.close();

因此,您将整个界面渲染N次,并且仅在不同位置显示页面大小的切片.这在印刷世界IIRC中被称为“条带化”.聪明,但它在PDF中可能更有效率.

将整个界面渲染为一个巨大的PdfTemplate(使用g2d),一次.然后将该模板绘制到所有页面中,使得您想要的部分在当前页面的边距内可见(“媒体框”).

PdfContentByte cb = writer.getDirectContent();

float entireHeight = _numberOfPages * _pageHeight;

PdfTemplate hugeTempl = cb.createTemplate( 0, -entireHeight, pageWidth, _pageHeight );

g2 = hugeTempl.createGraphics(0, -entireHeight, _pageWidth, _pageHeight );

draw(g2);

g2.dispose();

for (int curPg = 0; curPg < _numberOfPages; ++curPg) {

cb.addTemplateSimple( hugeTempl, 0, -_pageHeight * curPg );

document.newPage();

}

PDF的坐标空间在左下角设置为0,0,当您向上和向右时,这些值会增加. PdfGraphis2D做了相当多的魔术来隐藏与你的区别,但我们仍然需要在这里处理它…因此在边界框和绘图位置的负坐标.

这就是所有“背面的卫生巾”编码,我完全有可能在那里犯了一两个错误……但这就是主意.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值