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

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

概述我可以插入这样简单的文本: document = new PDDocument();page = new PDPage(PDPage.PAGE_SIZE_A4);document.addPage(page);PDPageContentStream content = new PDPageContentStream(document, page);content.beginText();c 我可以插入这样简单的文本:
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 >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 textcontent.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的提示.没有自己尝试过,但是我在这里发布,因为它可能是有用的(如果我以上的手工尝试是不够的).

总结

以上是内存溢出为你收集整理的html – 如何用PDFbox创建固定宽度的段落?全部内容,希望文章能够帮你解决html – 如何用PDFbox创建固定宽度的段落?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1101133.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存