问题描述
到目前为止,我想生成具有多个字符串的PDF文件:标题,副标题。
我正在将Apache PDFBox 2.0.21与Java 11一起使用。
我写了以下代码:
String title = "Title Goes Here";
String subTitle = "Subtitle goes here\nTime goes here";
try(PDDocument document = new PDDocument()){
PDPage page = new PDPage();
float px,py;
int hMargin = 5;
int vMargin = 10;
// Writing Title
PDPageContentStream titleContentStream = new PDPageContentStream(document,page,PDPageContentStream.AppendMode.APPEND,false);
PDFont titleFont = PDType1Font.TIMES_ROMAN;
float titleFontSize = 18;
float titleWidth = titleFont.getStringWidth(title)/1000*titleFontSize;
float titleHeight = titleFont.getFontDescriptor().getFontBoundingBox().getHeight()/1000*titleFontSize;
titleContentStream.beginText();
titleContentStream.setFont(titleFont,titleFontSize);
px = (page.getMediaBox().getWidth() - titleWidth - (2*hMargin))/2;
py = page.getMediaBox().getHeight() - titleHeight - vMargin;
titleContentStream.newLineatoffset(px,py);
titleContentStream.showtext(title);
titleContentStream.endText();
titleContentStream.close();
// Writing Subtitle
PDPageContentStream subtitleContentStream = new PDPageContentStream(document,false);
PDFont subtitleFont = PDType1Font.COURIER_BOLD;
float subtitleFontSize = 14;
float subTitleWidth = subtitleFont.getStringWidth(title)/1000*subtitleFontSize;
float subTitleHeight = subtitleFont.getFontDescriptor().getFontBoundingBox().getHeight()/1000*subtitleFontSize;
subtitleContentStream.beginText();
subtitleContentStream.setFont(subtitleFont,subtitleFontSize);
px = hMargin;
py = page.getMediaBox().getHeight() - titleHeight - vMargin - subTitleHeight - 5;
subtitleContentStream.newLineatoffset(px,py);
subtitleContentStream.showtext(subTitle);
subtitleContentStream.endText();
subtitleContentStream.close();
document.addPage(page);
document.save("hello.pdf");
} catch (IOException e) {
e.printstacktrace();
}
Sep 06,2020 11:03:47 PM org.apache.pdfBox.pdmodel.PDPageContentStream <init>
WARNING: You are overwriting an existing content,you should use the append mode
Exception in thread "main" java.lang.IllegalArgumentException: U+000A ('controlLF') is not available in this font Courier-Bold encoding: WinAnsiEncoding
at org.apache.pdfBox@2.0.21/org.apache.pdfBox.pdmodel.font.PDType1Font.encode(PDType1Font.java:418)
at org.apache.pdfBox@2.0.21/org.apache.pdfBox.pdmodel.font.PDFont.encode(PDFont.java:332)
at org.apache.pdfBox@2.0.21/org.apache.pdfBox.pdmodel.PDPageContentStream.showtextInternal(PDPageContentStream.java:514)
at org.apache.pdfBox@2.0.21/org.apache.pdfBox.pdmodel.PDPageContentStream.showtext(PDPageContentStream.java:476)
at H2Test/org.Geek8080.Main.main(Main.java:69)
我在做什么错了?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)