Доступ к странице .pdf, которую я загружаю (используя pdfbox) (и я использую RPG)

Я пытаюсь изменить .pdf, который загружаю с помощью PDFBOX. Я использую RPG и нашел код Java для доступа к странице из загруженного .pdf

PDPage page = (pdpage)pdDoc.getDocumentCatalog().getallPages().get(0)

Другой код, который я видел,

List pages = doc.getDocumentCatalog().getAllPages();
PDPage page = (PDPage)pages.get( i );

У меня проблема с переводом этого кода в RPG.

Код, который у меня есть прямо сейчас, предназначен только для загрузки моего шаблона .pdf, создания каталога документов, создания моего списка и его сохранения (в XLEnvVar я получаю свой путь к классам).

      /free
      XLSEnvVar();
    // Load an existing PDF
    myPath = jstring_new('/tmp/PDFtemplate.pdf');
    File = File_new(myPath);
    myDocument = PDdocument_load(File);
    myCatalog = PDDocumentCatalog_new(myDocument);
    myList = getAllPages(myCatalog);


    // Done with this file, so save it
    myFile = jstring_new('/tmp/PDFBox-demo.pdf');
    PDDocument_save(myDocument:myFile);

    // Close the document object in memory to free all allocated space
    PDDocument_close(myDocument);

    // Done
    *INLR = *On;

  /end-free                      

получить прототип

     D get...
 D                 PR
 D                                     EXTPROC(*JAVA:
 D                                     'java.util.List':
 D                                     'get')              

ОРИГИНАЛЬНЫЙ ПОСТ ВЫШЕ

Я решил опубликовать свою программу PDFBOX, так что здесь, в Интернете, есть еще один пример использования PDFBOX в RPG. Это полностью рабочий пример (он использует сервисные программы моей компании, а SQL — это всего лишь пример оболочки, поэтому, если кто-то будет использовать это, им придется их изменить. Но я объяснил, что делают эти сервисные программы, чтобы вы могли использовать свои собственные компании обслуживают программы или пишут код, чтобы делать то, что делают эти служебные программы). Не стесняйтесь взять это и опубликовать в другом месте, просто оставьте блок «написано». Надеюсь, это поможет всем, кто работает с PDFBOX.

     h/include QCpySrc,HSpecStd

  //*****************************************************************
  // Written By: Phillip Simmons   Date: 05 20, 2013                *
  //             Special thanks to Spencer (co-worker)              *
  //             and dhanuxp (code400 forums) and                   *
  //             http://wiki.midrange.com/index.php/PDFBox          *
  //             for the intial example that I started with.        *
  //                                                                *
  // Purpose: Load a pdf template, modify the template              *
  //          then save the modified document. Using PDFBOX         *                           /     //*****************************************************************

  /Include QCPYSRC,xCommandP

  //Service program to return path on IFS
  /Include QCPYSRC,GETIFSPTHP

  //Service program to return document name
  /Include QCPYSRC,GETIFSNAMP

  //Service program for document to adopt authority of the
  //folder above 
  /Include qcpysrc,ifsadoptp

  //***************************************************************
  // Data structure for SQL statement                             *
  //***************************************************************
 D Rcd             DS                  qualified
 D  EMPLID                             LIKE(EMPLID)
 D  LNAME                        90A   VARYING
 D  ADDR1                              LIKE(ADDR1)
 D  ADDR2                              LIKE(ADDR2)
 D  CSZ                          50A   VARYING

 D                SDS
 D ProgramName             1     10

  //****************************************************************
  // Prototypes for PDFBOX                                         *
  // Full documentation of PDFBox is available at                  *
  // http://pdfbox.apache.org/index.html                           *
  // Api Docs http://pdfbox.apache.org/apidocs/                    *
  //****************************************************************

  /Copy QSYSINC/QRPGLESRC,JNI
  *Classpath  
 D XLSEnvVar       PR                  extpgm('XLSENVVAR')

  *-----------------------------------------------------------------
  * Global Constants

 D DEFAULT_USERSPACE_UNIT_DPI...
 D                 C                   72

  * Page sizes in mm
 D PAGE_SIZE_A0    S                   Like(PDRectangle)
 D PAGE_SIZE_A1    S                   Like(PDRectangle)
 D PAGE_SIZE_A2    S                   Like(PDRectangle)
 D PAGE_SIZE_A3    S                   Like(PDRectangle)
 D PAGE_SIZE_A4    S                   Like(PDRectangle)
 D PAGE_SIZE_A5    S                   Like(PDRectangle)
 D PAGE_SIZE_A6    S                   Like(PDRectangle)
 D PAGE_SIZE_A0_LANDSCAPE...
 D                 S                   Like(PDRectangle)
 D PAGE_SIZE_A1_LANDSCAPE...
 D                 S                   Like(PDRectangle)
 D PAGE_SIZE_A2_LANDSCAPE...
 D                 S                   Like(PDRectangle)
 D PAGE_SIZE_A3_LANDSCAPE...
 D                 S                   Like(PDRectangle)
 D PAGE_SIZE_A4_LANDSCAPE...
 D                 S                   Like(PDRectangle)
 D PAGE_SIZE_A5_LANDSCAPE...
 D                 S                   Like(PDRectangle)
 D PAGE_SIZE_A6_LANDSCAPE...
 D                 S                   Like(PDRectangle)
 D PAGE_WIDTH_A0   C                   841
 D PAGE_HEIGHT_A0  C                   1189
 D PAGE_WIDTH_A1   C                   594
 D PAGE_HEIGHT_A1  C                   841
 D PAGE_WIDTH_A2   C                   420
 D PAGE_HEIGHT_A2  C                   594
 D PAGE_WIDTH_A3   C                   297
 D PAGE_HEIGHT_A3  C                   420
  *210 orginal size
 D PAGE_WIDTH_A4   C                   216
  *297 orginal size
 D PAGE_HEIGHT_A4  C                   279
 D PAGE_WIDTH_A5   C                   148
 D PAGE_HEIGHT_A5  C                   210
 D PAGE_WIDTH_A6   C                   105
 D PAGE_HEIGHT_A6  C                   148

  *American pages slightly different size than ISO standard
  *-----------------------------------------------------------------
  * PDRectangle

 D PDRectangleClass...
 D                 C                   'org.apache.pdfbox.pdmodel.common.PD-
 D                                     Rectangle'
 D PDRectangle     S               O   CLASS(*JAVA:PDRectangleClass)

  * PDRectangle()
 D PDRectangle_new...
 D                 PR                  like(PDRectangle)
 D                                     EXTPROC(*JAVA:
 D                                     PDRectangleClass:
 D                                     *CONSTRUCTOR)
 D width                               like(jfloat) Value
 D height                              like(jfloat) Value

  *-----------------------------------------------------------------
  *PDDocumentCatalog

 D DocumentCatalog...
 D                 S               O   CLASS(*JAVA :
 D                                     PDDocumentCatalogClass)
 D PDDocumentCatalogClass...
 D                 C                   'org.apache.pdfbox.pdmodel.PDDocumen-
 D                                     tCatalog'
 D getDocumentCatalog...
 D                 PR              O   CLASS(*JAVA :
 D                                     PDDocumentCatalogClass)
 D                                     EXTPROC(*JAVA :
 D                                     PDDocumentClass: 'getDocumen+
 D                                     tCatalog' )

  *
 D  getAllPages    PR              O   CLASS(*JAVA : 'java.util.List' )
 D                                     EXTPROC(*JAVA :
 D                                     PDDocumentCatalogClass : 'get+
 D                                     AllPages' )
  *-----------------------------------------------------------------
  *java.lang.String
 D jStringClass...
 D                 C                   'java.lang.String'

 D jstring_new     PR                  like(jString)
 D                                     EXTPROC(*JAVA
 D                                     :jStringClass
 D                                     :*CONSTRUCTOR)
 D create_from                 1024A   Varying const
  *-----------------------------------------------------------------
  *PDDocument
 D PDDocumentClass...
 D                 C                   'org.apache.pdfbox.pdmodel.PDDocumen-
 D                                     t'
 D PDDocument      S               O   CLASS(*JAVA:PDDocumentClass)

  * PDDocument()
 D PDDocument_new...
 D                 PR                  like(PDDocument)
 D                                     EXTPROC(*JAVA:
 D                                     PDDocumentClass:
 D                                     *CONSTRUCTOR)

  * PDDocument.addPage()
 D PDDocument_addPage...
 D                 PR
 D                                     EXTPROC(*JAVA:
 D                                     PDDocumentClass:
 D                                     'addPage')
 D ppage                               like(PDPage)

  *PDDocument.load()
 D PDDocument_load...
 D                 PR                  like(PDDocument)
 D                                     EXTPROC(*JAVA : PDDocumentClass:
 D                                      'load' )
 D                                     STATIC
 D  path                               like(jstring)

 D PDDocument_save...
 D                 PR                  EXTPROC(*JAVA : PDDocumentClass:
 D                                     'save' )
 D  savepath                           like(jstring)
  *
 D  importPage     PR              O   CLASS(*JAVA : 'org.apache.pdfbox.p+
 D                                     dmodel.PDPage' )
 D                                     EXTPROC(*JAVA : 'org.apache.pdfbox+
 D                                     .pdmodel.PDDocument' : 'importPage+
 D                                     ' )
 D* Parameter prototype declaration for Java type: PDPage
 D  PDpage                             like(PDPage)

  * PDDocument.close()
 D PDDocument_close...
 D                 PR
 D                                     EXTPROC(*JAVA:
 D                                     PDDocumentClass:
 D                                     'close')

  *-----------------------------------------------------------------
  * Font Classes
 D PDFontClass     C                   'org.apache.pdfbox.pdmodel.font.PDFo-
 D                                     nt'
 D PDFont          S               O   CLASS(*JAVA:PDFontClass)

  *-----------------------------------------------------------------
  * PDPage

 D PDPageClass     C                   'org.apache.pdfbox.pdmodel.PDPage'
 D PDPage          S               O   CLASS(*JAVA:PDPageClass)

 D  PDPage_get     PR              O   CLASS(*JAVA : 'java.lang.Object' )
 D                                     EXTPROC(*JAVA : 'java.util.List' :
 D                                      'get' )
 D  indexNo                      10I 0 VALUE

  *-----------------------------------------------------------------
  * PDType1Font
 D PDType1FontClass...
 D                 C                   'org.apache.pdfbox.pdmodel.font.PDTy-
 D                                     pe1Font'
 D PDType1Font     S               O   CLASS(*JAVA:PDType1FontClass)

  * PDType1Font()
 D PDType1Font_new...
 D                 PR                  like(PDType1Font)
 D                                     EXTPROC(*JAVA:
 D                                     PDType1FontClass:
 D                                     *CONSTRUCTOR)
 D fontname                            like(jString) Options(*Omit)

  * PDType1Font.getStandardFont
 D PDType1Font_getStandardFont...
 D                 PR                  like(PDType1Font)
 D                                     EXTPROC(*JAVA:
 D                                     PDType1FontClass:
 D                                     'getStandardFont')
 D                                     STATIC
 D fontname                            like(jString)

  *-----------------------------------------------------------------
  * PDPageContentStream

 D PDPageContentStreamClass...
 D                 C                   'org.apache.pdfbox.pdmodel.edit.PDPa-
 D                                     geContentStream'
 D PDPageContentStream...
 D                 S               O   CLASS(*JAVA:
 D                                     PDPageContentStreamClass)

  * PDPageContentStream()
 D PDPageContentStream_new...
 D                 PR                  like(PDPageContentStream)
 D                                     EXTPROC(*JAVA:
 D                                     PDPageContentStreamClass:
 D                                     *CONSTRUCTOR)
 D pdocument                           like(PDDocument)
 D ppage                               like(PDPage)
 D appendcontent                   N   value
 D compress                        N   value

  * PDPageContentStream.beginText()
 D PDPageContentStream_beginText...
 D                 PR
 D                                     EXTPROC(*JAVA:
 D                                     PDPageContentStreamClass:
 D                                     'beginText')

  * PDPageContentStream.setFont()
 D PDPageContentStream_setFont...
 D                 PR
 D                                     EXTPROC(*JAVA:
 D                                     PDPageContentStreamClass:
 D                                     'setFont')
 D font                                like(PDFont)
 D fontSize                            like(jfloat) Value

  * PDPageContentStream.moveTextPositionByAmount()
 D PDPageContentStream_moveTextPositionByAmount...
 D                 PR
 D                                     EXTPROC(*JAVA:
 D                                     PDPageContentStreamClass:
 D                                     'moveTextPositionByAmount')
 D x                                   like(jfloat) Value
 D y                                   like(jfloat) Value

  * PDPageContentStream.drawString()
 D PDPageContentStream_drawString...
 D                 PR
 D                                     EXTPROC(*JAVA:
 D                                     PDPageContentStreamClass:
 D                                     'drawString')
 D text                                like(jstring)

  * PDPageContentStream.endText()
 D PDPageContentStream_endText...
 D                 PR
 D                                     EXTPROC(*JAVA:
 D                                     PDPageContentStreamClass:
 D                                     'endText')

  * PDPageContentStream.close()
 D PDPageContentStream_close...
 D                 PR
 D                                     EXTPROC(*JAVA:
 D                                     PDPageContentStreamClass:
 D                                     'close')

  *-----------------------------------------------------------------
  * java.awt.Color

 D jColorClass...
 D                 C                   'java.awt.Color'

 D jColor          S               O   CLASS(*JAVA:
 D                                     jColorClass)

  // new Color(int, int, int)
 D jColor_new_fromIntRGB...
 D                 PR                  like(jColor)
 D                                     EXTPROC(*JAVA
 D                                     :jColorClass
 D                                     :*CONSTRUCTOR)
 D R                                   like(jint) value
 D G                                   like(jint) value
 D B                                   like(jint) value

  * PDPageContentStream.setNonStrokingColor(java.awt.Color color)
 D PDPageContentStream_setNonStrokingColor...
 D                 PR
 D                                     EXTPROC(*JAVA:
 D                                     PDPageContentStreamClass:
 D                                     'setNonStrokingColor')
 D color                               like(jColor)

  *-----------------------------------------------------------------
  * Utilities

 D mmToUnits       PR                  Like(jfloat)
 D  pmm                                Like(jfloat) Value

 D createPageSizes...
 D                 PR

  *-----------------------------------------------------------------
  *PDFBOX variables
 D myFontName      S                   like(jstring)
 D myFont          S                   like(PDType1Font)
 D myPageContent   S                   like(PDPageContentStream)
 D myColor         S                   like(jColor)
 D sourceDoc       S                   like(PDDocument)
 D targetDoc       S                   like(PDDocument)
 D DocumentCat     S                   like(DocumentCatalog)
 D pdf_path1       S                   like(jstring)
 D pdf_save        S                   like(jstring)
 D myPage          S                   like(PDPage)
 D newPage         S                   like(PDPage)
 D myAllPages      S               O   CLASS(*JAVA : 'java.util.List' )
 D importPageRet   S                   like(PDPage)
  *RPG variables
 D DocName         S            255A   VARYING
 D pageNumber      S             10I 0
 D Tdate           S               d
 D Cdate           S             10    VARYING
 D tempsave        S            150    VARYING
 D tempload        S            150    VARYING
 D Directorys      S            150    VARYING
 D Directoryl      S            150    VARYING
 D CDirectory      S            150    VARYING
 D loadstring      S            150    VARYING
 D checkstring     S            150    VARYING
 D SqlStm          S           1000A   VARYING
 D Q               S              1A   INZ(x'7D')
 D Cmds            S           1500A   Varying
 D Cmdl            S           1500A   Varying
 D*--------------------------------------------------
 D* Procedure name: addText
 D* Purpose:
 D* Returns:
 D* Parameter:      myText
 D*--------------------------------------------------
 D addText         PR
 D  myText                     5000A   VARYING CONST
 D indent                        10I 0 CONST
 D offset                        10I 0 CONST
  *
 D myString        S                   like(jstring)


  /free
   Tdate = %Date();
   Cdate = %char(Tdate:*usa/);

    //The page of the loaded pdf that I am going to want to retrieve
    pageNumber = 0;

    //Contains the classpath
    XLSENVVAR();

    //GETIFSPTH AND GETIFSNAM are service programs that my company uses
    //to get the path for a document. Further down in PDF_path1(loadstring)
    //you can pass a hardcoded string ex PDF_path1('/tmp/demodoc.pdf');

    // Get the requested template file
    DocName = %Trim(GETIFSPTH(ProgramName:1)) +
              %Trim(GETIFSNAM(ProgramName:1));

    //Directory the file will be moved into
    Directoryl = %Trim(GETIFSPTH(ProgramName:2));

    //getting path to load the pdf document
    checkstring = %Trim(GETIFSPTH(ProgramName:3)) +
                  %Trim(GETIFSNAM(ProgramName:3));

    //Check to see if template already exists if it does dlt it
    //this is needed because later when I move the document to its final
    //destination if the document to be moved already exists the move will
    //fail.  This will cause a modified template to be left behind and when
    //the program is ran later the earlier cpy obj will fail and I will
    //load an already modified templete.
    CallP(E) xCommand('DEL OBJLNK('+Q+%Trim(checkstring)+Q+')');

    //String to pass to xcommand()
    Cmdl = 'CPY OBJ(' +Q + %trim(DocName) +Q + ')' +
          ' TODIR(' +Q + %trim(Directoryl) +Q + ')';
    xcommand(Cmdl);

    //Create a blank pdf document.  This will be the page to be modified.
    targetDoc = PDDocument_new();

    //getting path to load the pdf document
    loadstring = %Trim(GETIFSPTH(ProgramName:3)) +
                 %Trim(GETIFSNAM(ProgramName:3));

    //The string that holds the path for where the pdf template is
    pdf_path1 = jstring_new(loadstring);

    //Load the pdf document
    sourceDoc = PDDocument_load(pdf_path1);

    //Get the document catalog
    DocumentCat = getDocumentCatalog(sourceDoc);

    //Get the list of pages
    myAllPages = getAllPages(DocumentCat);

    //Get the specific page I want
    myPage = PDPage_get(myAllPages:pageNumber);

    sqlstm = 'SELECT EMPLID,LNAME, ADDR1' +
       ' ADDR2, CSZ'
       ' from empmst';

   Exec SQL
      Prepare S1 From :SqlStm;
   Exec SQL
      Declare Rcd Cursor for S1;
   Exec SQL
      Open Rcd;
   Exec SQL
      Fetch Rcd into :Rcd;
   Dow SQLCOD = 0;

    //Import and copy to a new page.  This is the page to be used
    //in the content stream.
    importpageret = importpage(targetdoc:myPage);

    // Create a content stream so we can add content to the page
    // Modifying an existing page so append is *ON
    // Compression is *Off
    myPageContent = PDPageContentStream_new(targetdoc:importpageret:
                    *ON:*Off);

    //Adding text to preloaded pdf
    addtext(Rcd.EMPLID :23 :240);
    addtext(Rcd.LNAME :23 :231);
    addtext(Rcd.ADDR1 :23 : 227);
    addtext(Rcd.ADDR2 :23 : 223);
    addtext(Rcd.CSZ :23 : 219);
    addtext(Cdate :180 : 240);

   EXEC SQL
      Fetch Rcd into :Rcd;
   ENDDO;

    //Temparaly saving to /tmp then will move with mov command
    tempsave = %Trim(GETIFSPTH(ProgramName:3)) +
               %Trim(GETIFSNAM(ProgramName:3));

    //The string that holds the path for where the pdf will be saved
    pdf_save     = jstring_new(tempsave);

    //Done with the file, so save it
    PDDocument_save(targetDoc : pdf_save);

    // Close the document object in memory to free all allocated space
    PDDocument_close(sourceDoc);
    PDDocument_close(targetDoc);

    //Create the directory that the file will be moved to
    CDirectory = %Trim(GETIFSPTH(ProgramName:4))+
                 %char(%subdt(%date():*YEARS));
    xcommand('CRTDIR DIR(' +Q + CDIRECTORY +Q +')');

    //retrieve the path the file will be saved to
    Directorys = %Trim(GETIFSPTH(ProgramName:4)) +
                 %char(%subdt(%date():*YEARS)) + '/' +
                 %Trim(GETIFSNAM(ProgramName:4));

    //move the file to the correct directory
    Cmds = 'MOV OBJ(' +Q + tempsave +Q + ')' +
          ' TOOBJ(' +Q + %trim(Directorys)+ Q + ')';
    xcommand(Cmds);

    //Adopt the auth of the folder
    ifsadopt(Directorys);

    Exec SQL
      Close Rcd;
    *Inlr = *On;
  /end-free

  * mmToUnits

 P mmToUnits       B
 D                 Pi                  Like(jfloat)
 D pmm                                 value like(jfloat)

 D funits          S                   Like(jfloat)
  /free

    funits = 1 / (25.4) *
             DEFAULT_USERSPACE_UNIT_DPI *
             pmm;

    return funits;

  /end-free
 P mmToUnits       E

  * creatPageSizes

 P createPageSizes...
 P                 B
 D                 Pi
  /free

    PAGE_SIZE_A0 = PDRectangle_new(mmToUnits(PAGE_WIDTH_A0):
                                   mmToUnits(PAGE_HEIGHT_A0));

    PAGE_SIZE_A1 = PDRectangle_new(mmToUnits(PAGE_WIDTH_A1):
                                   mmToUnits(PAGE_HEIGHT_A1));

    PAGE_SIZE_A2 = PDRectangle_new(mmToUnits(PAGE_WIDTH_A2):
                                   mmToUnits(PAGE_HEIGHT_A2));

    PAGE_SIZE_A3 = PDRectangle_new(mmToUnits(PAGE_WIDTH_A3):
                                   mmToUnits(PAGE_HEIGHT_A3));

    PAGE_SIZE_A4 = PDRectangle_new(mmToUnits(PAGE_WIDTH_A4):
                                   mmToUnits(PAGE_HEIGHT_A4));

    PAGE_SIZE_A5 = PDRectangle_new(mmToUnits(PAGE_WIDTH_A5):
                                   mmToUnits(PAGE_HEIGHT_A5));

    PAGE_SIZE_A6 = PDRectangle_new(mmToUnits(PAGE_WIDTH_A6):
                                   mmToUnits(PAGE_HEIGHT_A6));

    PAGE_SIZE_A0_LANDSCAPE = PDRectangle_new(mmToUnits(PAGE_HEIGHT_A0):
                                   mmToUnits(PAGE_WIDTH_A0));

    PAGE_SIZE_A1_LANDSCAPE = PDRectangle_new(mmToUnits(PAGE_HEIGHT_A1):
                                   mmToUnits(PAGE_WIDTH_A1));

    PAGE_SIZE_A2_LANDSCAPE = PDRectangle_new(mmToUnits(PAGE_HEIGHT_A2):
                                   mmToUnits(PAGE_WIDTH_A2));

    PAGE_SIZE_A3_LANDSCAPE = PDRectangle_new(mmToUnits(PAGE_HEIGHT_A3):
                                   mmToUnits(PAGE_WIDTH_A3));

    PAGE_SIZE_A4_LANDSCAPE = PDRectangle_new(mmToUnits(PAGE_HEIGHT_A4):
                                   mmToUnits(PAGE_WIDTH_A4));

    PAGE_SIZE_A5_LANDSCAPE = PDRectangle_new(mmToUnits(PAGE_HEIGHT_A5):
                                   mmToUnits(PAGE_WIDTH_A5));

    PAGE_SIZE_A6_LANDSCAPE = PDRectangle_new(mmToUnits(PAGE_HEIGHT_A6):
                                   mmToUnits(PAGE_WIDTH_A6));

    return;

  /end-free
 P                 E
  *
  *
 P*--------------------------------------------------
 P* Procedure name: addText
 P* Purpose:        Write text to a PDPage
 P* Returns:
 P* Parameter:      myText
 P*--------------------------------------------------
 P addText         B
 D addText         PI
 D  myText                     5000A   VARYING CONST
 D indent                        10I 0 CONST
 D offset                        10I 0 CONST
  *
 D myString        S                   like(jstring)


  /FREE

    // Set font type
    myFontName = jstring_new('Times-Roman');
    myFont = PDType1Font_getStandardFont(myFontName);
    PDPageContentStream_setFont(myPageContent:myFont:10);

    // Set the color of the font to add
    // This isn't needed if writing to a blank page but since
    // adding text to a loaded page need to set the color of the text.
    myColor = jColor_new_fromIntRGB(0:0:0);
    PDPageContentStream_setNonStrokingColor(myPageContent:myColor);

    // Prepare to write text to the content stream
    PDPageContentStream_beginText(myPageContent);

    // Move the cursor possition,indent is x mm from left of page
    // offset x mm from bottom of page.
    PDPageContentStream_moveTextPositionByAmount(myPageContent:
    mmtounits(indent):mmtounits(offset));

    // Create the text string we want to write
    myString = jstring_new(myText);

    // Write the string to the content stream
    PDPageContentStream_drawString(myPageContent:myString);

    // We are done writing text to this content stream
    PDPageContentStream_endText(myPageContent);

    //We are done with this content stream
    PDPageContentStream_close(myPageContent);

  /END-FREE
 P addText         E 

Решил добавить пару комментариев после прочтения кода. Я должен сделать новую папку для каждого года. Это то, что делает crtdir. Если каталог уже существует, содержимое в уже созданном каталоге безопасно, crtdir не перезаписывает каталог. Причина, по которой я загружаю шаблон из одного места в /tmp, а затем сохраняю его в /tmp перед повторным перемещением, заключается в том, что когда я работал с PDFBOX, jstring_new(' ') не превышал 30 символов (включая / и пробелы и . ) . поэтому myString = jstring_new('/tmp/2013/myreportnamethatistoolong.pdf') эта строка имеет длину 39 символов, и эта строка будет усечена. olong.pdf будет потерян, когда я создам строку. Я могу создать строку с кодом rpg и передать эту строку в jString_new() длиной более 30 символов, и она работает.


person user2363044    schedule 08.05.2013    source источник
comment
Надеюсь, это полностью объяснено для всех. Возможно, я слишком много объяснил некоторые аспекты, но как программист, плохо знакомый с языком и просто новичок в программировании на профессиональном уровне, будут разделы, которые я не понимаю, потому что все знают, что делает код, поэтому попытался объяснить достаточно, чтобы даже новый человек можно увидеть метод за безумием. Если у кого-то есть вопросы, задавайте, постараюсь ответить. удалил некоторые из моих исходных сообщений, чтобы сделать редактирование подходящим, но ничего важного   -  person user2363044    schedule 28.05.2013


Ответы (1)


Вы хотите, чтобы ваш List.get() возвращал org.apache.pdfbox.pdmodel.PDPage RPG строго типизирована, поэтому мы не можем выполнять кастинг так же, как Java. Вместо этого мы создаем прототип, чтобы вернуть объект, которым мы хотим манипулировать. В соответствии с этим вы можете в конечном итоге использовать get() для извлечения нескольких различных типов элементов списка. РПГ тоже не перегружает. Что бы я сделал, так это создал бы отдельный прототип get() для каждого объекта, с которым я буду работать. Так что у меня были бы getPage() и getThread() и так далее. Каждый из них будет "java.util.List:get", но будет возвращать другой тип объекта.

Список ролевых игр на сайте www.midrange.com — еще один хороший источник помощи по ролевым играм.

person Buck Calabro    schedule 08.05.2013