분명히 PDF가 손상되었습니다. 필드는 페이지 레벨에서 위젯 주석으로 정의되지만 문서 루트 레벨에 설정된 /AcroForm
필드에서 참조되지 않습니다.
당신은 FixBrokenForm 코드 샘플을 사용하여 PDF를 해결할 수 :
PdfReader reader = new PdfReader(src);
PdfDictionary root = reader.getCatalog();
PdfDictionary form = root.getAsDict(PdfName.ACROFORM);
PdfArray fields = form.getAsArray(PdfName.FIELDS);
PdfDictionary page;
PdfArray annots;
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
page = reader.getPageN(i);
annots = page.getAsArray(PdfName.ANNOTS);
for (int j = 0; j < annots.size(); j++) {
fields.add(annots.getAsIndirectObject(j));
}
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
reader.close();
당신은 자신의 PDF 파일은 PDF 기준을 준수하지 않은 것으로 양식을 생산하는 데 사용 된 도구의 제작자을 알려야한다. 당신은 작동하지 않습니다 PDF를 제공 할 수
PdfReader reader = new PdfReader(src);
PdfDictionary root = reader.Catalog;
PdfDictionary form = root.GetAsDict(PdfName.ACROFORM);
PdfArray fields = form.GetAsArray(PdfName.FIELDS);
PdfDictionary page;
PdfArray annots;
for (int i = 1; i <= reader.NumberOfPages; i++)
{
page = reader.GetPageN(i);
annots = page.GetAsArray(PdfName.ANNOTS);
for (int j = 0; j < annots.Size; j++)
{
fields.Add(annots.GetAsIndirectObject(j));
}
}
PdfStamper stamper = new PdfStamper(reader, new FileStream(dest, FileMode.Create));
stamper.Close();
reader.Close();
귀하의 코드 내 샘플 PDF에서 작동 : 여기 –
내 PDF에서는 xfapresent가 false입니다. 그러나 다른 PDF에서 필드를 읽을 수있는 곳도 틀립니다. 어떻게하면 pdf를 추가 할 수 있습니까? –
그래서 파일 업로드를 허용하지 않습니다. http://meta.stackexchange.com/q/4637 –