I'm using iText in my java program for editing an existing pdf.The generated pdf could not open and it shows pdf header signature not found error.I'm using both my input and output file in a same name.
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);
}
In My case PDF sample file was corrupted. upload new file it will works.
Then try at first renaming the input file to .bak, and reading the .bak, and writing the .pdf. That could give a clue whether the error is with reading or writing.
Itext is not a single API, but several ones, mixed together. Quite hard sometimes. I did:
Close both the
PdfReader
andFileInputStream
.Close both
Document
andPdfWriter
.You should use
PdfCopy
instead ofPdfWriter.getInstance
, since it fails to update the PDF object references otherwise.Furthermore instead of adding an
Image
to the document, you can utilize thePdfCopy.addPage
method, which accepts aPdfImportedPage
as parameter.I had the same error and I just changed my PdfReader from reading InputStreams to read Strings. So, it works perfectly with:
}
*Originally I took this code from http://www.mindfiresolutions.com/Java-Merging-multiple-PDFs-into-a-single-PDF-using-iText-671.php
You may be importing from an empty source, or a invalid pdf file, in my case pdfCopy dont work, so here is the code I used.
...
This should work.