我使用PDFBox 1.8.8并尝试将新文本添加到现有的pdf文件中,问题是我添加的文本正在寻找此特定pdf的压缩
原始pdf(我认为这个文件是问题的根源)
(它正在为其他PDF工作)。
问题的图像与解释
它最初并没有显示出来,但我修复了这个问题(设置字体显示模式)
content.appendRawCommands("0 Tr ");
我在使用pdf矩阵,检查了几乎所有的东西。。。我不知道该怎么解决这个问题。。。
content.setTextMatrix(1, 0, 0, 1, 0, 0);
问题:
1)是否有任何方法来强制pdfbox使用正常的字体设置,并忽略当前页面上的字体选项
2) 有没有办法读取当前的字体设置,或者播放内容。setTextMatrix(带高度和宽度)
3) 我的pdf中使用了什么模式来存档这种转换。。。
我的密码
private static void writePdfBoxStamp(PDDocument document, int page,
float topLeftX, float topLeftY, float width, float height,
String text, float itemFontSize, int[] color, int rotation) throws IOException {
PDPage pdfPage = (PDPage) document.getDocumentCatalog().getAllPages().get(page);
PDPageContentStream content = new PDPageContentStream(document, pdfPage, true, true);
// COSDictionary pageFonts = pdfPage.getResources().getCOSDictionary();
//border draw
float lineWidth = 2;
float bottomLeftX = topLeftX;
float bottomLeftY = topLeftY - height;
float topRightX = topLeftX + width;
float topRightY = topLeftY;
float radius = 10;
content.setLineWidth(lineWidth);
content.setStrokingColor(new Color(color[0], color[1], color[2]));
content.setNonStrokingColor(new Color(color[0], color[1], color[2]));
PDFont font = PDType1Font.HELVETICA_BOLD;
int fontSize = (int) itemFontSize;
float linesHeight = font.getFontDescriptor().getFontBoundingBox()
.getHeight()
/ 1000 * fontSize;
float txtLineWidth = font.getStringWidth(text)
/ 1000 * fontSize;
content.setFont(font, fontSize);
content.beginText();
content.setFont(font, fontSize);
float posTextX = topLeftX + (width-txtLineWidth)/2;
float posTextY = topLeftY - height/2 - linesHeight/2 + lineWidth;
if (rotation > 0) {
int step = 0;
// clockwise rotation
if (rotation == 90) {
step = 6;
posTextX = topLeftX + (width + linesHeight)/2 - lineWidth;
posTextY = topLeftY - (height + txtLineWidth)/2;
}
if (rotation == 270) {
step = -6;
posTextX = topLeftX + (width - linesHeight/2)/2;
posTextY = topLeftY - (height - txtLineWidth)/2;
}
content.setTextRotation(-step*Math.PI*0.25, posTextX, posTextY);
} else {
content.moveTextPositionByAmount(posTextX,posTextY);
}
content.appendRawCommands("0 Tr "); //set normal text procession
content.drawString(text);
content.endText();
content.stroke();
content.close();
}
我用PDFDebugger看了你的结果PDF,它在页面的流数组中有两个流,第二个流是“批准”的东西。所以你能做的就是把原始流括在q...... q中保存和恢复设置。我试着用NOTEpad在PDF中编辑它(我首先用WriteDecodedDoc命令行实用程序解压缩它)。
还有其他可能比我的回答更好的策略,例如分层,或者使用透明图像(例如RubberStampWithImage)。
更新:我看到你对吉拉问了同样的问题,安德烈亚斯的回答也很好:https://issues.apache.org/jira/browse/PDFBOX-2581
我的问题是:我有两个标签。 我的目标是单击只包含单词“word”而不包含“microsoft word”的标签。 所以我做了这个: 但是这种方法让我点击包含“单词”的标签,而不等于“单词”,所以我点击的标签是第一个,而不是我想要的第二个。 我必须找到一种方法来检查等式,但我没有找到。 我能怎么办?
问题内容: 我正在寻找有关如何在JPanel中绘制文本的最基本描述。我知道那里有十亿个教程,但是没有一个在我身边点击,我有一些具体的问题可能会帮助其他困惑的人。作为设置(测试应用程序),我有一个类,其中包含JLabel,JTextField,JButton和JPanel。该应用程序从一个外部文件中读取整数,并且在按下JButton时应在面板中显示其平均值。我已经整理了所有基础编程(即按钮响应并将平
希望你们中有人能告诉我为什么我的这个ffmpeg命令没有画出想要的文本。制作的视频没有。给你: 你觉得对吗?如果是这样,那么为什么我在videoMail_preview.webm视频文件中看不到任何文本呢? 在这里使用FFMPEGV2.8.6,启用了--enable-libfreetype、--enable-libfontconfig和--enable-libfribidi。 此外,上面的命令是用
背景 我一直在开发一个程序,它可以获取一个pdf,突出显示一些单词(通过pdfbox标记注释)并保存新的pdf。 为此,我扩展了PDFTextStripper类,以覆盖writeString()方法并获取每个单词(框)的TextPositions,这样我就可以准确地知道文本在PDF文档中的坐标位置(TextPosition对象为我提供每个单词框的坐标)。然后,在此基础上,我画了一个矩形,突出显示我
我的目的是绘制一个上传的图像,我不知道的尺寸在一个PDF文件的一个空页(DINA4)。对于水平图像,我有一个带有一个水平空页的PDF文件,对于垂直图像,我有一个带有一个垂直页的PDF文件。 这是我到目前为止的代码: 对于垂直图像,一切工作都很好(我更希望图像在页面的中心,但这将是下一步)。
问题内容: 假设我有一个包含以下内容的文本文件: 有什么方法可以编辑该文本文件中的特定行?现在我有这个: 是的,我知道那是不正确的。但是你明白我的意思吧?我正在尝试通过用法师替换战士来编辑第2行。但是我还能做到吗? 问题答案: 您想做这样的事情: 这样做的原因是您不能直接在文件中执行“更改第2行”之类的操作。您只能覆盖(而不是删除)文件的某些部分- 这意味着新内容仅覆盖旧内容。因此,如果您在第2行