2017-02-14 57 views
-1

我一直在研究一个模块,它需要使用itext标记所有PDF的第一页。 虽然代码是为工作正常正常PDF当我尝试投资组合PDF文件相同的逻辑。下面是相同的代码片段的:使用itext压印组合的第一页pdf

try { 

     PdfReader reader = new PdfReader("D:\\Test\\test.pdf"); 
     System.out.println(reader.getNumberOfPages()); 

     PdfStamper stamper = new PdfStamper(reader,new FileOutputStream("D:\\Test\\test_stamped.pdf")); 



     PdfContentByte canvas = stamper.getOverContent(i); 

     PdfDictionary root = reader.getCatalog(); 

     canvas.beginText(); 
     BaseFont baseFont = BaseFont.createFont(BaseFont.HELVETICA_BOLD, "ASCII", false); 
     canvas.setFontAndSize(baseFont, 14); 
     canvas.setRGBColorFill(255, 0, 0); 
     canvas.showTextAligned(PdfContentByte.ALIGN_CENTER, "Test Stamping-Pg"+i, 30, 1, 0); 
     canvas.endText(); 

     stamper.setFormFlattening(true); 
     stamper.close(); 
     reader.close(); 
     System.out.println("Stamping complete.."); 

    } catch (Throwable t) { 

     t.printStackTrace(); 
    } 

这将是非常有益的,如果有人可以帮助我吧。

+0

发生了什么,或没有发生什么? – Sid

回答

1

根据PDF规范ISO 32000-1(其中“投资组合”被称为“便携式集合”),

当符合读者首先打开一个包含集合的PDF文档时,应当显示初始文档的内容,以及目录名称树EmbeddedFiles中的文档列表。文档列表应包括集合模式指定的附加文档信息。最初的文档可能是容器PDF或嵌入式文档之一。注2:初始文档中的页面内容应包含帮助用户理解集合中包含的内容的信息,例如标题和介绍性段落。

因此,万一初始文件不是容器文档而是包含在一个,你必须包含文件,对其进行操作,并与收集您的操作版本替换其原始版本提取物。

您可以检查初始文件是否为容器文档而是包含在一个通过检查的集合词典:

表155 - 项在收集字典

d 字节字符串 (可选)一个字符串,用于标识名称树中的条目EmbeddedFiles名称树d确定最初应该在用户界面上显示的文件。如果D条目丢失或出错,则最初的文档应该是包含集合词典的文档。