import java.io.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

public class productcode {

    public static void main(String[] args) throws Exception {
        if (args.length < 2) {
            System.out.println("Usage: java -cp .;openpdf.jar OpenPDF_FullPipeline_Repro input.pdf output.pdf");
            return;
        }

        String input = args[0];
        String output = args[1];
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        // ======== STEP 1: Apply Watermark using PdfStamper (like applyStamperFunctions) ========
        PdfReader reader = new PdfReader(input);
        PdfStamper stamper = new PdfStamper(reader, baos);
        PdfGState gstate = new PdfGState();
        gstate.setFillOpacity(0.3f);

        int total = reader.getNumberOfPages();
        BaseFont font = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);

        for (int i = 1; i <= total; i++) {
            PdfContentByte over = stamper.getOverContent(i);
            over.saveState();
            over.setGState(gstate);
            over.beginText();
            over.setFontAndSize(font, 60);
            over.showTextAligned(PdfContentByte.ALIGN_CENTER,
                    "TEST WATERMARK",
                    reader.getPageSizeWithRotation(i).getWidth() / 2,
                    reader.getPageSizeWithRotation(i).getHeight() / 2,
                    45);
            over.endText();
            over.restoreState();
        }

        stamper.close();
        reader.close();

        System.out.println("Watermark applied. Proceeding to PdfCopy phase...");

        // ======== STEP 2: Re-read watermarked PDF and copy into new document ========
        PdfReader finalReader = new PdfReader(baos.toByteArray());
        Document document = new Document(finalReader.getPageSizeWithRotation(1));
        PdfCopy copy = new PdfCopy(document, new FileOutputStream(output, false));

        
        copy.setViewerPreferences(PdfWriter.PageModeUseOC | PdfWriter.PageModeUseOutlines | PdfWriter.FitWindow);
        document.open();

        for (int i = 1; i <= finalReader.getNumberOfPages(); i++) {
            document.newPage();
            PdfImportedPage page = copy.getImportedPage(finalReader, i);
            copy.addPage(page);

        }

        document.close();
        finalReader.close();
        System.out.println("Final output PDF created: " + output);
    }
}
