如何解决pdf标题签名未找到错误?

2022-09-03 01:29:52

我正在我的java程序中使用iText来编辑现有的pdf。生成的pdf无法打开,并显示找不到pdf标头签名错误。我使用相同的名称使用输入和输出文件。

private static String INPUTFILE = "/sample.pdf";
private static String OUTPUTFILE = "/sample.pdf";       
public static void main(String[] args) 
        throws DocumentException,
        IOException 
{
    Document doc = new Document();
    PdfWriter writer = PdfWriter.getInstance(doc,new FileOutputStream(OUTPUTFILE));
    doc.open();
    PdfReader reader = new PdfReader(INPUTFILE);
    int n;
    n = reader.getNumberOfPages();
    System.out.println("No. of Pages :" +n);
    for (int i = 1; i <= n; i++) 
    {
            if (i == 1)                 
            {            
                   Rectangle rect = new Rectangle(85,650,800,833);
                   PdfFormField pushbutton = PdfFormField.createPushButton(writer);
                   pushbutton.setWidget(rect, PdfAnnotation.HIGHLIGHT_PUSH);
                   PdfContentByte cb = writer.getDirectContent();
                   PdfAppearance app = cb.createAppearance(380,201);
                   app.rectangle(62,100,50,-1);
                   app.fill();
                   pushbutton.setAppearance(PdfAnnotation.APPEARANCE_NORMAL,app);
                   writer.addAnnotation(pushbutton);
                   PdfImportedPage page = writer.getImportedPage(reader, i);
                   Image instance = Image.getInstance(page);
                   doc.add(instance);
                }

答案 1

然后首先尝试将输入文件重命名为.bak,然后读取.bak,并写入.pdf。这可以提供一个线索,说明错误是与阅读还是与写作有关。

Itext不是一个单一的API,而是几个混合在一起的API。有时很难。我做了:

关闭 和 。PdfReaderFileInputStream

同时关闭 和 。DocumentPdfWriter


答案 2

您可能从空源或无效的pdf文件导入,在我的情况下,pdfCopy不起作用,所以这是我使用的代码。

Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, OutputStream );
PdfReader reader = new PdfReader(dato.getBinaryStream());

PdfImportedPage page1 = writer.getImportedPage(reader, 1);
PdfContentByte cb = writer.getDirectContent();
cb.addTemplate(page1, 1, 0, 0, 1, 0, 0);

 document.setPageSize(new Rectangle(page1.getWidth(),page1.getHeight()) );

...

这应该有效。


推荐