【问题标题】:Equally Space the characters in Apache PDF Box PDF creation等间距 Apache PDF Box PDF 创建中的字符
【发布时间】:2017-04-23 16:36:39
【问题描述】:

我正在尝试使用 Apache PDFBox 创建 PDF 文件,内容是每行 80 个字符的纯文本消息。当我尝试创建 PDF 时,我注意到空格、_ 和其他字符在行上占据不同的宽度,我无法像我们在文本编辑器中那样格式化它们。有人可以帮我格式化它们吗?

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDType1Font;


public class SampleTest {
    public static void main(String[] args) throws Exception {
        PDDocument document = new PDDocument();     
        PDPage page = new PDPage(PDRectangle.A4);
        document.addPage(page);     
        String text =   "---------------------------\n" +
                        "------------ABC------------\n" +
                        "A                         B\n" +
                        "***************************\n" +   
                        "A  B  C  D  E  F  G  H  I  \n" +
                        "---------------------------";
        String[] textArray = text.split("\n");

        PDPageContentStream contentStream = new PDPageContentStream(document, page);        
        contentStream.beginText();      
        contentStream.setFont( PDType1Font.TIMES_ROMAN, 10 );
        contentStream.setLeading(4f);
        contentStream.newLineAtOffset(40, 750);  

        for(String line : textArray){
            contentStream.showText(line);
            contentStream.newLine();
            contentStream.newLine();    
        }
        contentStream.endText();
        contentStream.close();

        document.save("C:\\PDF-Samples\\file.pdf");
        document.close();
        System.out.println("Done");
    }
}

【问题讨论】:

    标签: java apache pdf pdfbox text-formatting


    【解决方案1】:

    为此,您需要将字体更改为固定宽度的字体(如PDType1Font.html.COURIER)。

    部分阅读:https://en.wikipedia.org/wiki/Monospaced_font


    要计算文本宽度,您可以使用:

    // result in unit of text space, suitable to use with moveTextPositionByAmount()
    (font.getStringWidth(text) / 1000.0f) * (1.0f * fontSize) // font is a PDFont
    

    【讨论】:

    • 感谢您的帮助!有效。你知道是否有任何框架可以平均间隔内容以填充行吗?
    • 我的意思是缩放文本行。
    • 没有框架。您需要使用数学,即获取字符串长度、行长度,并计算字体大小(或字形之间的空间大小)。 PDFBox 是相当低级的,不像 itext。
    • @Raja 你可能对this answer 感兴趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多