java 如何在itextpdf中将外来字符放置到PDF中,如“”或“|”?

42fyovps  于 2023-04-04  发布在  Java
关注(0)|答案(1)|浏览(134)

我有一个功能,把我的文本到文档到一个类似表格的东西。

private static void addCenteredParagraph(Document document, float width, String text) {
    PdfFont timesNewRomanBold = null;
    try {
    timesNewRomanBold = PdfFontFactory.createFont(StandardFonts.TIMES_BOLD);
    } catch (IOException e) {
    LOGGER.error("Failed to create Times New Roman Bold font.");
    LOGGER.error(e);
    }

    List<TabStop> tabStops = new ArrayList<>();

    // Create a TabStop at the middle of the page
    tabStops.add(new TabStop(width / 2, TabAlignment.CENTER));

    // Create a TabStop at the end of the page
    tabStops.add(new TabStop(width, TabAlignment.LEFT));

    Paragraph p = new Paragraph().addTabStops(tabStops).setFontSize(14);
    if (timesNewRomanBold != null) {
        p.setFont(timesNewRomanBold);
    }
    p.add(new Tab()).add(text).add(new Tab());
    document.add(p);
    }

但我的问题是它在导出的PDF中显示空字符,而不是字母,,,。
Times New Roman支持这些字符,所以我想我需要将其设置为UTF8,但我在Google上找不到解决方案。
有人能解释一下如何使这些字符正确地出现在PDF上吗?
尝试了这些,但其中一些是不推荐使用的函数,或者不适用于我试图给予它们的参数,或者我不使用Chunk。
编辑:我发现,timesNewRomanBold是null,即使我将其设置为HELVETICA或COURIER。
编辑2:我也尝试了ChatGPT,但程序仍然不显示这些字符:

import java.io.IOException;
    
    import com.itextpdf.io.font.PdfEncodings;
    import com.itextpdf.kernel.font.PdfFont;
    import com.itextpdf.kernel.font.PdfFontFactory;
    import com.itextpdf.kernel.pdf.PdfDocument;
    import com.itextpdf.kernel.pdf.PdfWriter;
    import com.itextpdf.layout.Document;
    import com.itextpdf.layout.element.Paragraph;
    import com.itextpdf.layout.property.TextAlignment;
    import com.itextpdf.layout.property.VerticalAlignment;
    
    public class PDFMaker {
        public static void main(String[] args) {
            try {
                PdfDocument pdfDoc = new PdfDocument(new PdfWriter("output.pdf"));
                Document document = new Document(pdfDoc);
    
                PdfFont font = PdfFontFactory.createFont("C:/Windows/Fonts/arial.ttf", PdfEncodings.UTF8, true);
    
                Paragraph paragraph = new Paragraph("Árvíztűrő tükörfúrógép.");
                paragraph.setFont(font);
                paragraph.setTextAlignment(TextAlignment.CENTER);
                paragraph.setVerticalAlignment(VerticalAlignment.MIDDLE);
                document.add(paragraph);
    
                document.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
xdyibdwo

xdyibdwo1#

我终于做到了。我不知道为什么,UTF-8不能处理,,,字符,但CP 1250可以。

PdfFont font = PdfFontFactory.createFont("C:/Windows/Fonts/arial.ttf", PdfEncodings.CP1250, true);

相关问题