Я пишу веб-приложение на 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();
}
}