我有一个功能,把我的文本到文档到一个类似表格的东西。
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();
}
}
}
1条答案
按热度按时间xdyibdwo1#
我终于做到了。我不知道为什么,UTF-8不能处理,,,字符,但CP 1250可以。