html – 如何用PDFbox创建固定宽度的段落?

我可以插入这样简单的文本:
document = new PDDocument();
page = new PDPage(PDPage.PAGE_SIZE_A4);
document.addPage(page);
PDPageContentStream content = new PDPageContentStream(document,page);
content.beginText();
content.moveTextPositionByAmount (10,10);
content.drawString ("test text");
content.endText();
content.close();

但是如何使用width属性创建类似于HTML的段落?

<p style="width:200px;">test text</p>

解决方法

根据 this answer,不可能将换行符插入到某些文本中,并且PDF正确显示(无论是使用PDFBox还是其他东西),所以我认为自动包装一些文本以适应某些宽度也可能是不能做的事情自动. (除此之外,还有许多方法可以包装一个文本 – 全部单词,将它们分成较小的部分等)

This answer到另一个问题(以一个字符串为中心)给出了一些关于如何自己做的指针.假设你写了一个函数possibleWrapPoints(String):int []列出文本中的所有点,可以发生一个单词wrap(不包括“zero”,包括“text length”),一个可能的解决方案可能是:

PDFont font = PDType1Font.HELVETICA_BOLD; // Or whatever font you want.
int fontSize = 16; // Or whatever font size you want.
int paragraphWidth = 200;
String text = "test text";

int start = 0;
int end = 0;
int height = 10;
for ( int i : possibleWrapPoints(text) ) {
    float width = font.getStringWidth(text.substring(start,i)) / 1000 * fontSize;
    if ( start < end && width > paragraphWidth ) {
        // Draw partial text and increase height
        content.moveTextPositionByAmount(10,height);
        content.drawString(text.substring(start,end));
        height += font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize;
        start = end;
    }
    end = i;
}
// Last piece of text
content.moveTextPositionByAmount(10,height);
content.drawString(text.substring(start));

可能的WapapPoints的一个例子,允许在不是单词(reference)的任何一点的包装可以是:

int[] possibleWrapPoints(String text) {
    String[] split = text.split("(?<=\\W)");
    int[] ret = new int[split.length];
    ret[0] = split[0].length();
    for ( int i = 1 ; i < split.length ; i++ )
        ret[i] = ret[i-1] + split[i].length();
    return ret;
}

更新:一些附加信息:

> PDF文件格式设计为在不同情况下看起来是一样的,像您所要求的功能在PDF编辑器/创建者中是有意义的,但不是PDF文件本身.因此,大多数“低级”工具往往集中在处理文件格式本身,而忽略了这样的东西.
>高级工具OTOH通常具有进行此转换的方法.一个例子是Platypus(对于Python,虽然),它有简单的方法来创建段落,并依赖于较低级别的ReportLab函数来执行实际的PDF渲染.我不知道类似的PDFBox工具,但this post提供了一些关于如何使用免费提供的工具在Java环境中将HTML内容转换为PDF的提示.没有自己尝试过,但是我在这里发布,因为它可能是有用的(如果我以上的手工尝试是不够的).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


html5中section的用法
span标签和p标签的区别
jsp文件和html文件的区别是什么
span标签和div的区别
html颜色代码表大全
span标签的作用是什么
dhtml的主要组成部分包括什么
html编辑器哪个软件好用
span标签属于什么样式标签
html文件乱码怎么办
html怎么读取json文件
html文件打开乱码怎么恢复原状
html怎么链接外部css
html文件怎么保存到本地
html怎么链接css文件
html和css怎么连接
html和css怎么关联
html文件怎么保存到一个站点
html文件怎么写
html出现乱码怎么解决