我的 Spring boot Java 应用程序使用 apache pdf box 库 {version 2.0.6} 来生成 pdf。我希望小数值右对齐。这意味着所有小数点应在同一垂直线上对齐。我还附上了屏幕截图。
stream.beginText();
stream.newLineAtOffset(xCordinate, yCordinate);
stream.showText(String.valueOf(item.getQuantity()));
List<String> resultList = processTextData(TextUtil.isEmpty(item.getDescription()) ? "-" : item.getDescription());
int y = 0;
int x = 50;
int tempYcordinate = yCordinate;
for (String string : resultList) {
stream.newLineAtOffset(x, y);
stream.showText(processStringForPdf(string));
x = 0;
y = -8;
}
tempYcordinate = tempYcordinate - (8 * resultList.size());
stream.endText();
stream.beginText();
stream.newLineAtOffset(285, yCordinate);
stream.showText("$" + NumberFormat.getInstance(Locale.US).format(Util.round(item.getUnitPrice())));
stream.newLineAtOffset(65, 0);
stream.showText("$" + NumberFormat.getInstance(Locale.US).format(Util.round(item.getExtPrice())));
stream.endText();
yCordinate = tempYcordinate;
Run Code Online (Sandbox Code Playgroud)
我想使用 PDFBox API 添加文本到 PDF 并将其旋转 45 度并将其放置在页面的中心,文本是动态的,应该始终放置在中心,除了居中部分之外,其他所有功能都可以工作,我将不胜感激任何帮助。我有这个代码:
Point2D.Float pageCenter = getCenter(page);
float stringWidth = getStringWidth(watermarkText, font, fontSize);
float textX = pageCenter.x - stringWidth / 2F + center.x;
System.out.println(textX);
float textY = pageCenter.y + center.y;
//System.out.println("Inside cross"+textX+", "+textY);
fontSize = 110.0f;
cs.transform(Matrix.getRotateInstance(Math.toRadians(45), textX, textY));
cs.moveTo(0, 0);
cs.lineTo(125, 0);
r0.setNonStrokingAlphaConstant(0.20f);
Run Code Online (Sandbox Code Playgroud)
这就是我想要的结果: 输出PDF
我正在使用 pdfbox 和 easytable https://github.com/vandeseer/easytable创建动态页面,效果很好。但我确实希望在所有页面中添加标题。我面临/尝试过以下事情。
1)建表器是在写入行之前创建的,因此我们可以创建一个完美的建表器,因为行是动态的。
2)尝试在创建表格构建器时在中间插入标题,这又不完美,因为 TableDrawer 根据行高使行足够
任何想法/帮助将不胜感激。
需要类似于此项目的输出 - https://github.com/eduardohl/Paginated-PDFBox-Table-Sample。这里唯一的问题是内容不像 easytable 那样是动态的。
我正在尝试使用 PDF 框阅读器获取当前页面。
听到的是我写的代码。
公共类 PDFTextExtractor{
ArrayList extractText(String fileName) 抛出异常 {
PDDocument document = null;
try {
document = PDDocument.load( new File(fileName) );
PDFTextAnalyzer stripper = new PDFTextAnalyzer();
stripper.setSortByPosition( true );
stripper.setStartPage( 0 );
stripper.setEndPage( document.getNumberOfPages() );
Writer dummy = new OutputStreamWriter(new ByteArrayOutputStream());
stripper.writeText(document, dummy);
return stripper.getCharactersList();
}
finally {
if( document != null ) {
document.close();
}
}
Run Code Online (Sandbox Code Playgroud)
}
当我试图获取详细信息时,我正在编写以下代码。
public class PDFTextAnalyzer extends PDFTextStripper {
public PDFTextAnalyzer() throws IOException {
super();
// TODO Auto-generated constructor stub
}
private …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 apache PDFBOX 将图像保存到现有的 pdf 中,但我的内容被删除,当我将图像放在 pdf 上时,我得到空白文档,有解决问题的方法吗?
我的代码看起来像这样。
public class TestPdfImage {
public static void main(String args[]) throws Exception {
//Loading an existing document
File file = new File("...../mydoc.pdf");
PDDocument doc = PDDocument.load(file);
//Retrieving the page
PDPage page = doc.getPage(0);
//Creating PDImageXObject object
PDImageXObject pdImage = PDImageXObject.createFromFile("...../sample.png",doc);
//creating the PDPageContentStream object
PDPageContentStream contents = new PDPageContentStream(doc, page);
//Drawing the image in the PDF document
contents.drawImage(pdImage, 70, 250);
System.out.println("Image inserted");
//Closing the PDPageContentStream object
contents.close();
//Saving the document
doc.save(".../sample.pdf");
//Closing …Run Code Online (Sandbox Code Playgroud) 我希望获得 PDF 中每个页面的准确大小,作为我将创建的 PDF 单元测试的一部分。当我处理每个文档中有许多不同页面大小的 PDF 时,代码返回一个维度的 ArrayList。
AFAIK 每个页面也可以有自己的 DPI 设置。
我已经做了相当多的谷歌搜索,但我只想到了这个,它只给了我部分答案,因为我仍然需要计算出每个页面的 DPI 是多少。
public static ArrayList<float[]> getDimentions(PDDocument document) {
ArrayList<float[]> dimensions = new ArrayList<>();
float[] dim = new float[2];
//Loop Round Each Page
//Get Dimensions of each page and DPI
for (int i = 0; i < document.getNumberOfPages(); i++) {
PDPage currentPage = document.getPage(i);
PDRectangle mediaBox = currentPage.getMediaBox();
float height = mediaBox.getHeight();
float width = mediaBox.getWidth();
// How do I get the DPI now????
} …Run Code Online (Sandbox Code Playgroud) 我最近开始使用PDFBox来处理一些PDF文件。我成功加载了 Roboto 字体,但是,我不明白 PDType0Font、PDType1Font 和 PDTrueTypeFont 之间的区别。使用哪一个更好?
问候
正如标题所示,我想过滤掉 PDF 中超过特定字体大小的所有文本。目前,我正在使用 PDFBox 库,但我愿意使用任何其他免费的 Java 库。
我的方法是使用 PDFStreamParser 来迭代令牌。当我传递大小大于阈值的 Tf 运算符时,不要添加看到的下一个 Tj/TJ。然而,我已经清楚这种相对简单的方法行不通,因为文本可能会被当前的变换矩阵缩放。
我是否可以采取更好的方法,或者有一种方法可以使我的方法发挥作用而不变得太复杂?
我有一个pdf坐标(x,y)作为输入.我需要在给定的输入坐标处绘制一个字符串[例如: - (x,y)=(200,250)].我正在使用pdfbox,当我使用下面的方法moveTextPositionByAmount我没有得到确切的位置.即使我尝试使用moveTo().请帮我如何在准确的位置画出弦?
PDPageContentStream contentStream = new PDPageContentStream(document, page,true,true);
contentStream.beginText();
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
contentStream.moveTextPositionByAmount(xindex, yindex);
contentStream.setNonStrokingColor(color);
contentStream.drawString(comment);
contentStream.stroke();
contentStream.endText();
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有一些pdf需要提取到文本只有一个pdf是truetype它会导致以下错误:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.fontbox.ttf.TrueTypeFont.getAdvanceWidth(I)I
at org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.getFontWidth(PDTrueTypeFont.java:677)
at org.apache.pdfbox.pdmodel.font.PDSimpleFont.getFontWidth(PDSimpleFont.java:231)
at org.apache.pdfbox.util.PDFStreamEngine.processEncodedText(PDFStreamEngine.java:411)
at org.apache.pdfbox.util.operator.ShowText.process(ShowText.java:45)
at org.apache.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.java:557)
at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:268)
at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:235)
at org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:215)
at org.apache.pdfbox.util.PDFTextStripper.processPage(PDFTextStripper.java:460)
at org.apache.pdfbox.util.PDFTextStripper.processPages(PDFTextStripper.java:385)
at org.apache.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:344)
at org.apache.pdfbox.util.PDFTextStripper.getText(PDFTextStripper.java:257)
Run Code Online (Sandbox Code Playgroud)
我检查api源代码仍然无法通过它.有什么我可以做的吗?或2.0版本解决了这个问题.