标签: pdfbox

如何使用pdfbox获取字体颜色

我正在尝试使用pdfbox从pdf中提取所有信息的文本.除了颜色,我得到了我想要的所有信息.我尝试了不同的方法来获得fontcolor(包括使用PDFBox获取文本颜色).但不行.现在我从PageDrawer类的pdfBox中复制了代码.但是那时RGB值也不正确.

protected void processTextPosition(TextPosition text) {

        Composite com;
        Color col;
        switch(this.getGraphicsState().getTextState().getRenderingMode()) {
        case PDTextState.RENDERING_MODE_FILL_TEXT:
            com = this.getGraphicsState().getNonStrokeJavaComposite();
            int r =       this.getGraphicsState().getNonStrokingColor().getJavaColor().getRed();
            int g = this.getGraphicsState().getNonStrokingColor().getJavaColor().getGreen();
            int b = this.getGraphicsState().getNonStrokingColor().getJavaColor().getBlue();
            int rgb = this.getGraphicsState().getNonStrokingColor().getJavaColor().getRGB();
            float []cosp = this.getGraphicsState().getNonStrokingColor().getColorSpaceValue();
            PDColorSpace pd = this.getGraphicsState().getNonStrokingColor().getColorSpace();
            break;
        case PDTextState.RENDERING_MODE_STROKE_TEXT:
            System.out.println(this.getGraphicsState().getStrokeJavaComposite().toString());
            System.out.println(this.getGraphicsState().getStrokingColor().getJavaColor().getRGB());
           break;
        case PDTextState.RENDERING_MODE_NEITHER_FILL_NOR_STROKE_TEXT:
            //basic support for text rendering mode "invisible"
            Color nsc = this.getGraphicsState().getStrokingColor().getJavaColor();
            float[] components = {Color.black.getRed(),Color.black.getGreen(),Color.black.getBlue()};
            Color  c1 = new Color(nsc.getColorSpace(),components,0f);
            System.out.println(this.getGraphicsState().getStrokeJavaComposite().toString());
            break;
        default:
            System.out.println(this.getGraphicsState().getNonStrokeJavaComposite().toString());
            System.out.println(this.getGraphicsState().getNonStrokingColor().getJavaColor().getRGB());
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用上面的代码.得到的值是R = 0,G …

java pdfbox

7
推荐指数
2
解决办法
9900
查看次数

填写PDFBox的PDF表单不起作用

我有一个PDF文件,其中包含一些我需要从Java代码填写的表单字段.我为此使用PDFBox库,这段代码:

PDDocument pdfDoc = PDDocument.load("C:\\Users\\igor\\Desktop\\test.pdf");
PDDocumentCatalog docCatalog = pdfDoc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDField field = acroForm.getField("applicationPrepaid[0].#pageSet[0].Pagina1[0].txtFirstName[0]");
if (field != null) {
    field.setValue("Milan");
} else {
    System.err.println("No field found with name:" + "applicationPrepaid[0].#pageSet[0].Pagina1[0].txtFirstName[0]");
}
pdfDoc.save("C:\\Users\\igor\\Desktop\\testout.pdf");
pdfDoc.close();
Run Code Online (Sandbox Code Playgroud)

PDF不是由我创建的,所以我不知道文件使用什么类型的表单(如果我理解正确,则有FDF和XFA表单).由于PDF不是由我创建的,我使用此工具http://support.persits.com/pdf/demo_formfields.asp来查找表单字段的名称,它给了我:

applicationPrepaid[0].#pageSet[0].Pagina1[0].txtFirstName[0]
Run Code Online (Sandbox Code Playgroud)

当我使用这个长字段名称时,我没有收到任何错误,但生成的PDF不包含我在字段中输入的值.我想也许字段名称可能有问题,所以我使用了Pdftk工具,它只给了我txtFirstName字段名称.但是当我使用它时,我得到了No field found with name: txtFirstName错误.救命?

java pdf pdf-form pdfbox

7
推荐指数
1
解决办法
1万
查看次数

使用pdfbox从pdf中删除加密,如qpdf

使用qpdf,您可以简单地从pdf中删除限制/加密,如下所示:

qpdf --decrypt infile outfile
Run Code Online (Sandbox Code Playgroud)

我想用Java中的PDFBox做同样的事情:

PDDocument doc = PDDocument.load(inputFilename);
if( doc.isEncrypted() )
{
   //remove the encryption to alter the document
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用StandardDecryptionMaterial,但我不知道所有者密码是什么.qpdf如何做到这一点?

样本文件:https://issues.apache.org/jira/secure/attachment/12514714/in.pdf

java pdf pdfbox

7
推荐指数
1
解决办法
1万
查看次数

Java:使用PDFBox库从图像创建PDF页面

我需要将图像(主要是JPEG)直接转换为PDF文档的PDF页面.
可能是图像的大小不同.

每个PDF页面都应具有与图像完全相同的尺寸.
因此每个页面仅包含全分辨率的图像.

如何实现这一点,页面设置为图像/内容的尺寸?
因为我看到了具有不同页面大小和方向的PDF文件,但是如何使用PDFBox完成?

java pdf pdfbox java-7

7
推荐指数
1
解决办法
2万
查看次数

使用PDFBox读取文本和图像位置(xy坐标)

我正在做一个java程序来读取加密的PDF文件并逐页提取文件的内容,包括文件,图像及其在文件中的位置(x,y坐标).现在我正在使用PDFBox,我正在获取文本和图像.但我无法得到文字位置和图像位置.读取一些加密的PDF文件也存在一些问题.

java pdfbox

6
推荐指数
1
解决办法
4573
查看次数

访问PDF中的字体文件

我们目前正与一些出版商合作,通过他们的PDF生成在线图书.我们的遗留应用程序使用flex,因此我们正在使用SWFToolsPDF2SWF将PDF转换为SWF文件.

我们遇到的问题是,当用户执行搜索时,我们的弹性阅读器不会突出显示SWF文档中的文本.经过快速调查后,我们发现在提取文本时我们需要嵌入PDF文档使用的字体:

http://wiki.swftools.org/wiki/How_do_I_highlight_text_in_the_SWF%3F

pdf2swf -F $YOUR_FONTS_DIR$ -f input.pdf -o output.swf
Run Code Online (Sandbox Code Playgroud)

从上面的代码中可以看出,我们需要一个包含该PDF中字体的字体目录的路径.

由于我们将转换大量PDF,是否可以直接通过PDF访问字体文件而不是在我们的应用程序中存储大量字体?

附加信息

我们的应用程序是用Java编写的.

我们目前在应用程序中使用PDFBox和Ghostscript,因此如果任何解决方案使用这些库,那么这将是首选,但我们对所有想法持开放态度.

java pdf fonts extract pdfbox

6
推荐指数
1
解决办法
1100
查看次数

PdfBox编码符号货币欧元

我用Apache PDFBox库创建了一个PDF文档.我的问题是在页面上绘制字符串时编码欧元货币符号,因为基本字体Helvetica不提供此字符.如何将输出"þÿ¬"转换为符号"€"?

java pdfbox

6
推荐指数
1
解决办法
8375
查看次数

如何使用 Apache PDFBOX 库以表​​格形式创建 PDF 表单?

我想创建一个包含表格的 PDF 表单,其中表格将包含行数,某些列将只读文本,而某些列需要是可编辑的 TextFields/ComboBox。

此外,此文本字段/组合框应具有 javascript 支持,即,在这些字段的值更改时,应调用 javascript 函数来验证用户输入。

我在这里附上了所需的示例格式:

在此处输入图片说明

java pdf-generation pdfbox

6
推荐指数
0
解决办法
713
查看次数

PDFBox 1.8.10:填写并签名PDF会生成无效签名

我在PDF文档中填写(以编程方式)表单(AcroPdf),然后在文档中签名.我从doc.pdf开始,使用PDFBox的setFields.java示例创建doc_filled.pdf.然后我签署doc_filled.pdf,使用一些代码创建doc?filled_signed.pdf,基于签名示例并在Acrobat Reader中打开pdf.输入的Field数据可见,签名面板告诉我

"此签名中包含的格式或信息存在错误(签名字节数组无效)"

到目前为止,我知道:

  • 单独应用的签名代码(即直接创建一些doc_signed.pdf)会创建一个有效的签名
  • "隐形签名",可见签名和可见签名存在的问题被添加到现有签名字段中.
  • 问题甚至发生,如果我没有填写表格,但只打开并保存,即:

    PDDocument doc = PDDocument.load(new File("doc.pdf"));
    doc.save(new File("doc_filled.pdf"));
    doc.close();
    
    Run Code Online (Sandbox Code Playgroud)

足以打破后来应用的签名代码.

另一方面,如果我使用相同的doc.pdf,在Adobe中手动输入字段的值,则签名代码会生成有效的签名.

我究竟做错了什么?

更新:

@mkl要求我提供文件,我正在谈论(我目前没有足够的声誉,将所有文件发布为链接,抱歉给您带来不便):

  • odc.pdf:https://www.dropbox.com/s/ev8x9q48w5l0hof/doc.pdf dl = 0
  • doc_filled.pdf:https://www.dropbox.com/s/fxn4gyneizs1zzb/doc_filled.pdf dl = 0
  • doc_filled_signed.pdf:https://www.dropbox.com/s/xm846sj8f9kiga9/doc_filled_signed.pdf dl = 0
  • doc_filled_and_signed.pdf:https://www.dropbox.com/s/5jftje6ke87jedr/doc_filled_and_signed.pdf dl = 0

最后一个是通过一次性使用签署和填写文档来创建的

    doc.saveIncremental(); 
Run Code Online (Sandbox Code Playgroud)

正如我已经在评论中写的那样

    setNeedToBeUpdate(true);
Run Code Online (Sandbox Code Playgroud)

但似乎缺少了.参考@mkl的第二条评论,我发现了这个问题:使用PDFBOX生成的PDF中无法正确显示保存的文本字段值,这也包括某些输入的文本未显示.申请时,我先试了一下

    setBoolean(COSName.getPDFName("NeedAppearances"), true); 
Run Code Online (Sandbox Code Playgroud)

到字段和表单的字典,然后显示字段上下文,但签名最终没有添加.我仍然需要进一步研究.

更新: 故事在这里继续:PDFBox 1.8.10:填写并签署文档,再次填充失败

java pdf sign pdf-form pdfbox

6
推荐指数
1
解决办法
1939
查看次数

生成的pdf中的文本是反向的

我正在使用 pdfbox 在 pdf 文件中添加一行。但我添加的文字是相反的。

File file = new File(filePath);
PDDocument document = PDDocument.load(file);

PDPage page = document.getPage(0);
PDPageContentStream contentStream = new PDPageContentStream(document, page,PDPageContentStream.AppendMode.APPEND,true);

int stampFontSize = grailsApplication.config.pdfStamp.stampFontSize ? grailsApplication.config.pdfStamp.stampFontSize : 20
contentStream.beginText();
contentStream.setFont(PDType1Font.TIMES_ROMAN, stampFontSize);

int leftOffset = grailsApplication.config.pdfStamp.leftOffset ? grailsApplication.config.pdfStamp.leftOffset : 10
int bottomOffset = grailsApplication.config.pdfStamp.bottomOffset ? grailsApplication.config.pdfStamp.bottomOffset : 20
contentStream.moveTextPositionByAmount(grailsApplication.config.xMove,grailsApplication.config.yMove)
contentStream.newLineAtOffset(leftOffset, bottomOffset)

String text = "i have added this line...!!!!";
contentStream.showText(text);
contentStream.endText();

contentStream.close();

document.save(new File(filePath));
document.close();

byte[] pdfData;
pdfData = Files.readAllBytes(file.toPath());
return pdfData;
Run Code Online (Sandbox Code Playgroud)

我尝试使用 moveTextPositionByAmount 方法,但这似乎对文本没有任何影响。为什么我的文字颠倒了,我如何将其设置为正确的方向。

请参阅pdf输出的图像

pdf grails pdfbox

6
推荐指数
1
解决办法
1366
查看次数

标签 统计

pdfbox ×10

java ×9

pdf ×6

pdf-form ×2

extract ×1

fonts ×1

grails ×1

java-7 ×1

pdf-generation ×1

sign ×1