Как пометить заголовки в iText 7 - PullRequest
1 голос
/ 22 октября 2019

Я пишу веб-приложение на Java для создания квитанций кредитных карт из базы данных. Хотя я могу успешно создать документ с нужным макетом, заголовок не помечен должным образом. Я использую .setTagged () и думаю, что я использую только высокоуровневые объекты iText 7. Я попытался с помощью TreePointers, установки ролей и canvas.enableAutoTagging ().

    FileOutputStream outputSteam = new FileOutputStream(dest);
    WriterProperties writerProperties = new WriterProperties();
    writerProperties.addXmpMetadata();
    PdfWriter writer = new PdfWriter(dest);
    PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest, new WriterProperties().addUAXmpMetadata().setPdfVersion(PdfVersion.PDF_1_7)));
    pdfDoc.setTagged();
    pdfDoc.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true));
    pdfDoc.getCatalog().setLang(new PdfString("en-US"));
    PdfDocumentInfo info = pdfDoc.getDocumentInfo();
    info.setTitle("Title Search");

    Document document = new Document(pdfDoc);

    document.setMargins(180, 36, 36, 36);

    PdfFont font = PdfFontFactory.createFont(FONT, PdfEncodings.WINANSI, true);

    //Query 1
    String bodyText;
    String bodyText2;
    String buyer;
    String decal;
    String fileNumber;
    String letterDate;
    String make;
    String sendToAddress;
    String sendToName;
    String serialNumbers;

    try {

        Statement stmt = conn.createStatement();
        {
            String query = "select FROM_ADDRESS,\n"
                    + "       SEND_TO_NAME,\n"
                    + "       SEND_TO_ADDRESS,\n"
                    + "       to_char( DATE_CREATED, 'fmMon DD, YYYY' ) as LETTER_DATE,       \n"
                    + "       REFERENCE_TEXT as FILE_NUMBER,\n"
                    + "       LICENSE_TYPE as DECAL,\n"
                    + "       LETTER_DETAILS as BUYER,\n"
                    + "       SUBJECT as SERIAL_NUMBERS,\n"
                    + "       LICENSE_NUMBER as MAKE,\n"
                    + "       BODY_TEXT,\n"
                    + "       BODY_TEXT2\n"
                    + " from LETTERS where id = '" + letterID + "'";

                    ResultSet rset = stmt.executeQuery(query);

                    while (rset.next()) {

                        bodyText = rset.getString("Body_Text");
                        if (bodyText == null) {
                            bodyText = "";
                        }
                        bodyText2 = rset.getString("Body_Text2");
                        if (bodyText2 == null) {
                            bodyText2 = "";
                        }
                        buyer = rset.getString("Buyer");
                        if (buyer == null) {
                            buyer = "";
                        }
                        decal = rset.getString("Decal");
                        if (decal == null) {
                            decal = "";
                        }
                        fileNumber = rset.getString("File_Number");
                        if (fileNumber == null) {
                            fileNumber = "";
                        }
                        make = rset.getString("Make");
                        if (make == null) {
                            make = "";
                        }
                        letterDate = rset.getString("Letter_Date");
                        if (letterDate == null) {
                            letterDate = "";
                        }
                        sendToName = rset.getString("Send_To_Name");
                        if (sendToName == null) {
                            sendToName = "";
                        }
                        sendToAddress = rset.getString("Send_To_Address");
                        if (sendToAddress == null) {
                            sendToAddress = "";
                        }
                        serialNumbers = rset.getString("Serial_Numbers");
                        if (serialNumbers == null) {
                            serialNumbers = "";
                        }

                        pdfDoc.addEventHandler(PdfDocumentEvent.START_PAGE,
                                new Header(letterDate));
                        Paragraph p2 = new Paragraph();
                        Text t3 = new Text(sendToName + "\n" + sendToAddress);
                        t3.setFont(font)
                                .setFontSize(12);
                        p2.add(t3);
                        document.add(p2);

                        Table table2 = new Table(5).useAllAvailableWidth()
                                .setFont(font)
                                .setFontSize(12);
                        table2.getAccessibilityProperties().addAttributes(new PdfStructureAttributes("Table").addTextAttribute("Summary", "Title information."));
                        Cell cell4 = new Cell(1, 1).add(new Paragraph("File Number"));
                        cell4.setBold();
                        Cell cell5 = new Cell(1, 1).add(new Paragraph("Decal"));
                        cell5.setBold();
                        Cell cell6 = new Cell(1, 1).add(new Paragraph("Buyer"));
                        cell6.setBold();
                        Cell cell7 = new Cell(1, 1).add(new Paragraph("Serial Numbers"));
                        cell7.setBold();
                        Cell cell8 = new Cell(1, 1).add(new Paragraph("Make"));
                        cell8.setBold();
                        table2.addHeaderCell(cell4);
                        table2.addHeaderCell(cell5);
                        table2.addHeaderCell(cell6);
                        table2.addHeaderCell(cell7);
                        table2.addHeaderCell(cell8);
                        table2.addCell(fileNumber);
                        table2.addCell(decal);
                        table2.addCell(buyer);
                        table2.addCell(serialNumbers);
                        table2.addCell(make);
                        document.add(table2);

                        Paragraph p3 = new Paragraph(bodyText);
                        p3.setFont(font)
                                .setFontSize(12);
                        document.add(p3);

                        document.add(table2);

                        Paragraph p4 = new Paragraph(bodyText2);
                        p4.setFont(font)
                                .setFontSize(12);
                        document.add(p4);

                        Paragraph p5 = new Paragraph("Title Search");
                        p5.setFont(font)
                                .setFontSize(12)
                                .setBold()
                                .setTextAlignment(TextAlignment.CENTER);
                        document.add(p5);

                        Paragraph p6 = new Paragraph(letterDate);
                        p6.setFont(font)
                                .setFontSize(12)
                                .setTextAlignment(TextAlignment.CENTER);
                        document.add(p6);

                    }
                        document.close();

        }

    } catch (SQLException e) {
        e.printStackTrace();
        String error3 = e.getMessage();

    }

}

protected class Header implements IEventHandler {

    String letterDate;

    public Header(String letterDate) {
        this.letterDate = letterDate;
    }

    @Override
    public void handleEvent(Event event) {
        PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
        PdfDocument pdf = docEvent.getDocument();
        pdf.setTagged();
        PdfPage page = docEvent.getPage();
        Rectangle pageSize = page.getPageSize();
        PdfCanvas pdfCanvas = new PdfCanvas(
                page.getLastContentStream(), page.getResources(), pdf);
        Canvas canvas = new Canvas(pdfCanvas, pdf, pageSize);

        PdfFont font = null;
        try {
            font = PdfFontFactory.createFont(FONT, PdfEncodings.WINANSI, true);
        } catch (IOException ex) {
            Logger.getLogger(RTEscrowTitleSearch.class.getName()).log(Level.SEVERE, null, ex);
        }
        Paragraph p = new Paragraph();
        p.setFont(font);
        p.setFontSize(8);
        p.setBold();
        p.setPaddingLeft(36);
        p.setPaddingTop(5);

        Text t1 = new Text("STATE OF CALIFORNIA - BUSINESS, CONSUMER SERVICES, AND HOUSING AGENCY                                             ");
        t1.setTextAlignment(TextAlignment.LEFT);
        p.add(t1);

        Text t2 = new Text("Gavin Newsom, Governor");
        t2.setTextAlignment(TextAlignment.RIGHT);
        p.add(t2);
        canvas.add(p);
        SolidLine line = new SolidLine(1f);
        line.setColor(BLACK);
        LineSeparator ls = new LineSeparator(line);

        canvas.add(ls);
        Image i = null;
        try {
            i = new Image(ImageDataFactory.create(LOGO));
        } catch (MalformedURLException ex) {
            Logger.getLogger(RTEscrowTitleSearch.class.getName()).log(Level.SEVERE, null, ex);
        }
        i.getAccessibilityProperties().setAlternateDescription("HCD Logo");
        Table table = new Table(3).useAllAvailableWidth()
                .setFont(font)
                .setFontSize(8)
                .setBold();
        table.getAccessibilityProperties().addAttributes(new PdfStructureAttributes("Table").addTextAttribute("Summary", "Customer information."));
        Cell cell1 = new Cell(1, 1).add(new Paragraph("DEPARTMENT OF HOUSING AND COMMUNITY DEVELOPMENT" + "\n" + "DIVISION OF CODES AND STANDARDS" + "\n" + "9342 Tech Center Dr, Suite 550" + "\n" + "Sacramento, CA 95826-2581" + "\n" + "(916) 255-2501" + "\n" + letterDate));
        cell1.setBorder(Border.NO_BORDER);
        cell1.setPaddingLeft(36);
        table.addHeaderCell(cell1);
        Cell cell2 = new Cell(1, 1).add(new Paragraph("                    "));
        cell2.setBorder(Border.NO_BORDER);
        table.addHeaderCell(cell2);
        Cell cell3 = new Cell().add(i);
        cell3.setBorder(Border.NO_BORDER);
        table.addHeaderCell(cell3).setBorder(Border.NO_BORDER);
        canvas.add(table);
        canvas.close();

    }
}
...