Я хочу создать PDF-документ, используя Glen K. Менеджер компоновки Pdf Петерсона, но я застрял при создании таблицы

#java #swing #pdfbox

#java #swing #pdfbox

Вопрос:

Я решил использовать менеджер компоновки Pdf от Glen K. Peterson, доступный на GitHub (https://github.com/GlenKPeterson/PdfLayoutManager ) чтобы создавать PDF-документы с помощью моего приложения, я импортировал исходные файлы и pom.xml зависимости и все такое, все работает просто отлично. Проблема в том, что я пытаюсь создать таблицу в одном из документов, которые я хочу сгенерировать, с помощью нажатия кнопки. Я понятия не имею, как извлечь (использовать) TableBuilder, поскольку я получаю сообщение об ошибке внутри моей IDE JDeveloper, что класс имеет частный доступ.

Вот мой код:

 private void jBtnSalvareVerMetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnSalvareVerMetActionPerformed
    // TODO add your handling code here:
    PDDocument document = new PDDocument();
    try {
        PDPage page = new PDPage();
        document.addPage(page);
        PDFont font = PDType1Font.COURIER;
        PDPageContentStream contents = new PDPageContentStream(document, page);
        contents.beginText();
        contents.setFont(font, 14);
        contents.newLineAtOffset(50, 500);
        Coord coordinate = new Coord(10, 700);
        PdfLayoutMgr pageMgr = PdfLayoutMgr.newRgbPageMgr();
        LogicalPage locatieTabel = pageMgr.logicalPageStart();
        TableBuilder tabel = new TableBuilder(locatieTabel, coordinate); // Getting the error at this point
        contents.newLineAtOffset(10, 700);
        contents.showText(tabel.toString());
        contents.endText();
        contents.close();
    } catch (IOException ex) {
        java.util.logging.Logger.getLogger(MeniuTaburi.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } finally {
        try {
            document.close();
        } catch (IOException ex) {
            java.util.logging.Logger.getLogger(MeniuTaburi.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
    }
    jLabelAverstismenteVerMet.setText("<html><center>Datele au fost salvate cu succes!</center></html>");
}//GEN-LAST:event_jBtnSalvareVerMetActionPerformed
 

Я думал об изменении типа разрешения доступа с частного на общедоступный для TableBuilder, но я не думаю, что это так, как это должно работать…
Есть ли какой-либо другой способ, я могу создать нужную мне таблицу, не прибегая к изменению модификатора доступа внутри класса TableBuilder??

Комментарии:

1. Пожалуйста, поделитесь точным сообщением об ошибке и точным местоположением, для которого оно указано.

2. Ошибка (3083,34): TableBuilder(com.planbase.pdf.layoutmanager. LogicalPage,com.planbase.pdf.layoutmanager. У Coord) есть частный доступ в com.planbase.pdf.layoutmanager. TableBuilder C:OracleMiddlewareOracle_HomejdevelopermyworkmyworkDigitalizareLaboratorMetrologieDigitalizareLaboratorMetrologie.jws C:OracleMiddlewareOracle_HomejdevelopermyworkmyworkDigitalizareLaboratorMetrologieprojectproject.jpr /C:/Oracle/Middleware/Oracle_Home/jdeveloper/mywork/mywork/DigitalizareLaboratorMetrologie/project/src/main/java/Components/Events/project/MeniuTaburi.java (3083,34)

Ответ №1:

Вы пытаетесь использовать

 TableBuilder tabel = new TableBuilder(locatieTabel, coordinate); // Getting the error at this point
 

Но этот конструктор является частным

     private TableBuilder(LogicalPage lp, Coord tl) {
        logicalPage = lp; topLeft = tl;
    }
 

Т.е. Вы не должны его использовать. К сожалению, также нет JavaDoc, указывающего, что вы должны использовать вместо этого. Но, взглянув на TableBuilder исходный код немного дальше этого конструктора, вы сразу же обнаружите следующее:

     public static TableBuilder of(LogicalPage lp, Coord tl) {
        return new TableBuilder(lp, tl);
    }
 

Таким образом, вместо прямого вызова конструктора вы должны использовать этот фабричный метод:

 TableBuilder tabel = TableBuilder.of(locatieTabel, coordinate);
 

Комментарии:

1. Да, это помогло! Спасибо! =)