You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2017/07/21 17:10:44 UTC
svn commit: r1802615 - in /pdfbox/trunk/pdfbox/src/test:
java/org/apache/pdfbox/pdmodel/ resources/org/apache/pdfbox/pdfparser/
Author: tilman
Date: Fri Jul 21 17:10:44 2017
New Revision: 1802615
URL: http://svn.apache.org/viewvc?rev=1802615&view=rev
Log:
PDFBOX-3639: replace inactive test with rudimentary but active test
Added:
pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/SimpleForm2Fields.pdf (with props)
pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/nocatalog.fdf
pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/withcatalog.fdf
Modified:
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java
Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java?rev=1802615&r1=1802614&r2=1802615&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java Fri Jul 21 17:10:44 2017
@@ -16,280 +16,60 @@
*/
package org.apache.pdfbox.pdmodel;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
+import java.io.PrintWriter;
+import java.net.URISyntaxException;
import java.util.List;
-import junit.framework.Test;
import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import org.apache.pdfbox.contentstream.PDContentStream;
-import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.cos.COSString;
-import org.apache.pdfbox.pdfparser.PDFStreamParser;
import org.apache.pdfbox.pdmodel.fdf.FDFDocument;
-import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
-import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceEntry;
-import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream;
+import org.apache.pdfbox.pdmodel.fdf.FDFField;
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
-import org.apache.pdfbox.pdmodel.interactive.form.PDField;
-import org.apache.pdfbox.pdmodel.interactive.form.PDRadioButton;
-import org.apache.pdfbox.pdmodel.interactive.form.PDTerminalField;
-import org.apache.pdfbox.pdmodel.interactive.form.PDTextField;
/**
* This will test the FDF algorithms in PDFBox.
*
* @author Ben Litchfield
+ * @author Tilman Hausherr
*
*/
public class TestFDF extends TestCase
{
-
- private static final String PDF_FDEB = "target/test-input-ext/fdeb.pdf";
- private static final String PDF_LOTSOFFIELDS = "target/test-input-ext/pdf_with_lots_of_fields.pdf";
- private static final String PDF_FREEDOM = "target/test-input-ext/FreedomExpressions.pdf";
- private static final String FDF_FREEDOM = "target/test-input-ext/FreedomExpressions.fdf";
-
- /**
- * Constructor.
- *
- * @param name The name of the test to run.
- */
- public TestFDF( String name )
- {
- super( name );
- }
-
- /**
- * This will get the suite of test that this class holds.
- *
- * @return All of the tests that this class holds.
- */
- public static Test suite()
- {
- return new TestSuite( TestFDF.class );
- }
-
- /**
- * infamous main method.
- *
- * @param args The command line arguments.
- */
- public static void main( String[] args )
- {
- String[] arg = {TestFDF.class.getName() };
- junit.textui.TestRunner.main( arg );
- }
-
- /**
- * This will test some simple field setting.
- *
- * @throws Exception If there is an exception while encrypting.
- */
- public void testFDFfdeb() throws Exception
- {
-
- File filePDF = new File(PDF_FDEB);
- if ( filePDF.exists() )
- {
- PDDocument fdeb = null;
- try
- {
- fdeb = PDDocument.load( filePDF );
- PDAcroForm form = fdeb.getDocumentCatalog().getAcroForm();
- PDTextField field = (PDTextField)form.getField( "f67_1" );
- field.setValue( "2" );
-
- String expected =
- "/Tx BMC " +
- "BT " +
- "/Helv 9 Tf " +
- " 0 g " +
- " 2 1.985585 Td " +
- "2.07698 0 Td " +
- "(2) Tj " +
- "ET " +
- "EMC";
-
- testContentStreams( fdeb, field, expected );
- }
- finally
- {
- if( fdeb != null )
- {
- fdeb.close();
- }
- }
- }
- }
-
- /**
- * This will test a pdf with lots of fields.
- *
- * @throws Exception If there is an exception while encrypting.
- */
- public void testFDFPDFWithLotsOfFields() throws Exception
- {
- File filePDF = new File(PDF_LOTSOFFIELDS);
- if ( filePDF.exists() )
- {
- PDDocument fdeb = null;
- try
- {
- fdeb = PDDocument.load( filePDF );
- PDAcroForm form = fdeb.getDocumentCatalog().getAcroForm();
- PDTextField feld2 = (PDTextField)form.getField( "Feld.2" );
- feld2.setValue( "Benjamin" );
-
- String expected =
- "1 1 0.8000000119 rg " +
- " 0 0 127.5 19.8299999237 re " +
- " f " +
- " 0 0 0 RG " +
- " 1 w " +
- " 0.5 0.5 126.5 18.8299999237 re " +
- " S " +
- " 0.5 g " +
- " 1 1 m " +
- " 1 18.8299999237 l " +
- " 126.5 18.8299999237 l " +
- " 125.5 17.8299999237 l " +
- " 2 17.8299999237 l " +
- " 2 2 l " +
- " 1 1 l " +
- " f " +
- " 0.75 g " +
- " 1 1 m " +
- " 126.5 1 l " +
- " 126.5 18.8299999237 l " +
- " 125.5 17.8299999237 l " +
- " 125.5 2 l " +
- " 2 2 l " +
- " 1 1 l " +
- " f " +
- " /Tx BMC " +
- "BT " +
- "/Helv 14 Tf " +
- " 0 0 0 rg " +
- " 4 4.721 Td " +
- "(Benjamin) Tj " +
- "ET " +
- "EMC";
-
- testContentStreams( fdeb, feld2, expected );
-
- PDRadioButton feld3 = (PDRadioButton)form.getField( "Feld.3" );
- feld3.setValue("RB1");
- assertEquals( "RB1", feld3.getValue());
- }
- finally
- {
- if( fdeb != null )
- {
- fdeb.close();
- }
- }
- }
- }
-
/**
- * This will test the Freedom pdf.
+ * Test load two simple fdf files with two fields. One of the files does not have a
+ * /Type/Catalog entry, which isn't required anyway (PDFBOX-3639).
*
- * @throws Exception If there is an error while testing.
+ * @throws URISyntaxException
+ * @throws IOException
*/
- public void testFDFFreedomExpressions() throws Exception
+ public void testLoad2() throws URISyntaxException, IOException
{
- File filePDF = new File(PDF_FREEDOM);
- File fileFDF = new File(FDF_FREEDOM);
- if (filePDF.exists() && fileFDF.exists())
- {
- PDDocument freedom = null;
- FDFDocument fdf = null;
- try
- {
- freedom = PDDocument.load( filePDF );
- fdf = FDFDocument.load( fileFDF );
- PDAcroForm form = freedom.getDocumentCatalog().getAcroForm();
- form.importFDF( fdf );
-
- PDTextField field2 = (PDTextField)form.getField( "eeFirstName" );
- List<PDAnnotationWidget> kids = field2.getWidgets();
- PDAnnotationWidget firstKid = kids.get( 0 );
- PDAnnotationWidget secondKid = kids.get( 1 );
- testContentStreamContains( freedom, firstKid, "Steve" );
- testContentStreamContains( freedom, secondKid, "Steve" );
-
- //the appearance stream is suppose to be null because there
- //is an F action in the AA dictionary that populates that field.
- PDField totalAmt = form.getField( "eeSuppTotalAmt" );
- assertTrue( totalAmt.getCOSObject().getDictionaryObject( COSName.AP ) == null );
-
+ checkFields("/org/apache/pdfbox/pdfparser/withcatalog.fdf");
+ checkFields("/org/apache/pdfbox/pdfparser/nocatalog.fdf");
+ }
+
+ private void checkFields(String name) throws IOException, URISyntaxException
+ {
+ try (FDFDocument fdf = FDFDocument.load(new File(TestFDF.class.getResource(name).toURI())))
+ {
+ fdf.saveXFDF(new PrintWriter(new ByteArrayOutputStream()));
+
+ List<FDFField> fields = fdf.getCatalog().getFDF().getFields();
+
+ assertEquals(2, fields.size());
+ assertEquals("Field1", fields.get(0).getPartialFieldName());
+ assertEquals("Field2", fields.get(1).getPartialFieldName());
+ assertEquals("Test1", fields.get(0).getValue());
+ assertEquals("Test2", fields.get(1).getValue());
+
+ try (PDDocument pdf = PDDocument.load(new File(TestFDF.class.getResource("/org/apache/pdfbox/pdfparser/SimpleForm2Fields.pdf").toURI())))
+ {
+ PDAcroForm acroForm = pdf.getDocumentCatalog().getAcroForm();
+ acroForm.importFDF(fdf);
+ assertEquals("Test1", acroForm.getField("Field1").getValueAsString());
+ assertEquals("Test2", acroForm.getField("Field2").getValueAsString());
}
- finally
- {
- if( freedom != null )
- {
- freedom.close();
- }
- if( fdf != null )
- {
- fdf.close();
- }
- }
- }
- }
-
- private void testContentStreamContains( PDDocument doc, PDAnnotationWidget widget, String expected ) throws Exception
- {
- PDAppearanceEntry normalAppearance = widget.getAppearance().getNormalAppearance();
- PDAppearanceStream appearanceStream = normalAppearance.getAppearanceStream();
-
- List<Object> actualTokens = getStreamTokens( doc, appearanceStream );
- assertTrue( actualTokens.contains( new COSString( expected ) ) );
- }
-
- private void testContentStreams( PDDocument doc, PDTerminalField field, String expected ) throws Exception
- {
- PDAnnotationWidget widget = field.getWidgets().get(0);
- PDAppearanceEntry normalAppearance = widget.getAppearance().getNormalAppearance();
- PDAppearanceStream appearanceStream = normalAppearance.getAppearanceStream();
-
- List<Object> actualTokens = getStreamTokens( doc, appearanceStream );
- List<Object> expectedTokens = getStreamTokens( doc, expected );
- assertEquals( actualTokens.size(), expectedTokens.size() );
- for( int i=0; i<actualTokens.size(); i++ )
- {
- Object actualToken = actualTokens.get( i );
- Object expectedToken = expectedTokens.get( i );
- assertEquals( actualToken, expectedToken );
- }
- }
-
- private List<Object> getStreamTokens( PDDocument doc, String string ) throws IOException
- {
- PDFStreamParser parser;
-
- List<Object> tokens = null;
- if( string != null )
- {
- parser = new PDFStreamParser( string.getBytes() );
- parser.parse();
- tokens = parser.getTokens();
- }
- return tokens;
- }
-
- private List<Object> getStreamTokens( PDDocument doc, PDContentStream stream ) throws IOException
- {
- PDFStreamParser parser;
-
- List<Object> tokens = null;
- if( stream != null )
- {
- parser = new PDFStreamParser( stream );
- parser.parse();
- tokens = parser.getTokens();
}
- return tokens;
}
}
Added: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/SimpleForm2Fields.pdf
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/SimpleForm2Fields.pdf?rev=1802615&view=auto
==============================================================================
Binary file - no diff available.
Propchange: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/SimpleForm2Fields.pdf
------------------------------------------------------------------------------
svn:mime-type = application/pdf
Added: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/nocatalog.fdf
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/nocatalog.fdf?rev=1802615&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/nocatalog.fdf (added)
+++ pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/nocatalog.fdf Fri Jul 21 17:10:44 2017
@@ -0,0 +1,8 @@
+%FDF-1.4
+%âãÏÓ
+1 0 obj
+<</FDF<</Fields[<</T(Field1)/V(Test1)>><</T(Field2)/V(Test2)>>]>>>>
+endobj
+trailer
+<</Root 1 0 R>>
+%%EOF
Added: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/withcatalog.fdf
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/withcatalog.fdf?rev=1802615&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/withcatalog.fdf (added)
+++ pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdfparser/withcatalog.fdf Fri Jul 21 17:10:44 2017
@@ -0,0 +1,8 @@
+%FDF-1.4
+%âãÏÓ
+1 0 obj
+<</FDF<</Fields[<</T(Field1)/V(Test1)>><</T(Field2)/V(Test2)>>]>>/Type/Catalog>>
+endobj
+trailer
+<</Root 1 0 R>>
+%%EOF