Modification de PDF existants en Java


Je teste Java lib pour éditer un pdf existant mais le problème est qu'un ne peut pas charger mon pdf existant. J'ai le même résultat avec iText et pdfbox, je peux charger le fichier dont les données semblent ici(pdf weigh ko) mais le pdf créé est vide (rien d'affichage).

Je le fais sur un serveur app engine, avec les deux lib, je peux créer un pdf et l'afficher dans mon navigateur avec servlet ou webservice.

Je suis totalement perdu, essayez des tonnes de code mais toujours le même résultat!

IText avec importedPage :

    Document document = new Document();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PdfWriter docWriter = PdfWriter.getInstance(document, baos);
    document.open();

    // Load existing PDF
    PdfReader reader = new PdfReader("WEB-INF/pdf.pdf");
    document.newPage();
    PdfImportedPage page = docWriter.getImportedPage(reader, 1);
    PdfPTable table = new PdfPTable(2);
    table.addCell(Image.getInstance(page));
    document.add(table);

    document.close();
    docWriter.close();

Pdfbox:

     PDDocument document = new PDDocument();
     PDDocument sourceDocument = PDDocument.load("WEB-INF/pdf.pdf");
     PDPage templatePdfPage = (PDPage)sourceDocument.getDocumentCatalog().getAllPages().get(0);
     document.addPage(templatePdfPage);
     document.save(output);
Author: Kingstone59, 2014-08-21

2 answers

Tout d'abord Obtenir le chemin En utilisant ServletContext Servlet et en utilisant PDFBOx lire le fichier pdf et enregistrer le fichier pdf dans le dossier /WEB-INF/savedpdffiles/.

Remarque: Créez le dossier savedpdffiles sous le dossier WEB-INF.

Voir La liste blanche des classes JRE - L'accès d'une application Java App Engine aux classes de la bibliothèque standard Java (Java Runtime Environment, ou JRE) est limité aux classes suivantes: .

Lire et enregistrer un fichier PDF dans Google AppEngine.

Code:

    PrintWriter printWriter = response.getWriter();
    try {
        ServletContext context = request.getSession().getServletContext();
        String pdffiles = context.getRealPath("/WEB-INF/");

        File readPath = new File(pdffiles);
        if (readPath.exists()) {
            String pdfFile = "04-Request-Headers.pdf"; // read this file to save in savedpdffiles folder
            File savedPath = new File(readPath.getAbsolutePath() +"/savedpdffiles/"); // create savedpdffiles folder under WEB-INF folder

            File readFullPath = new File(readPath.getAbsolutePath() + File.separatorChar + pdfFile);
            if (readFullPath.isFile()) {
                if(!savedPath.exists()) {
                    savedPath.createNewFile();// create new pdf file if not exits
                    printWriter.println( savedPath.getName() +" File created in -> "+ savedPath.getAbsolutePath());
                }

                PDDocument document = new PDDocument();
                PDDocument sourceDocument = PDDocument.load(readFullPath.getAbsolutePath()); // read the pdf file by PDDocument
                PDPage templatePdfPage = (PDPage) sourceDocument.getDocumentCatalog().getAllPages().get(0); // only first page is read out of 13 pages and save the first page.
                document.addPage(templatePdfPage);
                document.save(savedPath + "/" + pdfFile);
                document.close();
                sourceDocument.close();
                printWriter.print(pdfFile + " File saved to this location-> "+ savedPath.getAbsolutePath() + File.separatorChar + pdfFile);
            } else {
                printWriter.println(readFullPath.getName() + " File not exits in -> "+ readFullPath.getAbsolutePath());
            }
        } else {
            printWriter.println("Path not exists -> "+ readPath.getAbsolutePath());
        }
    } catch (Exception e) {
        printWriter.print("Type of Error occured while saving the PDF file -> "+ e.getMessage());
        e.printStackTrace();
    }

Vous obtiendrez ci-dessous l'erreur

Caused by:
          java.lang.NoClassDefFoundError: java.awt.Color is a restricted class. Please see the Google  App Engine developer's guide for more details.
    Powered by Jetty://
 0
Author: pudaykiran, 2014-08-27 09:02:48

Je trouve le problème, j'utilise maven pour créer mon application. Maven corrumpt mon pdf en encodant le fichier (en UTF-8 je pense). J'ai trouvé ce parce que j'ai eu .fichier p12 et quand je dois lire ma lib dire que c'était un fichier corrumpt.

Le problème maintenant est d'essayer d'éviter cela mais ne fonctionne pas. (Pour le moment, je remplace le fichier après la construction)

J'essaie d'ajouter ceci dans mon pom.xml:

<resources>
        <resource>
            <directory>src/main/webapp/WEB-INF</directory>
            <filtering>false</filtering>
            <excludes>
                <exclude>**/*.pdf</exclude>
            </excludes>
        </resource>
    </resources>

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <nonFilteredFileExtensions>
                    <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
                </nonFilteredFileExtensions>
            </configuration>
        </plugin>

Et quelque chose était ambigu dans mon pom.xml, je ne fais pas ce qu'il fait:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <archiveClasses>true</archiveClasses>
                <webResources>
                    in order to interpolate version from pom into appengine-web.xml
                    <resource>
                        <directory>${basedir}/src/main/webapp/WEB-INF</directory>
                        <filtering>true</filtering>
                        <targetPath>WEB-INF</targetPath>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
 0
Author: Kingstone59, 2014-08-28 09:25:10