Itext 在文档上盖章时-丹麦字符消失,PDF无效

Itext 在文档上盖章时-丹麦字符消失,PDF无效,itext,Itext,我有一个在Oracle BI Publisher中生成的PDF。它包含一个图形和一些文本。当试图用图像在文档上盖章时,图像会被添加,但丹麦字符会被销毁 我运行iText Stamp时如下所示: static void stampPdf() throws IOException, DocumentException { PdfReader reader = new PdfReader(PDF_SOURCE_FILE); PdfStamper stamper = new PdfSta

我有一个在Oracle BI Publisher中生成的PDF。它包含一个图形和一些文本。当试图用图像在文档上盖章时,图像会被添加,但丹麦字符会被销毁

我运行iText Stamp时如下所示:

static void stampPdf() throws IOException, DocumentException {
    PdfReader reader = new PdfReader(PDF_SOURCE_FILE);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
            PDF_STAMPED_FILE));
    Image img = Image.getInstance(WATERMARK);
    img.setAbsolutePosition(10, 100);
    PdfContentByte under = stamper.getUnderContent(1);
    under.addImage(img);
    stamper.close();
}
结果,我得到以下消息:documentinvalid。但会显示文档,包括添加的图像。丹麦文字已被取代

已从文档属性中删除所有字体


以前有人见过这样的东西吗?我以前做过几次,都没有问题。

我看过PDF,这不是一个iText问题。这是一个“垃圾进,垃圾出”的问题。请在Acrobat中打开PDF并分析其语法错误。您将收到以下消息:

PDF的内容流是错误的,即使Acrobat也无法分析它并告诉您错误所在

所以我查看了文件内部,当它看起来好像iText看不到页面的页面资源时。页面资源指的是字体。如果iText看不到页面资源,iText就看不到字体,字体也会在这个过程中丢失

如果Acrobat允许我“分析和修复”,那么我可以创建一个固定的PDF并比较固定的内容。但是,由于Acrobat无法修复该文件,因此手动查看完整的文件以找出它到底出了什么问题需要做大量的工作。出于好奇,我在文本编辑器中打开了文档,发现:

4 0 obj
<<
/ProcSet [ /PDF /Text ]
/Font << 
/F1 7 0 R
/F2 8 0 R
/F3 11 0 R
>>
/Shading << 
/grad0 10 0 R
/grad0#2 15 0 R
/grad1#2 17 0 R
/grad2#2 19 0 R
/grad3#2 21 0 R
/grad4#2 23 0 R
/grad5#2 25 0 R
>>
>>
endobj
40对象
/着色>
>>
endobj
问题是由名称
/grad0#2
/grad1#2
等引起的。。。这些名称无效。让我引用ISO-32000-1:

在PDF文件中写入名称时,应使用索利多士(2Fh)(/) 介绍一个名字。索利多金币不是名字的一部分,而是一种货币 表示后面是字符序列的前缀 表示PDF文件中的名称,并应遵循以下规则:

a) 名称中的数字符号(23h)(#)应使用其 2位十六进制代码(23),前面有数字符号

b) 名称中的任何常规字符(数字除外) 符号)应以自身形式书写或使用其2位十六进制 代码,前面有数字符号

c) 任何不是角色的角色 规则字符应使用其2位十六进制代码书写, 前面只有数字符号

在您的例子中,您有一个数字符号(#)后跟一个1位数字。那没有任何意义。PDF文件无效


长话短说:联系PDF的制作人,请他解决问题,或者不再使用他的工具。

我以前从未见过这种情况。您正在使用哪个版本的iText?你能分享PDF文件和水印吗?我用最新版本的iText试过了。如果您想看一下,我可以给您发送一个包含af测试用例的zip?我最终如何向您提供这些文件?将它们放在一个网站上并提供URL。如果您能看一看,我将不胜感激:你好,布鲁诺,您看了吗?我将尝试修复模板。PDF是使用旧版Oracle BI Publisher中处理的模板生成的。