Search in sources :

Example 6 with PDResources

use of com.tom_roush.pdfbox.pdmodel.PDResources in project PdfBox-Android by TomRoush.

the class PDAbstractAppearanceHandler method getAppearanceEntryAsContentStream.

private PDAppearanceContentStream getAppearanceEntryAsContentStream(PDAppearanceEntry appearanceEntry, boolean compress) throws IOException {
    PDAppearanceStream appearanceStream = appearanceEntry.getAppearanceStream();
    setTransformationMatrix(appearanceStream);
    // ensure there are resources
    PDResources resources = appearanceStream.getResources();
    if (resources == null) {
        resources = new PDResources();
        appearanceStream.setResources(resources);
    }
    return new PDAppearanceContentStream(appearanceStream, compress);
}
Also used : PDAppearanceStream(com.tom_roush.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream) PDAppearanceContentStream(com.tom_roush.pdfbox.pdmodel.PDAppearanceContentStream) PDResources(com.tom_roush.pdfbox.pdmodel.PDResources)

Example 7 with PDResources

use of com.tom_roush.pdfbox.pdmodel.PDResources in project PdfBox-Android by TomRoush.

the class PDAcroFormTest method testAcroFormDefaultFonts.

/**
 * PDFBOX-3732, PDFBOX-4303, PDFBOX-4393: Test whether /Helv and /ZaDb get added, but only if
 * they don't exist.
 */
@Test
public void testAcroFormDefaultFonts() throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PDDocument doc = new PDDocument();
    PDPage page = new PDPage(PDRectangle.A4);
    doc.addPage(page);
    PDAcroForm acroForm2 = new PDAcroForm(doc);
    doc.getDocumentCatalog().setAcroForm(acroForm2);
    PDResources defaultResources = acroForm2.getDefaultResources();
    assertNull(defaultResources);
    defaultResources = new PDResources();
    acroForm2.setDefaultResources(defaultResources);
    assertNull(defaultResources.getFont(COSName.HELV));
    assertNull(defaultResources.getFont(COSName.ZA_DB));
    // getting AcroForm sets the two fonts
    acroForm2 = doc.getDocumentCatalog().getAcroForm();
    defaultResources = acroForm2.getDefaultResources();
    assertNotNull(defaultResources.getFont(COSName.HELV));
    assertNotNull(defaultResources.getFont(COSName.ZA_DB));
    // repeat with a new AcroForm (to delete AcroForm cache) and thus missing /DR
    doc.getDocumentCatalog().setAcroForm(new PDAcroForm(doc));
    acroForm2 = doc.getDocumentCatalog().getAcroForm();
    defaultResources = acroForm2.getDefaultResources();
    PDFont helv = defaultResources.getFont(COSName.HELV);
    PDFont zadb = defaultResources.getFont(COSName.ZA_DB);
    assertNotNull(helv);
    assertNotNull(zadb);
    doc.save(baos);
    doc.close();
    doc = PDDocument.load(baos.toByteArray());
    acroForm2 = doc.getDocumentCatalog().getAcroForm();
    defaultResources = acroForm2.getDefaultResources();
    helv = defaultResources.getFont(COSName.HELV);
    zadb = defaultResources.getFont(COSName.ZA_DB);
    assertNotNull(helv);
    assertNotNull(zadb);
    // make sure that font wasn't overwritten
    assertNotEquals(PDType1Font.HELVETICA, helv);
    assertNotEquals(PDType1Font.ZAPF_DINGBATS, zadb);
    doc.close();
}
Also used : PDFont(com.tom_roush.pdfbox.pdmodel.font.PDFont) PDPage(com.tom_roush.pdfbox.pdmodel.PDPage) PDDocument(com.tom_roush.pdfbox.pdmodel.PDDocument) PDResources(com.tom_roush.pdfbox.pdmodel.PDResources) ByteArrayOutputStream(java.io.ByteArrayOutputStream) Test(org.junit.Test)

Example 8 with PDResources

use of com.tom_roush.pdfbox.pdmodel.PDResources in project PdfBox-Android by TomRoush.

the class PDAcroFormTest method testAddMissingInformationOnAcroFormAccess.

/*
     * Test that we add missing ressouce information to an AcroForm
     * when accessing the AcroForm on the PD level
     * (PDFBOX-3752)
     */
@Test
public void testAddMissingInformationOnAcroFormAccess() {
    try {
        byte[] pdfBytes = createAcroFormWithMissingResourceInformation();
        PDDocument pdfDocument = PDDocument.load(pdfBytes);
        PDDocumentCatalog documentCatalog = pdfDocument.getDocumentCatalog();
        // this call shall trigger the generation of missing information
        PDAcroForm theAcroForm = documentCatalog.getAcroForm();
        // ensure that the missing information has been generated
        // DA entry
        assertEquals("/Helv 0 Tf 0 g ", theAcroForm.getDefaultAppearance());
        assertNotNull(theAcroForm.getDefaultResources());
        // DR entry
        PDResources acroFormResources = theAcroForm.getDefaultResources();
        assertNotNull(acroFormResources.getFont(COSName.getPDFName("Helv")));
        assertEquals("Helvetica", acroFormResources.getFont(COSName.getPDFName("Helv")).getName());
        assertNotNull(acroFormResources.getFont(COSName.getPDFName("ZaDb")));
        assertEquals("ZapfDingbats", acroFormResources.getFont(COSName.getPDFName("ZaDb")).getName());
        pdfDocument.close();
    } catch (IOException e) {
        System.err.println("Couldn't create test document, test skipped");
        return;
    }
}
Also used : PDDocument(com.tom_roush.pdfbox.pdmodel.PDDocument) PDResources(com.tom_roush.pdfbox.pdmodel.PDResources) IOException(java.io.IOException) PDDocumentCatalog(com.tom_roush.pdfbox.pdmodel.PDDocumentCatalog) Test(org.junit.Test)

Example 9 with PDResources

use of com.tom_roush.pdfbox.pdmodel.PDResources in project PdfBox-Android by TomRoush.

the class TestOptionalContentGroups method testOCGConsumption.

/**
 * Tests OCG functions on a loaded PDF.
 * @throws Exception if an error occurs
 */
public void testOCGConsumption() throws Exception {
    File pdfFile = new File(testResultsDir, "ocg-generation.pdf");
    if (!pdfFile.exists()) {
        testOCGGeneration();
    }
    PDDocument doc = PDDocument.load(pdfFile);
    try {
        assertEquals(1.5f, doc.getVersion());
        PDDocumentCatalog catalog = doc.getDocumentCatalog();
        PDPage page = doc.getPage(0);
        PDResources resources = page.getResources();
        COSName mc0 = COSName.getPDFName("oc1");
        PDOptionalContentGroup ocg = (PDOptionalContentGroup) resources.getProperties(mc0);
        assertNotNull(ocg);
        assertEquals("background", ocg.getName());
        assertNull(resources.getProperties(COSName.getPDFName("inexistent")));
        PDOptionalContentProperties ocgs = catalog.getOCProperties();
        assertEquals(BaseState.ON, ocgs.getBaseState());
        Set<String> names = new java.util.HashSet<String>(Arrays.asList(ocgs.getGroupNames()));
        assertEquals(3, names.size());
        assertTrue(names.contains("background"));
        assertTrue(ocgs.isGroupEnabled("background"));
        assertTrue(ocgs.isGroupEnabled("enabled"));
        assertFalse(ocgs.isGroupEnabled("disabled"));
        ocgs.setGroupEnabled("background", false);
        assertFalse(ocgs.isGroupEnabled("background"));
        PDOptionalContentGroup background = ocgs.getGroup("background");
        assertEquals(ocg.getName(), background.getName());
        assertNull(ocgs.getGroup("inexistent"));
        Collection<PDOptionalContentGroup> coll = ocgs.getOptionalContentGroups();
        assertEquals(3, coll.size());
        Set<String> nameSet = new HashSet<String>();
        for (PDOptionalContentGroup ocg2 : coll) {
            nameSet.add(ocg2.getName());
        }
        assertTrue(nameSet.contains("background"));
        assertTrue(nameSet.contains("enabled"));
        assertTrue(nameSet.contains("disabled"));
    } finally {
        doc.close();
    }
}
Also used : PDPage(com.tom_roush.pdfbox.pdmodel.PDPage) PDResources(com.tom_roush.pdfbox.pdmodel.PDResources) PDDocumentCatalog(com.tom_roush.pdfbox.pdmodel.PDDocumentCatalog) COSName(com.tom_roush.pdfbox.cos.COSName) PDDocument(com.tom_roush.pdfbox.pdmodel.PDDocument) File(java.io.File) HashSet(java.util.HashSet)

Example 10 with PDResources

use of com.tom_roush.pdfbox.pdmodel.PDResources in project PdfBox-Android by TomRoush.

the class TestOptionalContentGroupsInstrumentationTest method testOCGGenerationSameNameCanHaveSameVisibilityOff.

/**
 * PDFBOX-4496: setGroupEnabled(String, boolean) must catch all OCGs of a name even when several
 * names are identical.
 *
 * @throws IOException
 */
@Test
public void testOCGGenerationSameNameCanHaveSameVisibilityOff() throws IOException {
    Bitmap expectedImage;
    Bitmap actualImage;
    PDDocument doc = new PDDocument();
    try {
        // Create new page
        PDPage page = new PDPage();
        doc.addPage(page);
        PDResources resources = page.getResources();
        if (resources == null) {
            resources = new PDResources();
            page.setResources(resources);
        }
        // Prepare OCG functionality
        PDOptionalContentProperties ocprops = new PDOptionalContentProperties();
        doc.getDocumentCatalog().setOCProperties(ocprops);
        // ocprops.setBaseState(BaseState.ON); //ON=default
        // Create OCG for background
        PDOptionalContentGroup background = new PDOptionalContentGroup("background");
        ocprops.addGroup(background);
        assertTrue(ocprops.isGroupEnabled("background"));
        // Create OCG for enabled
        PDOptionalContentGroup enabled = new PDOptionalContentGroup("science");
        ocprops.addGroup(enabled);
        assertFalse(ocprops.setGroupEnabled("science", true));
        assertTrue(ocprops.isGroupEnabled("science"));
        // Create OCG for disabled1
        PDOptionalContentGroup disabled1 = new PDOptionalContentGroup("alternative");
        ocprops.addGroup(disabled1);
        // Create OCG for disabled2 with same name as disabled1
        PDOptionalContentGroup disabled2 = new PDOptionalContentGroup("alternative");
        ocprops.addGroup(disabled2);
        assertFalse(ocprops.setGroupEnabled("alternative", false));
        assertFalse(ocprops.isGroupEnabled("alternative"));
        // Setup page content stream and paint background/title
        PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.OVERWRITE, false);
        PDFont font = PDType1Font.HELVETICA_BOLD;
        contentStream.beginMarkedContent(COSName.OC, background);
        contentStream.beginText();
        contentStream.setFont(font, 14);
        contentStream.newLineAtOffset(80, 700);
        contentStream.showText("PDF 1.5: Optional Content Groups");
        contentStream.endText();
        contentStream.endMarkedContent();
        font = PDType1Font.HELVETICA;
        // Paint enabled layer
        contentStream.beginMarkedContent(COSName.OC, enabled);
        contentStream.setNonStrokingColor(AWTColor.GREEN);
        contentStream.beginText();
        contentStream.setFont(font, 12);
        contentStream.newLineAtOffset(80, 600);
        contentStream.showText("The earth is a sphere");
        contentStream.endText();
        contentStream.endMarkedContent();
        // Paint disabled layer1
        contentStream.beginMarkedContent(COSName.OC, disabled1);
        contentStream.setNonStrokingColor(AWTColor.RED);
        contentStream.beginText();
        contentStream.setFont(font, 12);
        contentStream.newLineAtOffset(80, 500);
        contentStream.showText("Alternative 1: The earth is a flat circle");
        contentStream.endText();
        contentStream.endMarkedContent();
        // Paint disabled layer2
        contentStream.beginMarkedContent(COSName.OC, disabled2);
        contentStream.setNonStrokingColor(AWTColor.BLUE);
        contentStream.beginText();
        contentStream.setFont(font, 12);
        contentStream.newLineAtOffset(80, 450);
        contentStream.showText("Alternative 2: The earth is a flat parallelogram");
        contentStream.endText();
        contentStream.endMarkedContent();
        contentStream.close();
        doc.getDocumentCatalog().setPageMode(PageMode.USE_OPTIONAL_CONTENT);
        File targetFile = new File(testResultsDir, "ocg-generation-same-name-off.pdf");
        doc.save(targetFile.getAbsolutePath());
        doc.close();
        // render PDF with science disabled and alternatives with same name enabled
        doc = PDDocument.load(new File(testResultsDir, "ocg-generation-same-name-off.pdf"));
        doc.getDocumentCatalog().getOCProperties().setGroupEnabled("background", false);
        doc.getDocumentCatalog().getOCProperties().setGroupEnabled("science", false);
        doc.getDocumentCatalog().getOCProperties().setGroupEnabled("alternative", true);
        actualImage = new PDFRenderer(doc).renderImage(0, 2);
        actualImage.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(new File(testResultsDir, "ocg-generation-same-name-off-actual.png")));
    } finally {
        doc.close();
    }
    // create PDF without OCGs to created expected rendering
    PDDocument doc2 = new PDDocument();
    try {
        // Create new page
        PDPage page = new PDPage();
        doc2.addPage(page);
        PDResources resources = page.getResources();
        if (resources == null) {
            resources = new PDResources();
            page.setResources(resources);
        }
        PDPageContentStream contentStream = new PDPageContentStream(doc2, page, AppendMode.OVERWRITE, false);
        PDFont font = PDType1Font.HELVETICA;
        contentStream.setNonStrokingColor(AWTColor.RED);
        contentStream.beginText();
        contentStream.setFont(font, 12);
        contentStream.newLineAtOffset(80, 500);
        contentStream.showText("Alternative 1: The earth is a flat circle");
        contentStream.endText();
        contentStream.setNonStrokingColor(AWTColor.BLUE);
        contentStream.beginText();
        contentStream.setFont(font, 12);
        contentStream.newLineAtOffset(80, 450);
        contentStream.showText("Alternative 2: The earth is a flat parallelogram");
        contentStream.endText();
        contentStream.close();
        expectedImage = new PDFRenderer(doc2).renderImage(0, 2);
        actualImage.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(new File(testResultsDir, "ocg-generation-same-name-off-expected.png")));
    } finally {
        doc2.close();
    }
    // compare images
    int height = expectedImage.getHeight();
    int width = expectedImage.getWidth();
    int[] expectedImagePixels = new int[width * height];
    expectedImage.getPixels(expectedImagePixels, 0, width, 0, 0, width, height);
    int[] actualImagePixels = new int[width * height];
    actualImage.getPixels(actualImagePixels, 0, width, 0, 0, width, height);
    Assert.assertArrayEquals(expectedImagePixels, actualImagePixels);
}
Also used : PDFont(com.tom_roush.pdfbox.pdmodel.font.PDFont) PDPage(com.tom_roush.pdfbox.pdmodel.PDPage) PDResources(com.tom_roush.pdfbox.pdmodel.PDResources) Bitmap(android.graphics.Bitmap) PDDocument(com.tom_roush.pdfbox.pdmodel.PDDocument) FileOutputStream(java.io.FileOutputStream) PDPageContentStream(com.tom_roush.pdfbox.pdmodel.PDPageContentStream) File(java.io.File) PDFRenderer(com.tom_roush.pdfbox.rendering.PDFRenderer) Test(org.junit.Test)

Aggregations

PDResources (com.tom_roush.pdfbox.pdmodel.PDResources)44 PDPage (com.tom_roush.pdfbox.pdmodel.PDPage)13 PDRectangle (com.tom_roush.pdfbox.pdmodel.common.PDRectangle)13 PDDocument (com.tom_roush.pdfbox.pdmodel.PDDocument)11 COSName (com.tom_roush.pdfbox.cos.COSName)9 Matrix (com.tom_roush.pdfbox.util.Matrix)9 IOException (java.io.IOException)8 PDFont (com.tom_roush.pdfbox.pdmodel.font.PDFont)7 PDFormXObject (com.tom_roush.pdfbox.pdmodel.graphics.form.PDFormXObject)7 File (java.io.File)7 COSDictionary (com.tom_roush.pdfbox.cos.COSDictionary)6 COSBase (com.tom_roush.pdfbox.cos.COSBase)5 PDPageContentStream (com.tom_roush.pdfbox.pdmodel.PDPageContentStream)5 AffineTransform (com.tom_roush.harmony.awt.geom.AffineTransform)4 PDAppearanceContentStream (com.tom_roush.pdfbox.pdmodel.PDAppearanceContentStream)4 PDColor (com.tom_roush.pdfbox.pdmodel.graphics.color.PDColor)4 PDGraphicsState (com.tom_roush.pdfbox.pdmodel.graphics.state.PDGraphicsState)4 PDAppearanceStream (com.tom_roush.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream)4 PDDocumentCatalog (com.tom_roush.pdfbox.pdmodel.PDDocumentCatalog)3 PDStream (com.tom_roush.pdfbox.pdmodel.common.PDStream)3