我正在使用Pdfbox使用Java生成PDF文件.问题是当我在文档中添加长文本内容时,它无法正确显示.只显示其中的一部分.这也是一条线.
我希望文本有多行.
我的代码如下:
PDPageContentStream pdfContent=new PDPageContentStream(pdfDocument, pdfPage, true, true);
pdfContent.beginText();
pdfContent.setFont(pdfFont, 11);
pdfContent.moveTextPositionByAmount(30,750);
pdfContent.drawString("I am trying to create a PDF file with a lot of text contents in the document. I am using PDFBox");
pdfContent.endText();
Run Code Online (Sandbox Code Playgroud)
我的输出:

我使用iTextSharp编写了一个提取工具,从PDF文档中提取注释信息.对于高亮注释,我只获得页面上突出显示的区域的矩形.
我的目标是提取已突出显示的文本.为此,我使用`PdfTextExtractor'.
Rectangle rect = new Rectangle(
pdfArray.GetAsNumber(0).FloatValue,
pdfArray.GetAsNumber(1).FloatValue,
pdfArray.GetAsNumber(2).FloatValue,
pdfArray.GetAsNumber(3).FloatValue);
RenderFilter[] filter = { new RegionTextRenderFilter(rect) };
ITextExtractionStrategy strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), filter);
string textInsideRect = PdfTextExtractor.GetTextFromPage(pdfReader, pageNo, strategy);
return textInsideRect;
Run Code Online (Sandbox Code Playgroud)
返回的结果PdfTextExtractor并不完全正确.例如,它返回"即将消除纸张追逐",即使只突出显示"消除".
有趣的是,包含突出显示的"消除"的TJ的整个文本是"将要消除纸张追逐"(TJ是将文本写入页面的PDF指令).
我很想听到有关此问题的任何意见 - 也包括不涉及iTextSharp的解决方案.
我正在编写一个Java函数,该函数将String作为参数,并使用PDFBox产生PDF作为输出。
只要我使用拉丁字符,一切都可以正常工作。但是,我事先不知道输入什么,可能是英文,中文或日文字符。
在非拉丁字符的情况下,这是我得到的错误:
Exception in thread "main" java.lang.IllegalArgumentException: U+3053 ('kohiragana') is not available in this font Helvetica encoding: WinAnsiEncoding
at org.apache.pdfbox.pdmodel.font.PDType1Font.encode(PDType1Font.java:426)
at org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:324)
at org.apache.pdfbox.pdmodel.PDPageContentStream.showTextInternal(PDPageContentStream.java:509)
at org.apache.pdfbox.pdmodel.PDPageContentStream.showText(PDPageContentStream.java:471)
at com.mylib.pdf.PDFBuilder.generatePdfFromString(PDFBuilder.java:122)
at com.mylib.pdf.PDFBuilder.main(PDFBuilder.java:111)
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,则必须对日语使用一种特定的字体,对中文使用另一种字体,依此类推,因为我使用的(Helvetiva)字体不能处理所有必需的unicode字符。
我还可以使用处理所有这些unicode字符的字体,例如Arial Unicode。但是,该字体受特定许可使用,因此我无法使用它,也没有找到另一种。
我找到了一些想要解决此问题的项目,例如Google NOTO项目。但是,该项目提供了多个字体文件。因此,我将不得不在运行时根据我的输入选择要加载的正确文件。
因此,我面临两个选择,其中一个我不知道如何正确实现:
一直在寻找可以处理几乎所有unicode字符的字体(我急切地希望在哪里找到这个字体?
尝试检测使用哪种语言,然后根据需要选择一种字体。尽管我还不知道该怎么做,但我仍然认为它不是一个干净的实现,因为输入和字体文件之间的映射将被硬编码,这意味着我将必须对所有硬编码可能的映射。
还有其他解决方案吗?
我完全偏离轨道了吗?
在此先感谢您的帮助和指导!
这是我用来生成PDF的代码:
public static void main(String args[]) throws IOException {
String latinText = "This is latin text";
String japaneseText = "????????";
// This works good
generatePdfFromString(latinText);
// …Run Code Online (Sandbox Code Playgroud)