Search in sources :

Example 1 with PdfString

use of com.itextpdf.kernel.pdf.PdfString in project i7j-pdfsweep by itext.

the class PdfCleanUpTool method parseDAParam.

private Map<String, List> parseDAParam(PdfString DA) throws IOException {
    Map<String, List> commandArguments = new HashMap<String, List>();
    PdfTokenizer tokeniser = new PdfTokenizer(new RandomAccessFileOrArray(new RandomAccessSourceFactory().createSource(DA.toUnicodeString().getBytes(StandardCharsets.UTF_8))));
    List currentArguments = new ArrayList();
    while (tokeniser.nextToken()) {
        if (tokeniser.getTokenType() == PdfTokenizer.TokenType.Other) {
            String key = tokeniser.getStringValue();
            if ("RG".equals(key) || "G".equals(key) || "K".equals(key)) {
                key = "StrokeColor";
            } else if ("rg".equals(key) || "g".equals(key) || "k".equals(key)) {
                key = "FillColor";
            }
            commandArguments.put(key, currentArguments);
            currentArguments = new ArrayList();
        } else {
            switch(tokeniser.getTokenType()) {
                case Number:
                    currentArguments.add(new PdfNumber(new Float(tokeniser.getStringValue())));
                    break;
                case Name:
                    currentArguments.add(new PdfName(tokeniser.getStringValue()));
                    break;
                default:
                    currentArguments.add(tokeniser.getStringValue());
            }
        }
    }
    return commandArguments;
}
Also used : PdfTokenizer(com.itextpdf.io.source.PdfTokenizer) RandomAccessFileOrArray(com.itextpdf.io.source.RandomAccessFileOrArray) PdfName(com.itextpdf.kernel.pdf.PdfName) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ArrayList(java.util.ArrayList) RandomAccessSourceFactory(com.itextpdf.io.source.RandomAccessSourceFactory) ArrayList(java.util.ArrayList) List(java.util.List) PdfNumber(com.itextpdf.kernel.pdf.PdfNumber) PdfString(com.itextpdf.kernel.pdf.PdfString)

Example 2 with PdfString

use of com.itextpdf.kernel.pdf.PdfString in project i7j-pdfsweep by itext.

the class PdfCleanUpTool method drawOverlayText.

private void drawOverlayText(PdfCanvas canvas, String overlayText, Rectangle annotRect, PdfBoolean repeat, PdfString defaultAppearance, int justification) throws IOException {
    Map<String, List> parsedDA;
    try {
        parsedDA = parseDAParam(defaultAppearance);
    } catch (NullPointerException npe) {
        throw new PdfException(CleanupExceptionMessageConstant.DEFAULT_APPEARANCE_NOT_FOUND);
    }
    PdfFont font;
    float fontSize = 12;
    List fontArgs = parsedDA.get("Tf");
    PdfDictionary formDictionary = pdfDocument.getCatalog().getPdfObject().getAsDictionary(PdfName.AcroForm);
    if (fontArgs != null && formDictionary != null) {
        font = getFontFromAcroForm((PdfName) fontArgs.get(0));
        fontSize = ((PdfNumber) fontArgs.get(1)).floatValue();
    } else {
        font = PdfFontFactory.createFont();
    }
    if (pdfDocument.isTagged()) {
        canvas.openTag(new CanvasArtifact());
    }
    Canvas modelCanvas = new Canvas(canvas, annotRect, false);
    Paragraph p = new Paragraph(overlayText).setFont(font).setFontSize(fontSize).setMargin(0);
    TextAlignment textAlignment = TextAlignment.LEFT;
    switch(justification) {
        case 1:
            textAlignment = TextAlignment.CENTER;
            break;
        case 2:
            textAlignment = TextAlignment.RIGHT;
            break;
        default:
    }
    p.setTextAlignment(textAlignment);
    List strokeColorArgs = parsedDA.get("StrokeColor");
    if (strokeColorArgs != null) {
        p.setStrokeColor(getColor(strokeColorArgs));
    }
    List fillColorArgs = parsedDA.get("FillColor");
    if (fillColorArgs != null) {
        p.setFontColor(getColor(fillColorArgs));
    }
    modelCanvas.add(p);
    if (repeat != null && repeat.getValue()) {
        boolean hasFull = modelCanvas.getRenderer().hasProperty(Property.FULL);
        boolean isFull = hasFull ? (boolean) modelCanvas.getRenderer().getPropertyAsBoolean(Property.FULL) : false;
        while (!isFull) {
            p.add(overlayText);
            LayoutArea previousArea = modelCanvas.getRenderer().getCurrentArea().clone();
            modelCanvas.relayout();
            if (modelCanvas.getRenderer().getCurrentArea().equals(previousArea)) {
                // Avoid infinite loop. This might be caused by the fact that the font does not support the text we want to show
                break;
            }
            hasFull = modelCanvas.getRenderer().hasProperty(Property.FULL);
            isFull = hasFull ? (boolean) modelCanvas.getRenderer().getPropertyAsBoolean(Property.FULL) : false;
        }
    }
    modelCanvas.getRenderer().flush();
    if (pdfDocument.isTagged()) {
        canvas.closeTag();
    }
}
Also used : PdfException(com.itextpdf.kernel.exceptions.PdfException) PdfName(com.itextpdf.kernel.pdf.PdfName) PdfDictionary(com.itextpdf.kernel.pdf.PdfDictionary) Canvas(com.itextpdf.layout.Canvas) PdfCanvas(com.itextpdf.kernel.pdf.canvas.PdfCanvas) PdfString(com.itextpdf.kernel.pdf.PdfString) Paragraph(com.itextpdf.layout.element.Paragraph) LayoutArea(com.itextpdf.layout.layout.LayoutArea) CanvasArtifact(com.itextpdf.kernel.pdf.canvas.CanvasArtifact) PdfFont(com.itextpdf.kernel.font.PdfFont) TextAlignment(com.itextpdf.layout.properties.TextAlignment) ArrayList(java.util.ArrayList) List(java.util.List)

Example 3 with PdfString

use of com.itextpdf.kernel.pdf.PdfString in project i7j-pdfsweep by itext.

the class PdfAutoSweepTools method tentativeCleanUp.

/**
 * Perform tentative cleanup of areas of interest on a given {@link PdfPage}
 * This method will add all redaction annotations to the given page, allowing
 * the end-user to choose which redactions to keep or delete.
 *
 * @param pdfPage the page to clean up
 */
public void tentativeCleanUp(PdfPage pdfPage) {
    List<PdfCleanUpLocation> cleanUpLocations = getPdfCleanUpLocations(pdfPage);
    for (PdfCleanUpLocation loc : cleanUpLocations) {
        PdfString title = new PdfString("Annotation:" + annotationNumber);
        annotationNumber++;
        float[] color = loc.getCleanUpColor().getColorValue();
        // convert to annotation
        PdfAnnotation redact = new PdfRedactAnnotation(loc.getRegion()).setDefaultAppearance(new PdfString("Helvetica 12 Tf 0 g")).setTitle(title).put(PdfName.Subj, PdfName.Redact).put(PdfName.IC, new PdfArray(new float[] { 0f, 0f, 0f })).put(PdfName.OC, new PdfArray(color));
        pdfPage.addAnnotation(redact);
    }
}
Also used : PdfRedactAnnotation(com.itextpdf.kernel.pdf.annot.PdfRedactAnnotation) PdfArray(com.itextpdf.kernel.pdf.PdfArray) PdfAnnotation(com.itextpdf.kernel.pdf.annot.PdfAnnotation) PdfCleanUpLocation(com.itextpdf.pdfcleanup.PdfCleanUpLocation) PdfString(com.itextpdf.kernel.pdf.PdfString)

Example 4 with PdfString

use of com.itextpdf.kernel.pdf.PdfString in project i7js-highlevel by itext.

the class C07E11_Actions method createPdf.

public void createPdf(String dest) throws IOException {
    // Initialize PDF document
    PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
    pdf.getCatalog().setOpenAction(PdfDestination.makeDestination(new PdfString("toc")));
    pdf.getCatalog().setAdditionalAction(PdfName.WC, PdfAction.createJavaScript("app.alert('Thank you for reading');"));
    pdf.addNewPage().setAdditionalAction(PdfName.O, PdfAction.createJavaScript("app.alert('This is where it starts!');"));
    // Initialize document
    Document document = new Document(pdf);
    PdfFont font = PdfFontFactory.createFont(StandardFonts.TIMES_ROMAN);
    PdfFont bold = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);
    document.setTextAlignment(TextAlignment.JUSTIFIED).setHyphenation(new HyphenationConfig("en", "uk", 3, 3)).setFont(font).setFontSize(11);
    BufferedReader br = new BufferedReader(new FileReader(SRC));
    String name, line;
    Paragraph p;
    boolean title = true;
    int counter = 0;
    List<SimpleEntry<String, SimpleEntry<String, Integer>>> toc = new ArrayList<>();
    while ((line = br.readLine()) != null) {
        p = new Paragraph(line);
        p.setKeepTogether(true);
        if (title) {
            name = String.format("title%02d", counter++);
            p.setFont(bold).setFontSize(12).setKeepWithNext(true).setDestination(name);
            title = false;
            document.add(p);
            toc.add(new SimpleEntry(name, new SimpleEntry(line, pdf.getNumberOfPages())));
        } else {
            p.setFirstLineIndent(36);
            if (line.isEmpty()) {
                p.setMarginBottom(12);
                title = true;
            } else {
                p.setMarginBottom(0);
            }
            document.add(p);
        }
    }
    document.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
    p = new Paragraph().setFont(bold).add("Table of Contents").setDestination("toc");
    document.add(p);
    toc.remove(0);
    List<TabStop> tabstops = new ArrayList();
    tabstops.add(new TabStop(580, TabAlignment.RIGHT, new DottedLine()));
    for (SimpleEntry<String, SimpleEntry<String, Integer>> entry : toc) {
        SimpleEntry<String, Integer> text = entry.getValue();
        p = new Paragraph().addTabStops(tabstops).add(text.getKey()).add(new Tab()).add(String.valueOf(text.getValue())).setAction(PdfAction.createGoTo(entry.getKey()));
        document.add(p);
    }
    PdfPage page = pdf.getLastPage();
    page.setAdditionalAction(PdfName.C, PdfAction.createJavaScript("app.alert('Goodbye last page!');"));
    // Close document
    document.close();
}
Also used : PdfWriter(com.itextpdf.kernel.pdf.PdfWriter) SimpleEntry(java.util.AbstractMap.SimpleEntry) ArrayList(java.util.ArrayList) HyphenationConfig(com.itextpdf.layout.hyphenation.HyphenationConfig) TabStop(com.itextpdf.layout.element.TabStop) PdfString(com.itextpdf.kernel.pdf.PdfString) AreaBreak(com.itextpdf.layout.element.AreaBreak) Document(com.itextpdf.layout.Document) PdfDocument(com.itextpdf.kernel.pdf.PdfDocument) PdfString(com.itextpdf.kernel.pdf.PdfString) PdfDocument(com.itextpdf.kernel.pdf.PdfDocument) Paragraph(com.itextpdf.layout.element.Paragraph) Tab(com.itextpdf.layout.element.Tab) DottedLine(com.itextpdf.kernel.pdf.canvas.draw.DottedLine) PdfFont(com.itextpdf.kernel.font.PdfFont) BufferedReader(java.io.BufferedReader) FileReader(java.io.FileReader) PdfPage(com.itextpdf.kernel.pdf.PdfPage)

Example 5 with PdfString

use of com.itextpdf.kernel.pdf.PdfString in project i7js-highlevel by itext.

the class C06E10_TOC_OutlinesNames method createOutline.

public PdfOutline createOutline(PdfOutline outline, PdfDocument pdf, String title, String name) {
    if (outline == null) {
        outline = pdf.getOutlines(false);
        outline = outline.addOutline(title);
        outline.addDestination(PdfDestination.makeDestination(new PdfString(name)));
        return outline;
    }
    PdfOutline kid = outline.addOutline(title);
    kid.addDestination(PdfDestination.makeDestination(new PdfString(name)));
    return outline;
}
Also used : PdfString(com.itextpdf.kernel.pdf.PdfString) PdfOutline(com.itextpdf.kernel.pdf.PdfOutline)

Aggregations

PdfString (com.itextpdf.kernel.pdf.PdfString)8 PdfRedactAnnotation (com.itextpdf.kernel.pdf.annot.PdfRedactAnnotation)4 Rectangle (com.itextpdf.kernel.geom.Rectangle)3 PdfDocument (com.itextpdf.kernel.pdf.PdfDocument)3 PdfWriter (com.itextpdf.kernel.pdf.PdfWriter)3 PdfAnnotation (com.itextpdf.kernel.pdf.annot.PdfAnnotation)3 ArrayList (java.util.ArrayList)3 PdfException (com.itextpdf.kernel.exceptions.PdfException)2 PdfFont (com.itextpdf.kernel.font.PdfFont)2 PdfName (com.itextpdf.kernel.pdf.PdfName)2 PdfPage (com.itextpdf.kernel.pdf.PdfPage)2 PdfReader (com.itextpdf.kernel.pdf.PdfReader)2 PdfCanvas (com.itextpdf.kernel.pdf.canvas.PdfCanvas)2 Paragraph (com.itextpdf.layout.element.Paragraph)2 ExtendedITextTest (com.itextpdf.test.ExtendedITextTest)2 IntegrationTest (com.itextpdf.test.annotations.type.IntegrationTest)2 List (java.util.List)2 Test (org.junit.Test)2 PdfTokenizer (com.itextpdf.io.source.PdfTokenizer)1 RandomAccessFileOrArray (com.itextpdf.io.source.RandomAccessFileOrArray)1