我在甲骨文的BI Publisher生成的PDF文件。 它包含了图形和一些文本。 当试图用图像邮票文档 - 图像被添加,但丹麦的字符被破坏。
我运行iText的邮票是这样的:
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();
}
其结果是,我得到的消息如下: 文档无效 。 但是,该文件显示,包括添加的图像。 丹麦人物已经成为取代。
所有字体已经从文档属性中删除。
有没有人见过这样的事情之前? 我有好几次做之前,没有任何问题。
我已经采取了看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
该问题是由名称引起/grad0#2
, /grad1#2
,等等......这些都不是有效名称。 让我从ISO-32000-1报价:
当在PDF文件中写入一个名称,一个SOLIDUS(2Fh的)(/)将用于引入一个名称。 固相线不是名称的一部分,但表示接下来是在PDF文件中表示名称的字符序列,并应遵循这些规则的前缀:
a)在名称数字符号(23H)(#),由使用其2位十六进制码(23),由所述数字符号之前被写入。
B)在作为常规字符(除数字符号以外的名称的任何字符)应被写为自身或通过使用其2位十六进制代码,由数字符号之前。
c)任何字符不是常规字符应使用其2位十六进制码,仅由数字符号之前被写入。
你的情况,你必须遵循由1位数字一个数字符号(#)。 这并没有任何意义。 该PDF是无效的。
长话短说:请与PDF的制作人,并请他来解决问题或不会再使用他的工具。
文章来源: When stamping document - Danish characters disappear and PDF becomes invalid